2016-09-28 93 views
0

我試圖做出直接翻譯成MIPS這個C代碼,而無需修改任何指示:一個C轉換爲MIPS

for (i=0; i<128; i++) 

      { a[i] = b[i] - c[i] + 5; } 

我只是想了解一些事情。這裏是我到目前爲止

add $t4, $zero, $zero # I1 i is initialized to 0, $t4 = 0 
Loop: 
add $t5, $t4, $t1  # I2 temp reg $t5 = address of b[i] 
lw $t6, 0($t5)   # I3 temp reg $t6 = b[i] 
add $t5, $t4, $t2  # I4 temp reg $t5 = address of c[i] 
lw $t7, 0($t5)   # I5 temp reg $t7 = c[i] + 5 
sub $t6, $t6, $t7  # I6 temp reg $t6 = b[i] - c[i] + 5 
add $t5, $t4, $t0  # I7 temp reg $t5 = address of a[i] 
sw $t6, 0($t5)   # I8 a[i] = b[i] - c[i] + 5 
addi $t4, $t4, 4   # I9 i = i + 1 
slti $t5, $t4, 256  # I10 $t5 = 1 if $t4 < 128, i.e. i < 10 
bne $t5, $zero, Loop  # I11 go to Loop if $t4 < 128 
exit: 

我不知道我是否需要通過自身或者其確定我有它的方式來加載5在那裏與C [1]加載?任何提示都會有幫助,因爲我仍然在嘗試學習mips。謝謝!

+0

你真正的問題是什麼?提示:問題通常應該在最後有一個問號,特別是在這樣的質量保證網站中:-) – hyde

+0

我添加了一個問號,但讓我知道是否需要更多解釋 – Nuf

回答

1

5這裏是一個常數。做類似lw $t7, 0($t5)將不會加載$t75,除非從$t5的地址(準確地說)零偏移量中有一個5(並且您沒有在代碼中的上述位置存儲5)。

如果你想添加常量5到一個寄存器(說$t0)爲什麼不是addi $t0, 5

+0

因此,我會'addi $ t0,5 '在我的代碼中,而不是'lw'來加載它? – Nuf

+0

指令'lw $ t7,0($ t5)'在包含在$ t5中的數字(它應該是一個有效地址)前面的零偏移量/字節處,並將'word'加載到$ t7' - 那不是你想要的。你想在具有'c [i]'值的寄存器中加'5',爲此你需要使用'addi'。 HTH。 – babon