近调用是指在当前代码段内进行的调用操作,根据目标地址的获取方式,可以分为段内直接近调用和段内间接近调用两种。
1. 段内直接近调用
指令格式: CALL DST
执行操作:
- 将指令指针寄存器 (IP) 的当前值压入堆栈,即
PUSH (IP)
。 - 将 (IP) 的值加上16位的位移量,该位移量由 DST 指定,更新后的值赋给 (IP),即
(IP) ← (IP) + 16位位移量
。
说明:
- DST 表示目标地址的偏移量,通常是一个标号或变量名。
- 执行完 CALL 指令后,CPU 将跳转到 (IP) 指向的地址继续执行程序。
2. 段内间接近调用
指令格式: CALL DST
执行操作:
- 将指令指针寄存器 (IP) 的当前值压入堆栈,即
PUSH (IP)
。 - 将有效地址 (EA) 的值赋给 (IP),即
(IP) ← (EA)
。
说明:
- DST 表示目标地址的有效地址 (EA)。
- EA 的计算方式取决于指令中使用的寻址方式。
CALL 近调用指令用于在当前代码段内调用子程序,根据目标地址的不同,可以选择使用段内直接近调用或段内间接近调用。
暂无评论