2
我剛剛開始精益MIPS組裝,並試圖編寫一個簡單的while
循環。將equivilent到C代碼:如何增加MIPS程序集中的地址?
int A[5];
for(i=0;i<5;i++) A[i]=i;
所以我知道我可以使用beq
做出while
循環,但我不知道怎麼每次增加的內存地址去下一個註冊。我想也許slt
操作數可能是有用的,但我不知道。
我剛剛開始精益MIPS組裝,並試圖編寫一個簡單的while
循環。將equivilent到C代碼:如何增加MIPS程序集中的地址?
int A[5];
for(i=0;i<5;i++) A[i]=i;
所以我知道我可以使用beq
做出while
循環,但我不知道怎麼每次增加的內存地址去下一個註冊。我想也許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
這會不會只是簡單地覆蓋什麼是$ 3每次循環? – blueintegral 2009-04-22 23:41:34
其實我的sw語法錯了。所以,我翻了2個寄存器。 「sw」不會覆蓋任何寄存器,它只是寫入由括號內的寄存器指向的位置。 – Verhogen 2009-04-23 00:05:21