鱼C论坛

 找回密码
 立即注册
查看: 3150|回复: 3

主程序先push参数再call函数,函数内部如何调用参数?

[复制链接]
发表于 2019-9-24 01:01:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
举个例子,参数已存储在ax,bx中,调用函数subfun
PUSH AX
PUSH BX
CALL subfun

先将AX、BX压栈,然后调用函数。
那么问题来了,call调用函数时,会将CS:IP也压栈,参数不在栈顶,那么函数内部是如何访问主程序传入的参数呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-24 19:48:53 | 显示全部楼层
直接往寄存器里存就好了啊,call了也可以过去的,不够就开一段内存空间~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-24 22:58:51 | 显示全部楼层
怎么约定的就怎么使用啊。如果约定寄存器就用寄存器,如果约定内存就用内存。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-25 15:53:51 | 显示全部楼层
本帖最后由 SВ 于 2019-9-25 15:57 编辑

在汇编中,简单点用SP定位函数参数就可以了。在C语言中,在函数中使用更高级的结构“栈帧”,里面是借助BP来定位函数参数的。王爽的《汇编语言》的附注4提到了使用堆栈来传递函数参数的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-5 16:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表