天天看点

看明白了一段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指令不熟,看起来还是比较废劲的哦。我是对着指令解释,并画图,废了九牛二虎之力阿。搞懂后,有种毛塞顿开,总算打开门之感,颇为爽!.^_^偶正致力于往底层驱动发展,此番进步亦算是鼓励了。忘高手或者有心往此方面发展的朋友,多多交流哦。

继续阅读