//main.c
#include<stdio.h>
int main()
{
int a=1;
add(a);
printf("a=%d\n",a);
}
#add.s
.global add
add:
push %ebp
mov %esp,%ebp
addl $1,0x8(%ebp)
mov %ebp,%esp
pop %ebp
ret
编译:gcc add.s main.c
guang@guang-laptop:~/temp/h/test2$ ls
add.s a.out main.c
guang@guang-laptop:~/temp/h/test2$ ./a.out
a=1
总结:
1.最主要的是要处理好参数。做好这个,要分清楚调用函数的祯栈和被调用者的祯栈。
参数还在调用者的祯栈。
2.这个add是没有返回值的。
3.
as -o add.o add.s
gcc -c main.c
ld mian.o add.o
出现错误:ld: warning: cannot find entry symbol _start; defaulting to 00000000080481a4
因为ld默认入口函数是_start.
我猜:可以链接有_start函数的目标模块。或者ld选项改变入口函数为main。前者较好.但是目前不知道怎么搞。
4.gcc的默认入口函数也是_start,不过这个_start会调用main()函数。