MIPS - 存储整数数组根据用户输入
问题描述:
我想用户输入存储到一个数组,但是当我使用SW我得到一个错误“存储地址的绑定字未对齐”。我的目标是从阵列10个整数读,但之后,我输入的第一个数字,我得到的SW命令错误。我不知道我在做什么错我花了几个小时试图弄清楚。任何帮助将不胜感激,并显着有用。MIPS - 存储整数数组根据用户输入
.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
答
争取你的数组分配空间,你为你的数据片段串分配空间之前:
array: .space 40 #10 element integer array
mess: .asciiz " Enter 10 numbers to be stored in the array. "
如果分配字符串第一阵列可以在由4和铅是不是整除的地址开始一个字对准误差
答
工作试试这个:
...
.p2align 2
array: .space 40 #10 element integer array
...
答
-
这家店应该是
SW $ V0,数组($ T0)
替换
la $t0, 0
作者:li $t0, 0
设置上面
mess
而且数组,当你达到10项,重新启动阅读并覆盖之前的值。
答
正确的阵列输入代码
.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
+1
请使用markdown格式来提高可读性。并请添加一些解释,以帮助打击StackOverflow是免费代码编写服务的误解。 – Yunnosch
这并没有改变什么尽管如此,感谢你的回应。 –
您是否收到编译错误? '.p2align 2'应该对齐上这的2(2^2 = 4在这里)的功率的地址下面的代码/数据。如果你给“mess”字符串添加一到三个额外字符会怎么样?这也可以修正'array'的对齐方式。 –