call和ret都是转移指令,他们都修改IP,或同时修改CS和IP。他们经常被共同用来实现子程序的设计。
10.1 ret和retf
CPU执行ret时,相当于进行
POP IP
就是把栈顶的值给IP
进行retf操作时,相当于
POP IP
POP CS
这边也有个检测点,我完成了
10.2 call指令
CPU执行call指令时,进行两部操作:
(1)将当前的IP或CS和IP压入栈中
(2)转移
call不能实现短转移,除此之外,call指令实现转移的方法和jmp指令的原理相同,下面几个小结详细讲讲这个指令。
10.3 依据位移进行转移的call指令
这里面call是把下一条指令的偏移地址压栈,再进行jmp指令,所以检测点10.2的call就是将6压栈然后再在ax中出栈的。
10.4 转移的目的地址在指令中的call指令
保存下一步指令的IP地址。
这里的call执行,相当于:
push CS
push IP
jmp far ptr 标号