Я только начинаю опираться на сборку MIPS и пытаюсь написать простой цикл while. Это будет эквивалентно коду C:
while
int A[5];
for(i=0;i<5;i++) A[i]=i;
Итак, я знаю, что могу использовать beq для создания цикла while, но я не знаю, как увеличивать адрес памяти каждый раз, чтобы перейти к следующему регистру. Я думаю, что операнд slt может быть полезен, но я не знаю.
beq
slt
при условии $ 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
.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