ret,retf和ret指令的区别

2020-10-10 17:40:00
赵勤松
原创
5077
摘要:在汇编中,我们经常会用到ret,retf和retf指令,在此详细说明一下这三者的区别。

在非保护模式或保护模式的16位下,ret会自动执行以下操作

1.从堆栈中弹出2字节至IP寄存器
2.根据CS:IP跳转到新的地址执行

在保护模式32位模式下,ret会自动执行以下操作

1.从堆栈中弹出4字节至EIP寄存器
2.根据CS:IP跳转到新的地址执行

因此,ret一般被称为段内跳转,而retf则被称为段间跳转。


在非保护模式或保护模式的虚拟86下,retf会自动执行以下操作

1.从堆栈中弹出2字节至IP寄存器
2.从堆栈中弹出2字节至CS寄存器
3.根据CS:IP跳转到新的地址执行

在保护模式32位模式下,retf会自动执行以下操作

1.从堆栈中弹出4字节至EIP寄存器
2.从堆栈中弹出2字节至CS寄存器
3.根据CS:IP跳转到新的地址执行


iret是中断返回命令,在非保护模式和保护模式的虚拟86下,iret会自动执行以下操作

1.从堆栈中弹出2字节至IP寄存器
2.从堆栈中弹出2字节至CS寄存器
3.从堆栈中弹出2字节至FLAG寄存器
4.根据CS:IP跳转到新的地址执行

在保护模式的32位下,如果跳转到相同的保护级别,iret会自动执行以下操作

1.从堆栈中弹出4字节至EIP寄存器
2.从堆栈中弹出2字节至CS寄存器
3.从堆栈中弹出4字节至EFLAG寄存器

在保护模式的32位下,如果跳转到不同的保护级别,iret会自动执行以下操作

1.从堆栈中弹出4字节至EIP寄存器
2.从堆栈中弹出2字节至CS寄存器
3.从堆栈中弹出4字节至EFLAG寄存器
4.从堆栈中弹出4字节至ESP寄存器
5.从堆栈中弹出2字节至SS寄存器



文章分类
联系我们
联系人: powereye
Email: zqs@someapp.cn
QQ: 1134846
微信: powereye