子程序结构
子程序又称为过程,相当于高级语言中的过程和函数,是模块化程序设计的基础
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、保护和恢复寄存器
一般来说,子程序中用到的寄存器是应该保存的。但是,如果使用寄存器在主程序和子程序之间传送参数的话,则这种寄