如何增加MIPS汇编中的地址?

时间:2021-04-21 03:13:05

I am just starting to lean MIPS assembly, and I am trying to write a simple while loop. It will be equivilent to the C code:

我刚刚开始倾向于MIPS汇编,我正在尝试编写一个简单的while循环。它将与C代码等效:

int A[5];

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

So I know I can use beq to make a while loop, but I don't know how to increment the memory address each time to go to the next register. I think maybe the slt operand may be useful, but I don't know.

所以我知道我可以使用beq来做一个while循环,但我不知道如何每次增加内存地址以转到下一个寄存器。我想也许slt操作数可能有用,但我不知道。

2 个解决方案

#1


assuming $3 points to A[]

假设A []为3美元

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

#2


    .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

#1


assuming $3 points to A[]

假设A []为3美元

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

#2


    .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