Assembly MIPS-从用户输入在数组中存储整数
我试图将用户输入存储到一个数组中,但当我使用sw时,我得到一个错误“存储地址未在字绑定上对齐”。我的目标是从数组中读取10个整数,但在输入第一个数字后,sw命令出现错误。我不知道我做错了什么我花了几个小时想弄明白。任何帮助都将受到极大的感谢并被视为有用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
.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是免费代码编写服务的误解。