X86 PUSHF/PUSHFD/PUSHFQ 指令详解

本文详细解析了X86架构下的PUSHF/PUSHFD/PUSHFQ指令,介绍了不同操作数宽度下的栈指针变化及eflags/rflags寄存器的压栈过程。在虚8086模式和某些特定情况下,这些指令可能会触发异常。
摘要由CSDN通过智能技术生成

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值