汇编学习笔记26

第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段内调用。过程名的定义和结束必须成对出现且过程名保持一致。

原文地址:https://www.cnblogs.com/hailong/p/1914137.html