2016-03-31 10 views
-1

MIPSをCに変換するのに苦労します(私は非常に新しいです)。まず、MIPSコードの次に起こっていることを書こうとしました。MIPSループをCに変換

blank: addi $t0, $zero, 0       t0 = 0; 
     addi $t2, $zero, ' '      t2 = 32; 
     j  L2         jump to L2; 
L1: sb $t2, 0($t1)       store new value in array 
     addi $t0, $t0, 1       t0++; 
L2: add $t1, $a0, $t0      t1 = a0 + t0; 
     lbu $t3, 0($t1)       t3 = array(t0) 
     bne $t3, $zero, L1     if(t3!=0) jump to L1 
     jr $ra        return; //jump to return address in ra 

私はそれをCに変換しようとしましたが、私は非常に混乱しており、間違っていると思います。

int array[32]; 
int i; 

for(int i=1; i!=0; i++) 
    array[i]=i; 

return; 

誰でもいくつかのヒントや訂正を提供することができれば、私はそれを感謝大幅

+0

bodyを実行しません: 'for(int i = 0; i!= 0; i ++)'。 'for(int i = 0; i <32; i ++)でなければなりません。 –

+0

申し訳ありません@FiddlingBitsどういう意味ですか? –

+0

@FiddlingBits:いいえ。 '$ t2'がループの中で使われているものを見てください。ヒント:これは塗りつぶし機能です。 – Michael

答えて

2

C互換の記述と同じコード:

           void func(char* array){ // possible fuction header 
blank: addi $t0, $zero, 0       int t0 = 0; 
     addi $t2, $zero, ' '      char t2 = 32; 
     j  L2         char* t1; 
                goto L2: 
L1: sb $t2, 0($t1)       *t1 = t2; 
     addi $t0, $t0, 1       t0++; 
L2: add $t1, $a0, $t0       t1 = &array[t0]; // or t1 = array+t0; 
     lbu $t3, 0($t1)       char t3 = *t1; 
     bne $t3, $zero, L1      if(t3!=0) goto L1; 
     jr $ra         return; 

は、今ではTHSはに相当していることは明らかです。

void func(char* array){ 
    for (int i=0; array[i] != 0; ++i) 
     array[i] = ' '; 
} 

ヘッダーが間違っている可能性があります。

+0

提案されたコードは、1つの詳細を除いて良好に見えます。 – user3629249

関連する問題