看王爽汇编书有一处不理解,书中是这样介绍的,”call far ptr 标号“这种格式的call指令时,进行如下操作。
(1) (sp)=(sp)-2
((ss)*16+(sp))=(CS)
(sp)=(sp)-2
((ss)*16+(sp))=(IP)
(2) (CS)=标号所在段的段地址
(IP)=标号在段中的偏移地址
CPU执行”call far ptr 标号“时,相当于进行:
push CS
push IP
jmp far ptr 标号
---------------------------------------------------------------------------------------------------
我自己测试结果如下图:
我的疑问是如上图, 为什么查看堆栈,CS:IP等于13E3:0008呢?标号处的地址应该是13E3:0009啊
------解决思路----------------------
IP 应该是执行完 call 后返回的地址,即 call 指令的下一指令的地址,而非目标地址。