Как увеличить адрес в сборке MIPS? - PullRequest
2 голосов
/ 22 апреля 2009

Я только начинаю опираться на сборку MIPS и пытаюсь написать простой цикл while. Это будет эквивалентно коду C:

int A[5];

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

Итак, я знаю, что могу использовать beq для создания цикла while, но я не знаю, как увеличивать адрес памяти каждый раз, чтобы перейти к следующему регистру. Я думаю, что операнд slt может быть полезен, но я не знаю.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2009

при условии $ 3 балла к 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 голосов
/ 24 сентября 2011
    .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
...