call 和 ret 都是转移指令,都修改IP,或同时修改 CS和IP.
1.1 ret 和 retf
- ret 指令用栈中的数据,修改IP的内容,从而实现近转移。
CPU在执行ret指令的时候,进行下面2步操作:
- (IP)=((ss)*16+(sp))
- (sp)=(sp)+2
相当于进行pop IP.
举例:
ret指令执行后,(IP)=0; CS:IP指向代码段的第一条指令。
- retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。(far)
CPU在执行retf指令的时候,进行下面4步操作:
- (IP)=((ss)*16+(sp))
- (sp)=(sp)+2
- (CS)=((ss)*16+(sp))
- (sp)=(sp)+2
相当于:
pop IP
pop CS
举例: