今天總算看明白了網上一段mips彙編代碼,感覺很爽阿,呵呵,隻是讓大蝦見笑了。原文章(包含該代碼)在如下網址:http://www.xtrj.org/mips/, 題目是MIPS體系結構剖析,程式設計與實踐(作者:張福新,陳懷臨, 2002)
C代碼如下:
~/ vi Hello.c
"Hello.c" [New file]
int addFunc(int,int);
int subFunc(int);
void main()
{
int x,y,z;
x= 1;
y=2;
z = addFunc(x,y);
}
int addFunc(int x,int y)
{
int value1 = 5;
int value2;
value2 = subFunc(value1);
return (x+y+value2);
}
int subFunc(int value)
{
return value--;
}
反彙編代碼後的代碼:
0000000000000000
:
0: 27bdfff8 addiu $sp,$sp,-8
4: afbf0000 sw $ra,0($sp)
8: 0c000000 jal 0
c: 00000000 nop
10: 24040001 li $a0,1
14: 0c00000a jal 28
18: 24050002 li $a1,2
1c: 8fbf0000 lw $ra,0($sp)
20: 03e00008 jr $ra
24: 27bd0008 addiu $sp,$sp,8
0000000000000028 :
28: 27bdfff0 addiu $sp,$sp,-16
2c: afbf0008 sw $ra,8($sp)
30: afb10004 sw $s1,4($sp)
34: afb00000 sw $s0,0($sp)
38: 0080802d move $s0,$a0
3c: 00a0882d move $s1,$a1
40: 0c000019 jal 64
44: 24040005 li $a0,5
48: 02118021 addu $s0,$s0,$s1
4c: 02021021 addu $v0,$s0,$v0
50: 8fbf0008 lw $ra,8($sp)
54: 8fb10004 lw $s1,4($sp)
58: 8fb00000 lw $s0,0($sp)
5c: 03e00008 jr $ra
60: 27bd0010 addiu $sp,$sp,16
0000000000000064 :
64: 03e00008 jr $ra
/* Taking advantage of the mips delay slot, filling the
* result reg v0 by simply assigning the v0 as the value
*of a0. This is a bug from my c source
* codes--"value--". I should write my codes
* like "--value", instead.
68: 0080102d move $v0,$a0
為便于察看,我已經将指令全部高亮為藍色。如果對MIPS指令不熟,看起來還是比較廢勁的哦。我是對着指令解釋,并畫圖,廢了九牛二虎之力阿。搞懂後,有種毛塞頓開,總算打開門之感,頗為爽!.^_^偶正緻力于往底層驅動發展,此番進步亦算是鼓勵了。忘高手或者有心往此方面發展的朋友,多多交流哦。