2009-04-22 27 views
2

我剛剛開始精益MIPS組裝,並試圖編寫一個簡單的while循環。將equivilent到C代碼:如何增加MIPS程序集中的地址?

int A[5];

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

所以我知道我可以使用beq做出while循環,但我不知道怎麼每次增加的內存地址去下一個註冊。我想也許slt操作數可能是有用的,但我不知道。

回答

2

假設$ 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

這會不會只是簡單地覆蓋什麼是$ 3每次循環? – blueintegral 2009-04-22 23:41:34

+0

其實我的sw語法錯了。所以,我翻了2個寄存器。 「sw」不會覆蓋任何寄存器,它只是寫入由括號內的寄存器指向的位置。 – Verhogen 2009-04-23 00:05:21

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