2009-04-22 4 views
2

Je commence juste à pencher l'assemblage MIPS, et j'essaye d'écrire une simple boucle while. Il sera equivilent au code C:Comment incrémenter l'adresse dans l'assemblage MIPS?

int A[5];

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

Je sais que je peux utiliser beq pour faire une boucle while, mais je ne sais pas comment incrémenter l'adresse de la mémoire à chaque fois pour aller au prochain registre. Je pense que l'opérande slt peut être utile, mais je ne sais pas.

Répondre

2

en supposant 3 $ points 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

Est-ce pas écrasera tout ce qui était en 3 $ par itération de la boucle? – blueintegral

+0

En fait, j'ai mal la syntaxe sw. Donc, j'ai retourné les 2 registres. "sw" n'écrase aucun registre, il écrit simplement à l'endroit indiqué par le registre entre parenthèses. – 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

dose pas compiler. boucle: sw $ t1 ($ t0), $ t1 -> "(": l'opérande est de type incorrect – Samsky

Questions connexes