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

Assembly MIPS-从用户输入在数组中存储整数,assembly,mips,Assembly,Mips,我试图将用户输入存储到一个数组中,但当我使用sw时,我得到一个错误“存储地址未在字绑定上对齐”。我的目标是从数组中读取10个整数,但在输入第一个数字后,sw命令出现错误。我不知道我做错了什么我花了几个小时想弄明白。任何帮助都将受到极大的感谢并被视为有用 .data mess: .asciiz " Enter 10 numbers to be stored in the array. " array: .space 40 #10 element integer array

我试图将用户输入存储到一个数组中,但当我使用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
试试这个:

...
.p2align 2
array: .space 40    #10 element integer array
...
  • 商店应该是

    sw$v0,阵列($t0)

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

  • 在上面设置数组
    mess


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

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

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

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

正确的数组输入代码

.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

这没有改变任何事情。不过谢谢你的回复。你有没有收到任何编译错误
.p2align 2
应该将以下代码/数据对齐到一个2的幂(这里2^2=4)的地址上。如果在
mess
字符串中添加一到三个额外字符,会怎么样?这也可以修复
数组的对齐方式。请使用标记格式使其更具可读性。请添加一些解释,以帮助消除StackOverflow是免费代码编写服务的误解。