SDM指令功能描述(PUSHF/PUSHFD/PUSHFQ)
总体描述:
根据操作数宽度的不同:
32:
栈指针递减4,然后压入eflags寄存器的值
16:
栈指针递减2,然后压入eflags的低16位
64:
栈指针递减8,然后压入rflags寄存器的值
当把eflags复制到栈顶的时候,VM(bit16)和RF(bit17)位不会被复制,而 会用 0填充
**在虚8086模式下且I/O等级小于3,那么pushf/pushfd会触发GP异常
在实模式下 当ESP或SP的值是1的时候pushf/pushfd指令会触发SS异常**
伪代码:
if((PE==0) or (PE==1 and (VM==0 and IOPL==3)))
/* 实地址模式,保护模式,或虚8086模式且iopl等于3