我正在研究MIPS彙編語言,並在本書中遇到了這個例子,對我來說這看起來不正確。如果是這樣,它不會是我在本書中發現的第一個錯誤。分別將C轉換爲MIPS - 嵌套數組
變量f
g
和分配寄存器$s0
$s1
和,對於陣列A
和B
基地址分別爲$s6
和$s7
。
C代碼的例子是:
f = g - A[B[4]];
以及設置在對應的MIPS組件是:
lw $t0, 16($s7)
lw $s0, 0($t0)
sub $s0, $s1, $s0
從我理解上面的MIPS代碼將從存儲器提供的地址加載一些隨機數據通過$t0
然後從$s1
中減去它並且不訪問在$s6
中表示的陣列的索引$t0
。
從我的理解正確的MIPS彙編將沿着線:
lw $t0, 4($s7)
add $t0, $t0, $s6
sll $t0, $t0, 2
lw $s0, 0($t0)
sub $s0, $s1, $s0
我是正確的,這是書中的錯誤還是我誤解的東西。
編輯:修正了一個錯誤校正碼MIPS由多德
我認爲你是對的。做得好! – davin
你的解釋非常好。事實上這個代碼沒有做到它應該做的事情的最大證明是沒有提及任何'$ s6',所以它不可能從數組'A'中檢索一個元素。 – davin
假設數組A是每個元素4個字節(因爲數組B似乎是 - 您使用16的偏移量來獲取元素4,並使用lw指令獲得4個字節),您需要添加一個在這裏也乘以4(或相當於2的移位) –