Cómo incrementar la dirección en el montaje MIPS?
Pregunta
Estoy empezando a inclinarse ensamblador del MIPS, y estoy tratando de escribir un simple bucle while
. Se equivilent al código C:
int A[5];
for(i=0;i<5;i++) A[i]=i;
Así que sé que puedo usar beq
para hacer un lazo while
, pero no sé cómo se incrementa la dirección de memoria cada vez para ir al siguiente registro. Creo que tal vez el operando slt
puede ser útil, pero no sé.
Solución
suponiendo $ 3 puntos a 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
Otros consejos
.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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow