MIPS - 在用户输入的数组中存储整数

时间:2013-04-14 05:59:10

标签: assembly mips

我正在尝试将用户输入存储到数组中,但是当我使用sw时,我得到一个错误“存储地址未在字绑定上对齐”。我的目标是从数组中读取10个整数,但在输入第一个数字后,我在sw命令中得到一个错误。我不知道我做错了什么我花了几个小时试图解决它。任何帮助将非常感谢并标记为有用。

        .data 

mess: .asciiz " Enter 10 numbers to be stored in the array. "
array: .space 40    #10 element integer array
    .globl main
    .text 
main:
    jal read
    b done
read:
    la $t0, 0   #count variable
    b readLoop
    jr $ra

readLoop:
    beq $t0, 40, read   #branch if equal to 40, 10 items
    li $v0, 4       #Print string
    la $a0, mess        #load prompt
    syscall
    li $v0, 5       #read int
    syscall 
    sw $v0, array       #store input in array ERROR HERE
    addi  $t0, $t0, 4   #add by 4 to count
    b readLoop
print:

done:

这对我有用。我不知道为什么它不起作用

    .data 
list:  .space 16
.globl main
.text

main:

    li $v0, 5
    syscall
    sw $v0, list

    move $a0, $v0
    li $v0, 1
    syscall

4 个答案:

答案 0 :(得分:5)

在为数据段中的字符串分配空间之前,请尝试为数组分配空间:

  array: .space 40    #10 element integer array
  mess: .asciiz " Enter 10 numbers to be stored in the array. "

如果先分配字符串,则数组可能从一个不能被4整除的地址开始,导致字对齐错误

答案 1 :(得分:1)

试试这个:

...
.p2align 2
array: .space 40    #10 element integer array
...

答案 2 :(得分:1)

  • 商店应该是

    sw $ v0,array($ t0)

  • la $t0, 0替换为li $t0, 0

  • 将数组设置为mess

此外,当您达到10个项目时,重新开始阅读并覆盖以前的值。

答案 3 :(得分:1)

正确的数组输入代码

.data
    myarray:.space 40    
    st:.asciiz "Enter the 10 Elements"

.text    
    li $v0,4
    la $a0,st
    syscall
    jal fun
    li $v0,10
    syscall

fun:        
    li $v0,5
    syscall
    beq $t0,40,exit
    sw $v0,myarray($t0)
    add $t0,$t0,4
    j fun

exit:
    jr $ra