我想將它轉換爲C代碼,我知道它將成爲一個從50開始並工作的forloop。但是我迷失在其他一些過程中,例如當我們陷入中間時。Mips to C轉換
addi $t1, $0, 50
LOOP: lw $s1, 0($s0)
add $s2, $s2, $s1
lw $s1, 4($s0)
add $s2, $s2, $s1
addi $s0, $s0, 8
subi $t1, $t1, 1
bne $t1, $0, LOOP
我想將它轉換爲C代碼,我知道它將成爲一個從50開始並工作的forloop。但是我迷失在其他一些過程中,例如當我們陷入中間時。Mips to C轉換
addi $t1, $0, 50
LOOP: lw $s1, 0($s0)
add $s2, $s2, $s1
lw $s1, 4($s0)
add $s2, $s2, $s1
addi $s0, $s0, 8
subi $t1, $t1, 1
bne $t1, $0, LOOP
立刻它可能看起來類似的東西:
t1 = 0 + 50;
LOOP:
s1 = *s0;
s2 = s2 + s1;
s1 = *s0 + 4;
s0 = s0 + 8;
t1 = t1 - 1;
if (t1 != 0) goto LOOP;
翻譯goto
到for
循環:
int *s0 = /* ... */;
int s2 = /* ... */;
for (t1 = 50; t1 != 0; t1--) {
s2 += *s0;
s0 += 8;
}
由於它將'0(s0)'和'4(s0)'加到's2',所以不應該將「C」循環體設爲's2 + = s0 [0]; s2 + = s0 [1]; s2 + = 8;'? – Michael 2013-03-04 18:09:38
它直接翻譯成:
int32_t* s0;
int32_t i = 50;
int32_t s2;
do {
s2 += s0[j];
s2 += s0[j+1];
s0 += 2;
} while(--i);
彙編代碼中沒有給出s0和s2的初始值,但我相信你可以計算出結果
「當我們處於中間位置時」是什麼意思? – 2013-03-04 17:36:44
爲什麼沒有評論(在你的代碼中)呢? – KevinDTimm 2013-03-04 17:37:05