ret,retf和ret指令的区别

2020-10-10 17:40:00    赵勤松    5543    原创
摘要: 在汇编中,我们经常会用到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寄存器



京ICP备15015023号-1
蝉知7.4.1