我正在尝试将用户输入存储到数组中,但是当我使用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
答案 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