這裏的C代碼:將C代碼轉換到MIPS彙編語言
int A[10];
int sum = 0;
int i = 0;
while (i<10){
sum += A[i++];
sum *= 2;
}
這裏是我採取在轉換成MIPS:
我明白,在一個基本while循環,例如:i = $s1
, 5 = $s3
i=0;
while(i != 5)
i=i+1;
addi $s1, $zero, 0 #i=0
loop: beq $s1, $s3, endloop
add $s1, $s1, 1
j loop:
endloop:
我只是遇到了麻煩,或者遇到了困難的時間引入了sum+= A[i++];
和sum*= 2;
的稍微更難的循環。
任何幫助,非常感謝。我不是在尋找一個完整的解決方案,所以請幫我認爲。
謝謝!
'總和* = 2'是'MUL <寄存器保持總和><寄存器保持總和> 2'。然後'sum + = A [i ++]'是'add sum,sum,
(i)>'(也許語法略有不同,取決於你的彙編程序如何處理內存尋址),然後是'add i, i,1'(其中'i'是保存'i'的值的寄存器)。 – 2013-11-09 07:28:04爲什麼你的編譯器不這樣做? –