我有一个小问题,我似乎无法解决。我有几个数字以下列方式存储在堆栈中:加载地址存储在MIPS寄存器中
|5| 0($sp)
|4| 4($sp)
|3|
|8|
我想遍历堆栈,一次比较两个数字。通过这个,我的意思是我想比较0($ sp)和4($ sp),然后是0($ sp)和8($ sp),...,然后是4($ sp)和8 SP)。所以,5比4,5比3,5,8分,4比3,4,8分,3比8.
我在此尝试是
lw $t3, 0($sp) ##
la $t4, 4($sp) ##
Sum2:
beq $t2, $zero, Exit
lw $t5, $t4 ##
add $a0, $t5, $zero
li $v0, 1
syscall
add $t4, $t4, 4
addi $t2, $t2, -1
j Sum2
主要的第一,第二,和第五行。 我正在将堆栈顶部的整数值加载到$ t3中,并将堆栈中下一项的地址加载到$ t4中。
然后,我想加载值在存储在$ t4的地址,做我的比较(现在我只是加到零,所以我可以打印它),然后增加存储在t4的地址4字节来获得堆栈中的第三项。我会一直这样做直到寄存器值达到0。一旦发生这种情况,我会将$ sp增加4并重复这个过程。
每当我尝试在PCSpim中加载这个,我得到一个语法错误。我究竟做错了什么?
'la'不是MIPS指令。 (第2行) – paislee 2012-01-28 20:29:24
这是一个伪指令,在这种情况下变成addiu t4,sp,4。 – 2012-01-28 20:55:01
如果您希望人们继续回答您的问题,请接受正确答案。 – m0skit0 2012-02-02 09:52:08