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

时间:2012-01-28 20:19:29

标签: assembly stack mips memory-address mips32

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

|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个字节获取堆栈中的第3个项目。我会一直这样做,直到寄存器值达到0。一旦发生这种情况,我会将$ sp递增4并重复该过程。

每当我尝试在PCSpim中加载它时,我都会收到语法错误。我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

lw $t5, 0($t4)

加载t5,其值存储在$ t4指向的位置。