2013-03-04 120 views
-1

我想將它轉換爲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 
+0

「當我們處於中間位置時」是什麼意思? – 2013-03-04 17:36:44

+0

爲什麼沒有評論(在你的代碼中)呢? – KevinDTimm 2013-03-04 17:37:05

回答

0

立刻它可能看起來類似的東西:

t1 = 0 + 50; 
LOOP: 
    s1 = *s0; 
    s2 = s2 + s1; 
    s1 = *s0 + 4; 
    s0 = s0 + 8; 
    t1 = t1 - 1; 
    if (t1 != 0) goto LOOP; 

翻譯gotofor循環:

int *s0 = /* ... */; 
int s2 = /* ... */; 

for (t1 = 50; t1 != 0; t1--) { 
    s2 += *s0; 
    s0 += 8; 
} 
+1

由於它將'0(s0)'和'4(s0)'加到's2',所以不應該將「C」循環體設爲's2 + = s0 [0]; s2 + = s0 [1]; s2 + = 8;'? – Michael 2013-03-04 18:09:38

0

它直接翻譯成:

int32_t* s0; 
int32_t i = 50; 
int32_t s2; 
do { 
    s2 += s0[j]; 
    s2 += s0[j+1]; 
    s0 += 2; 
} while(--i); 

彙編代碼中沒有給出s0和s2的初始值,但我相信你可以計算出結果