正在加载存储在MIPS寄存器中的地址



我遇到了一个似乎无法解决的小问题。我有几个数字以以下方式存储在堆栈中:

|5|   0($sp)
|4|   4($sp)
|3|
|8|

我想遍历堆栈,一次比较两个数字。我的意思是,我想比较0($sp)和4($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中加载它时,我都会遇到语法错误。我做错了什么?

如果我正确阅读了您的问题,您需要

lw $t5, 0($t4)

以将存储在$t4所指向的值加载到t5。

最新更新