2012-01-28 71 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