汇编语言-子程序设计

1.子程序指令

主程序(调用程序)
执行调用指令CALL:
1将下条指令的地址压入堆栈(顶部)
2转移到目标地址
调用子程序
子程序(被调用程序)
执行返回指令RET:
1从当前堆栈顶部弹出内容作为返回地址
2转移到返回地址
RET;无参数返回,出栈返回地址
RET i16;有参数返回,出栈返回地址,ESP=ESP+i16
过程定义伪指令

过程名 PROC
......;过程体
过程名 ENDP
;过程名为符合语法的标识符

子程序框架

标识符 proc      ;过程定义
      push ...1 ;保护寄存器
      push ...2
      ...       ;子程序体
      pop  ...2 ;恢复寄存器
      pop  ...1 
      ret       ;子程序返回
标识符 endp      ;过程结束
      

2.参数传递

主程序与子程序间通过参数传递建立联系:
入口参数:主程序–子程序
出口参数:子程序–主程序
参数的具体内容:
数据本身(传递数值)
数据的存储地址(传递地址,传递引用)
参数传递方法:
通用寄存器
共享变量
堆栈

寄存器传递参数:
把参数存于约定的寄存器
少量数据直接传递参数
大量数据只能传递地址
带有出口参数的寄存器不能保护和恢复
带有入口参数的寄存器可以保护、也可以不保护,但最好能保持一致

共享变量传递参数:
子程序和主程序使用同于一个变量名存取数据
如果变量定义和使用不在同一个程序模块中,需要利用PUBLIC、EXTREN声明
共享变量传递参数,子程序的通用性较差
特别适合在多个程序段间、尤其在不同的数据模块间传递数据

堆栈传递参数:
主程序将入口压入堆栈
子程序从堆栈中取出参数
采用堆栈传递参数是程式化的
子程序设置EBP等于当前ESP
利用EBP相对寻址访问堆栈中的参数
出口参数通常不使用堆栈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DbillionBUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值