子程序结构相当于高级语言中的过程。为便于模块化程序设计,往往把程序中某些具有独立功能的部分编写成独立的程序模块,称为子程序。
1 .子程序调用指令 call
(1)段内直接调用
格式: call dst
执行操作: push (ip)
(ip)<-(ip)+d16
dst 给出转向地址, d16 为机器指令中的位移量,是转向地址和返回地址之间的差值。
(2) 段内间接调用
格式: call dst
执行操作: push (ip)
(ip)<-(ea)
指令中的 dst 可使用寄存器寻址方式或任一种存储器寻址方式,由指定的寄存器或存储单元的内容给出转向地址。
(3) 段间直接调用
格式: call dst
执行操作: push (cs) push (ip)
(cs)<-dst 指定段地址
(ip)<-dst 指定偏移地址
(4) 段间间接调用
格式: call dst
执行操作: push (cs)
push (ip)
(ip)<- ( ea )
(cs)<- ( ea+2 )
ea 是由 dst 的寻址方式确定的有效地址,可用任一种存储器寻址方式来取得。 2 .返回指令 ret
(1)语句格式: ret ; (ip)<-pop()
(2)语句格式: ret exp;
在完成出栈操作后,还要修改堆栈指针
