天天看點

看明白了一段mips彙編

今天總算看明白了網上一段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指令不熟,看起來還是比較廢勁的哦。我是對着指令解釋,并畫圖,廢了九牛二虎之力阿。搞懂後,有種毛塞頓開,總算打開門之感,頗為爽!.^_^偶正緻力于往底層驅動發展,此番進步亦算是鼓勵了。忘高手或者有心往此方面發展的朋友,多多交流哦。

繼續閱讀