第26讲开始讲第四章,
26讲内容为子程序,即过程
在汇编中,过程调用包括调用和返回。可以在段内调用和返回,也可以在段间返回。
在段内的调用过程和返回过程称为近调用和近返回,
在段间的调用过程和返回过程称为远调用和远返回。
段内直接调用:
CALL DSI 首先将下一条要执行的指令IP压栈,然后对IP作DSI偏移。
段内间接调用:
CALL OPRD 首先将下一条要执行的指令IP压栈,然后将IP设到OPRD的位置。OPRD为16位通用寄存器或字存储单元。
段间直接调用:
CALL 过程名 首先将CS段地址和下一条指令IP地址依次压栈,然后将CS置为过程名所在代码段的段地址,IP置为过程名首地址。
段间间接调用:
CALL OPRD 首先将CS段地址和下一条指令IP地址依次压栈,然后将OPRD中的高字送入CS, 低字送入IP。OPRD必须为双字存储单元。
返回: RET
将CS和IP(如果需要)出栈到CS和IP。(与调用相反)
段内(间)带立即数的返回
在CS和IP出栈后,再将SP加上立即数。立即数必须是偶数
过程的定义:
过程名 PROC [NEAR | FAR]
…
过程名 ENDP
默认情况下是NEAR段内调用。过程名的定义和结束必须成对出现且过程名保持一致。