16位间接绝对近调用

16位间接绝对近调用

Content #

近调用意味着只能调用当前代码段内的过程。指令中的操作数不是偏移量,而是被调用过程的真实偏移地址,故称为绝对地址。不过,这个偏移地址不是直接出现在指令中,而是由16 位的通用寄存器或者16 位的内存单元间接给出。比如:

call cx ;机器码为FF D1,目标偏移地址在CX中
call [0x3000] ;机器码为FF 16 00 30,从内存中取得目标偏移地址(段寄存器为DS)
call [bx] ;从ds:bx指向的内存中取得偏移地址
call [bx+si+0x02] ;基址+变址的寻址方式,其余同上

间接绝对近调用指令在执行时,处理器首先按以上的方法计算被调用过程的偏移地址,然后将指令指针寄存器IP 的当前值压栈,最后用计算出来的偏移地址取代寄存器IP 原有的内容。由于间接绝对近调用的机器指令操作数是16 位的绝对地址,因此,它可以调用当前代码段任何位置处的过程。

From #