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é.

¿Fue útil?

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
scroll top