汇编总结-第二部分_3_使用函数

AT&T汇编函数是如何声明的?

很简单用.type命令来创建函数的标签,如下:

.type fun1, @function

fun1:

保存寄存器等值。

函数体

ret

 

Ps:函数一开始可以使用finit命令来清空FPU寄存器。

还有pusha和popa很方便的让你全部的寄存器值一次性都保存在堆栈中和取出

 

那么如何访问汇编函数呢?

直接call+函数标签 就OK了。

 

 

函数调用是如何传值的?

通过栈和寄存器。注意如果是寄存器的话,那么类型必须相同,所以我估计在类型不同的时候如果进行进行不同类型传值,强制类型转换是在传值之前就已经解决了的。

至于到低是怎么传值的,按照C样式来的话,从参数从右到左入栈。

这也就解释了为什么

Int a;

f(a++,++a);

第一个参数会是2.应该是通过从右到左边解析表达式,然后入栈的。

注意不光存储传递的值,还要保存调用函数处的地址。

所以栈中就像下面这样:

函数参数。。

函数参数2

函数参数1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值