2016-03-31 28 views
-1

MIPS'yi C'ye dönüştürmekte çok sorun yaşıyorum (çok yeniyim). Önce MIPS kodunun yanında neler olduğunu yazmaya çalıştım.Mips döngüsünü C'ye dönüştürme

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 

Daha sonra C'ye dönüştürmeyi denedim ama çok kafam karıştı ve yanlış olduğunu düşünüyorum.

int array[32]; 
int i; 

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

return; 

herkes bazı ipuçları veya düzeltme teklif verebilir bunu takdir ediyorum büyük ölçüde

+0

Gövde yürütmeyecek: 'için (int i = 0; i! = 0; i ++)'. Için olmalıdır (int i = 0; i <32; i ++) '. –

+0

Üzgünüm @FiddlingBits Ne demek istediğimi anlamadım –

+0

@FiddlingBits: Nope. Döngüde kullanılan 't2' nin ne olduğuna bakın. İpucu: Bu bir dolgu işlevidir. – Michael

cevap

2

C-uyumlu tarifle aynı kodu:

           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; 

Şimdi ths eşittir olduğu açık olmalıdır:

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

Başlık hakkında yanlış olabilirim.

+0

önerilen kod bir ayrıntı dışında iyi görünüyor. IE işlevinin adı "boş" değil "func". – user3629249