0
#include <stdio.h>
int source[] = {3, 1, 4, 1, 5, 9, 0};
int dest[10];
int main () {
int k;
for (k=0; source[k]!=0; k++) {
dest[k] = source[k];
}
printf ("%d values copied\n", k);
return 0;
}
這是C代碼C至MIPS源和dest指針
相當簡單,它只是拷貝數組的值,以dest數組中,除非它是0
現在,問題是用MIPS的代碼
.file 1 "arrcopy.c"
.globl source
.data
.align 2
source:
.word 3
.word 1
.word 4
.word 1
.word 5
.word 9
.word 0
.rdata
.align 2
$LC0:
.ascii "%d values copied\n\000"
.text
.align 2
.globl main
.ent main
main:
.frame $sp,24,$31 # vars= 0, regs= 1/0, args= 16, extra= 0
.mask 0x80000000,-8
.fmask 0x00000000,0
subu $sp,$sp,24
sw $31,16($sp)
jal __main
la $9,source
lw $2,0($9)
move $8,$0
beq $2,$0,$L8
move $7,$0
la $10,dest
$L6:
addu $8,$8,1
sll $3,$8,2
addu $5,$7,$9
addu $2,$3,$9
addu $6,$7,$10
lw $4,0($2)
move $7,$3
lw $3,0($5)
#nop
sw $3,0($6)
bne $4,$0,$L6
$L8:
la $4,$LC0
move $5,$8
jal printf
lw $31,16($sp)
move $2,$0
addu $sp,$sp,24
j $31
.end main
.comm dest,40
我根本看不出來,源指針是什麼,目標指針
甚至不知道什麼時候在循環開始
我想到它在$ L6
開始是用它來加載源和目標指針的地址是什麼指示?
如果你們可以找到循環,你可以給我一個關於每一行是幹什麼的想法嗎?
它看起來比手等不同
這簡直是最好的東西是永遠不會 – user2054534 2013-03-11 13:31:55
是加載地址阿杜的命令和不是啦?像什麼指令是用來加載指針的源地址和目的地址的? ? – user2054534 2013-03-11 18:30:28
'la'用於加載指針,'addu'用於向指針添加偏移量。 – Michael 2013-03-11 19:45:50