我有一个小问题,我似乎无法解决。我有几个数字以下列方式存储在堆栈中:
|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
主要是1、2、5行。我将堆栈顶部的整数值加载到 $t3 中,并将堆栈中下一项的地址加载到 $t4 中。
然后我想在 $t4 中存储的地址加载值,进行比较(现在我只是加到零,所以我可以打印它)然后将存储在 t4 中的地址增加 4 个字节以获得第三项在堆栈中。我会一直这样做,直到寄存器值达到 0 。一旦发生这种情况,我会将 $sp 增加 4 并重复该过程。
每当我尝试在 PCSpim 中加载它时,都会出现语法错误。我究竟做错了什么?