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。

最后,callretretf 这三条指令执行后不会对标志位产生影响。

 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 指令
1) 中断类型号 
2) 标志寄存器入栈,IF=0.TF=1 
3) Cs ,ip入栈 
4) IP=(n*4),CS=(n*4+2)






 

posted on 2017-11-07 21:18  CrisCzy  阅读(2560)  评论(0编辑  收藏  举报