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.

È stato utile?

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