1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
(gdb) disassemble /m sum
Dump of assembler code for function sum:
5 {
0x0000000000400530 <+0>: push %rbp
0x0000000000400531 <+1>: mov %rsp,%rbp
0x0000000000400534 <+4>: mov %edi,-0x14(%rbp) #获取函数参数,顺序为从左到右
0x0000000000400537 <+7>: mov %esi,-0x18(%rbp)
0x000000000040053a <+10>: mov %edx,-0x1c(%rbp)
0x000000000040053d <+13>: mov %ecx,-0x20(%rbp)
0x0000000000400540 <+16>: mov %r8d,-0x24(%rbp)
0x0000000000400544 <+20>: mov %r9d,-0x28(%rbp)
6 int s = 0x0;
0x0000000000400548 <+24>: movl $0x0,-0x4(%rbp)
7 s = a1+a2+a3+a4+a5+a6+a7+a8+a9;
=> 0x000000000040054f <+31>: mov -0x18(%rbp),%eax
0x0000000000400552 <+34>: mov -0x14(%rbp),%edx
0x0000000000400555 <+37>: add %eax,%edx
0x0000000000400557 <+39>: mov -0x1c(%rbp),%eax
0x000000000040055a <+42>: add %eax,%edx
0x000000000040055c <+44>: mov -0x20(%rbp),%eax
0x000000000040055f <+47>: add %eax,%edx
0x0000000000400561 <+49>: mov -0x24(%rbp),%eax
---Type <return> to continue, or q <return> to quit---
0x0000000000400564 <+52>: add %eax,%edx
0x0000000000400566 <+54>: mov -0x28(%rbp),%eax
0x0000000000400569 <+57>: add %eax,%edx
0x000000000040056b <+59>: mov 0x10(%rbp),%eax #取参数a7 = 0x77
0x000000000040056e <+62>: add %eax,%edx
0x0000000000400570 <+64>: mov 0x18(%rbp),%eax #取参数a8 = 0x88
0x0000000000400573 <+67>: add %eax,%edx
0x0000000000400575 <+69>: mov 0x20(%rbp),%eax #取参数a9 = 0x99
0x0000000000400578 <+72>: add %edx,%eax
0x000000000040057a <+74>: mov %eax,-0x4(%rbp)
8
9 return s;
0x000000000040057d <+77>: mov -0x4(%rbp),%eax #计算结果通过eax寄存器返回
10 }
0x0000000000400580 <+80>: pop %rbp
0x0000000000400581 <+81>: retq
End of assembler dump.
(gdb)
|
评论