调用有八个参数的函数:
1 .file "eight_p.c"
2 .text
3 .globl eight_f
4 .type eight_f, @function
5 eight_f:
6 .LFB0:
7 .cfi_startproc
8 pushq %rbp
9 .cfi_def_cfa_offset 16
10 movq %rsp, %rbp
11 .cfi_offset 6, -16
12 .cfi_def_cfa_register 6
13 movl %esi, %eax
14 movl %edx, -12(%rbp)
15 movq %rcx, -24(%rbp)
16 movl %r8d, -28(%rbp)
17 movl %r9d, -32(%rbp)
18 movb %dil, -4(%rbp)
19 movw %ax, -8(%rbp)
20 leave
21 .cfi_def_cfa 7, 8
22 ret
23 .cfi_endproc
24 .LFE0:
25 .size eight_f, .-eight_f
26 .globl main
27 .type main, @function
28 main:
29 .LFB1:
30 .cfi_startproc
31 pushq %rbp
32 .cfi_def_cfa_offset 16
33 movq %rsp, %rbp
34 .cfi_offset 6, -16
35 .cfi_def_cfa_register 6
36 subq $32, %rsp
37 movl %edi, -4(%rbp)
38 movq %rsi, -16(%rbp)
39 movl $8, 8(%rsp)
40 movl $7, (%rsp)
41 movl $6, %r9d
42 movl $5, %r8d
43 movl $4, %ecx
44 movl $3, %edx
45 movl $2, %esi
46 movl $1, %edi
47 call eight_f
48 leave
49 .cfi_def_cfa 7, 8
50 ret
51 .cfi_endproc
52 .LFE1:
53 .size main, .-main
54 .ident "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
55 .section .note.GNU-stack,"",@progbits
eight_p.c
1 #include
2
3 void eight_f(char b,short c, int d, long e,int f,int g,int h,int k)
4 {}
5
6 int main(int argc,char*argv[])
7 {
8 eight_f(1,2,3,4,5,6,7,8);
9 }
gcc -S eight_p.c
得到eight_p.s汇编文件:
可知前六个参数通过寄存器edi esi edx ecx r8d r9d传递,六个以后的参数通过堆栈传递。