2011-08-09 46 views
1

這是我的家庭作業。評估彙編代碼的操作

請儘可能簡潔地描述以下MIPS代碼 的實現?假設寄存器$ 8保持陣列A的基址

addi $10, $0, 0 
L1: 
lw $16, 0($8) 
slt $9, $0, $16 
beq $9, $0, L2 
addi $10, $10, 1 
addi $8, $8, 4 
j L1 
L2: 

現在我想出答案是什麼,

循環將繼續無限地運行,如果A [0]包含了值小於 大於或等於0. 如果我錯了,請指導我。

在此先感謝。

回答

1

看看這個只是多一點。第7行發生的事情很重要。 addi $8, $8, 4在做什麼?這將幫助你解答問題。我認爲你現在的答案不夠充分。

+0

我可以做什麼出它是,它會繼續增加到數組A的下一個索引。那是你的意思嗎? –

+0

對,這是它的關鍵部分。接下來,這與'beq $ 9,$ 0,L2'指令有什麼關係?看看你是否可以使用這個想法修改你的作業答案。 – Feanor

+0

數組A的索引將繼續增加,直到找到值0爲止。我對嗎? –

1

隨着MIPS instruction set reference的幫助,讓我們的彙編代碼翻譯成更容易理解的形式:

Compute r0 + 0 and store to r10. 
L1: 
    Load word at address r8 + 0 to r16. 
    If r0 is less than r16, then set r9 to 1, else set r9 to 0. 
    If r9 equals r0 then goto L2. 
    Compute r10 + 1 and store to r10. 
    Compute r8 + 4 and store to r8. 
    Goto L1. 
L2: 

注意,R0的值總是爲零。

讓我們進一步把它翻譯:

r10 = 0 
while true: 
    r16 = memory[r8] 
    r9 = if r16 > 0 then 1 else 0 
    if r9 == 0: 
     break 
    r10 += 1 
    r8 += 4 
+0

現在困擾我的問題是,「r16會持有什麼?」 –

+1

注意r16在每次循環迭代時都被重寫了? – Nayuki

1

以下是完整的,明確的答案原來的問題 - 「什麼的代碼嗎?」:

  • 我們假設R8指向開始一個有符號的32位整數數組。
  • 代碼在數組中向前搜索一個非正的元素,並且當且僅當它找到這樣一個元素時停止。如果它停止,那麼這些屬性將保留:
    • r10等於找到的元素的數組索引。 (即0,1,2等)
    • r8等於找到的元素的地址。 (這是r8加上4 * r10的原始值。)
    • r16等於找到的元素的值(零或負)。
    • R9等於0(條件碼)

(的解釋是我在其他的答案後。)