近调用是指在当前代码段内进行的调用操作,根据目标地址的获取方式,可以分为段内直接近调用段内间接近调用两种。

1. 段内直接近调用

指令格式: CALL DST

执行操作:

  1. 将指令指针寄存器 (IP) 的当前值压入堆栈,即 PUSH (IP)
  2. 将 (IP) 的值加上16位的位移量,该位移量由 DST 指定,更新后的值赋给 (IP),即 (IP) ← (IP) + 16位位移量

说明:

  • DST 表示目标地址的偏移量,通常是一个标号或变量名。
  • 执行完 CALL 指令后,CPU 将跳转到 (IP) 指向的地址继续执行程序。

2. 段内间接近调用

指令格式: CALL DST

执行操作:

  1. 将指令指针寄存器 (IP) 的当前值压入堆栈,即 PUSH (IP)
  2. 将有效地址 (EA) 的值赋给 (IP),即 (IP) ← (EA)

说明:

  • DST 表示目标地址的有效地址 (EA)。
  • EA 的计算方式取决于指令中使用的寻址方式。

CALL 近调用指令用于在当前代码段内调用子程序,根据目标地址的不同,可以选择使用段内直接近调用或段内间接近调用。