2016-03-25 17 views
0

Im Unterricht lernten wir, wie man C-Code in MIPS-Anweisungen umwandelt, aber ich stieß auf ein kleines Problem. Ich wollte nur eine Klarstellung, was genau die letzte Zeile der MIPS-Instruktionen eigentlich sagt.Umwandlung von C zu MIPS

c:

do{ 
    i=i-2; 
}while(i>1); 

MIPSS:

DO: addi s1,s1,-2 // i=i-2 
    addi t0,t0, 1 // 1 
    slt t1,t0,s1  // 1<i 
    bne t1,$zero,DO // ??? 
+1

*** B *** ranch *** N *** ot *** E *** qual. Es ist deine Schleife. Es springt (verzweigt sich) zurück zur DO-Markierung, wenn die Schleife nicht abgeschlossen ist. –

+0

Der Assembly-Code entspricht nicht dem C-Code. Insbesondere wird "$ t0" inkrementiert und nicht auf Eins in der Schleife gesetzt. – EOF

+0

@EOF Ich nehme an, es sei angenommen, addi t0, $ zero, 1 –

Antwort

0
do{ 
    i=i-2; 
    }while(i>1); 

Der Assembler-Code für while und do while Schleifen Testen der entgegengesetzten Zustand des in High-Level-Code gegebenen. Wenn diese entgegengesetzte Bedingung TRUE ist, wird der while Loop-Exit.

addi $s1,$0,0  # i = 0 
    addi $t1,$0,1  # j = 1 
while: 
    addi $s1,$s1,-2 #i = i -2 
    beq $s1,$t1,done #Branch to done If i = 1 (the opposite) 
    j while   # jump to while for loop through again 
done: