1 ret 和 retf
call 和 ret 指令都是转移指令,他们都修改ip,或同时修改cs和ip,他们经常被共同用来实现子程序的设计。
-
ret
:该指令用栈中的数据,修改ip
的内容,从而实现近转移
。CPU执行ret指令时,进行下面两步操作 (1) (IP)=((ss)*16+(sp)) (2) (sp)=(sp)+2 相当于: pop IP
-
retf
:该指令用栈中的数据,修改cs
和ip
的内容,从而实现远转移
。CPU执行retf指令时,进行下面4步操作: (1) (IP)=((ss)*16+(sp)) (2) (sp)=(sp)+2 (3) (cs)=((ss)*16+(sp)) (4) (sp)=(sp)+2 相当于: pop IP pop CS
2 call 指令
call 标号(将当前的IP压栈后,转到标号处指令指令)
CPU 执行此种格式的call时,进行如下操作
(1) (sp)=(sp)-2
((ss)*16+(sp))=(IP)
(2) (IP)=(IP)+16位位移
“call 标号”时 相当于:
push IP
jmp near ptr 标号