第一步:写一个简单的C程序
C文件:main.c
#include <stdio.h>
int g(int x, int y)
{
return x + y;
}
int f(int x, int y)
{
return g(x, y);
}
int main()
{
int x, y;
x = 3;
y = 4;
printf("sum is %d", f(x, y));
return 0;
}
将C代码编译为汇编代码
gcc -S -o main.o main.c
// 这里用的是gcc编译工具,windows系统不自带,MacOS和linux系统一般自带
汇编文件: main.o
为方便初学理解,将链接字符去掉后
g:
pushq %rbp
movq %rsp, %rbp
movl %edi, -4(%rbp)
movl %esi, -8(%rbp)
movl -4(%rbp), %edx
movl -8(%rbp), %eax
addl %edx, %eax
popq %rbp
ret
f:
pushq %rbp
movq %rsp, %rbp
subq $8, %rsp
movl %edi, -4(%rbp)
movl %esi, -8(%rbp)
movl -8(%rbp), %edx
movl -4(%rbp), %eax
movl %edx, %esi
movl %eax, %edi
call g
leave
ret
main:
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movl $3, -4(%rbp)
movl $4, -8(%rbp)
movl -8(%rbp), %edx
movl -4(%rbp), %eax
movl %edx, %esi
movl %eax, %edi
call f
movl %eax, %esi
leaq .LC0(%rip), %rdi
movl $0, %eax
call printf@PLT
movl $0, %eax
leave
ret