c调用汇编(2)

C语言程序中函数调用与参数传递详解
本文深入探讨了C语言中函数调用的过程及参数传递机制,包括祯栈的理解、局部变量的作用域、参数在调用者与被调用者祯栈之间的传递方式,以及如何正确处理函数调用时的参数。通过实例代码演示,帮助开发者掌握C语言中函数调用的基础知识。
//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()函数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值