**
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
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
3.恢复中断前的 PSW(program status word),即恢复中断前的 标志寄存器的状态。
(FR)←((SP)+1:(SP)),(SP)←(SP)+2
4.恢复ESP(返回权限发生变化)
5.恢复SS(返回权限发生变化)
IRET指令影响所有标志位。
**
int 指令**
- 中断类型号
- 标志寄存器入栈,IF=0.TF=1
- CS,IP入栈
- IP=(n*4),CS=(n*4+2)