- SDM指令功能描述(POPF/POPFD)
总体描述:
POPF/POPFD/POPFQ指令从RSP/ESP/SP指向的堆栈中(栈顶)取出OperandSize大小的数据加载至RFLAGS/EFLAGS/FLAGS寄存器,并将堆栈指针寄存器RSP/ESP/SP增加对应OperandSize大小。能被该指令影响的FLAGS标记位,取决于当前指令所处的模式。当处于保护模式下且当前特权级别为0时,除了RF,VIP,VIF,VM以外的所有非保留标记位都可以被改变。当运行在0 < 特权级 < IOPL时,除了IOPL以及VIP,VIF,VM外的所有标记位仅在运行的特权及 >= IOPL时才会被改变。在虚拟8086模式下,IOPL必须为3,否则使用POPF指令将导致GP异常。
- 伪代码:
if(VM == 0)
{
if(CPL == 0)
{
if(OperandSize == 32)
{
EFLAGS = Pop32();
(除了RF,VIP,VIF,VM外其他所有非保留位,VIP = 0, VIF = 0