2009-04-22 8 views
2

Ich fange gerade an, MIPS Versammlung zu lehnen, und ich versuche, eine einfache while Schleife zu schreiben. Es wird auf den C-Code equivilent werden:Wie die Adresse in MIPS-Assembly zu erhöhen?

int A[5];

for(i=0;i<5;i++) A[i]=i;

Also ich weiß, ich beq kann eine while Schleife zu machen, aber ich weiß nicht, wie die Speicheradresse jedes Mal zu erhöhen, um zum nächsten Register zu gehen. Ich denke, vielleicht der slt Operand kann nützlich sein, aber ich weiß es nicht.

Antwort

2

unter der Annahme, $ 3 Punkte A []

lis $4 
.word 4 
lis $5 
.word 1 
add $7, $4, $5 ;$7 = 5 
add $6, $0, $0 ;$6 = 0 

loop: 
sw $6, 0($3) 
add $3, $4, $3 ;point to next "int" 
add $6, $5, $6 ;add 1 to our counter 
bne $7, $6, loop ;we will stop at 5 
+0

Wird das nicht genau das, was in $ 3 jede Iteration der Schleife überschrieben war? – blueintegral

+0

Eigentlich habe ich die SW-Syntax falsch. Also habe ich die 2 Register umgedreht. "sw" überschreibt kein Register, es schreibt einfach an die Stelle, auf die das Register in Klammern zeigt. – Verhogen

0
.data 

A: .space 20 #declared 20 bytes of storage to hold array of 5 int 

__start: 
     lw   $t0, A #load base address of array 
     li   $t1, 0 
loop: sw   $t1($t0), $t1 
     addi  $t1, $t1, 4 
     ble   $t1, 20, loop 
#continue code or simple exit after this 
+0

es ist nicht kompilieren. Schleife: sw $ t1 ($ t0), $ t1 -> "(": Operand ist vom falschen Typ – Samsky

Verwandte Themen