2012-01-28 121 views
0

我有一个小问题,我似乎无法解决。我有几个数字以下列方式存储在堆栈中:加载地址存储在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中加载这个,我得到一个语法错误。我究竟做错了什么?

+0

'la'不是MIPS指令。 (第2行) – paislee 2012-01-28 20:29:24

+1

这是一个伪指令,在这种情况下变成addiu t4,sp,4。 – 2012-01-28 20:55:01

+0

如果您希望人们继续回答您的问题,请接受正确答案。 – m0skit0 2012-02-02 09:52:08

回答

2

如果我在读你的问题正确,你想

lw $t5, 0($t4) 

存储其中$ T4点值加载T5。

+0

并获取$ a0的存储器地址? – Favolas 2012-04-21 15:35:45