前面讲的call指令,其对应的机器指令中并没有转移的目的地址,而是相对于当前IP的转移位移。
"call far pt 标号”实现的是段间转移。
(1) (sp) = (sp) - 2 ((ss) * 16 + (sp) = (CS) (sp) = (sp) - 2 ((ss) * 16 + (sp) ) = (IP) (2) (CS) - 标号所在段的段地址 (IP) - 标号在段中的偏移地址
从上面的描述中可以看出,如果我们用汇编语法来解释此种格式的call指令,则:
CPU执行 “call far ptr 标号” 时,相当于进行:
push push IP jmp far ptr 标号
检测
下面的程序执行后,ax中的数值为多少?
内存地址 机器码 汇编指令 1000: 0 b8 00 00 mov ax,0 1000: 3 9A 09 00 00 10 call far ptr s 1000: 8 40 inc ax 1000: 9 58 s:p0p add ax,ax pop bx add ax,bx
执行后ax的数值为1010h