Come incrementare l'indirizzo nel MIPS montaggio?
Domanda
Io sono solo iniziando a inclinarsi MIPS assemblaggio, e sto cercando di scrivere una semplice ciclo while
. Sarà equivilent al codice C:
int A[5];
for(i=0;i<5;i++) A[i]=i;
Quindi so che posso usare beq
per fare un ciclo while
, ma non so come incrementare l'indirizzo di memoria ogni volta per andare al registro successivo. Penso che forse l'operando slt
può essere utile, ma non lo so.
Soluzione
assumendo $ 3 punti di 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
Altri suggerimenti
.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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow