這是我的家庭作業。評估彙編代碼的操作
請儘可能簡潔地描述以下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. 如果我錯了,請指導我。
在此先感謝。
這是我的家庭作業。評估彙編代碼的操作
請儘可能簡潔地描述以下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. 如果我錯了,請指導我。
在此先感謝。
看看這個只是多一點。第7行發生的事情很重要。 addi $8, $8, 4
在做什麼?這將幫助你解答問題。我認爲你現在的答案不夠充分。
隨着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
現在困擾我的問題是,「r16會持有什麼?」 –
注意r16在每次循環迭代時都被重寫了? – Nayuki
以下是完整的,明確的答案原來的問題 - 「什麼的代碼嗎?」:
(的解釋是我在其他的答案後。)
我可以做什麼出它是,它會繼續增加到數組A的下一個索引。那是你的意思嗎? –
對,這是它的關鍵部分。接下來,這與'beq $ 9,$ 0,L2'指令有什麼關係?看看你是否可以使用這個想法修改你的作業答案。 – Feanor
數組A的索引將繼續增加,直到找到值0爲止。我對嗎? –