ret指令,
执行过程
ret指令用栈中的数据,修改IP的值,从而实现近转移。
CPU执行ret指令时,进行下面两步操作:
(IP)=((SS)*16+(SP))
(SP)=(SP)+2;
另一种用法 ret n (n为整数)
等效于
(IP)=((SS)*16+(SP))
(SP)=(SP)+2;
(SP)=(SP)+n;
例如ret 4
pop ip
add sp,4
retf指令,
retf用栈中数据同时改CS,IP,远转移
远返回指令。当它执行时,处理器先从栈中弹出一个字到IP,再弹出一个字到CS。
最后,call
、ret
、retf
这三条指令执行后不会对标志位产生影响。
retf -> pop ip
pop cs
pop cs
iret (interrupt return ) 中断返回指令
1.恢复IP(instruction pointer):(IP)←((SP)+1:(SP)),(SP)←(SP)+2
2.恢复CS(code segment):(CS)←((SP)+1:(SP)),(SP)←(SP)+2
(FR)←((SP)+1:(SP)),(SP)←(SP)+2
4.恢复ESP(返回权限发生变化)
5.恢复SS(返回权限发生变化)
IRET指令影响所有标志位。int 指令
1) 中断类型号
2) 标志寄存器入栈,IF=0.TF=1
2) 标志寄存器入栈,IF=0.TF=1
3) Cs ,ip入栈
4) IP=(n*4),CS=(n*4+2)
4) IP=(n*4),CS=(n*4+2)