子程序结构

本文详细介绍了80x86汇编语言中的子程序(过程)结构,包括过程定义伪操作如PROC和ENDP,调用和返回指令CALL与RET的使用,以及子程序中寄存器的保护和恢复。同时,讨论了参数传递的不同方式,如寄存器、地址表、堆栈和外部符号的处理。最后,提到了增强功能的过程定义伪操作,如USES字段和局部变量的定义(LOCAL)。
摘要由CSDN通过智能技术生成
 
子程序结构
子程序又称为过程,相当于高级语言中的过程和函数,是模块化程序设计的基础
1、过程定义伪操作
过程定义伪操作用在过程(子程序)前后,使整个过程形成清晰的、具有特定功能的代码块。其格式为:
procedure name PROC Attribute
    ….
procedure name ENDP
其中过程名为标识符,它又是子程序入口的符号地址。属性指类型属性,它可以是NEAR或FAR
CALL和RET指令都有NEAR和FAR属性,段内调用使用NEAR属性,段间调用使用FAR属性。为了方便用户,80x86的汇编程序用PROC伪操作的类型属性来确定CALL和RET指令的属性。用户只需在定义过程时考虑它的属性,而CALL和RET的属性可以由汇编程序来确定。用户对过程属性的确定原则很简单:
如调用程序和过程在同一个代码段中,则用NEAR属性
如调用程序和过程不在同一代码段中,则用FAR属性
过程定义可以嵌套
2、子程序的调用和返回
过程的正确执行是由子程序的正确调用和正确返回保证的。80x86的CALL和RET指令完成的就是调用和返回的功能。为保证其正确性,除PROC的属性要正确选择以外,还应该注意子程序运行期间的堆栈状态。由于CALL时已使返回地址入栈,所以RET时应该使返回地址出栈,如果子程序中不能正确使用堆栈而造成执行RET前SP并未指向进入子程序是的返回地址,则必然会导致运行出错。
3、保护和恢复寄存器
一般来说,子程序中用到的寄存器是应该保存的。但是,如果使用寄存器在主程序和子程序之间传送参数的话,则这种寄
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值