前面讲的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
