英特尔RFLAGS和POPFQ PUSHFQ?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了英特尔RFLAGS和POPFQ PUSHFQ?相关的知识,希望对你有一定的参考价值。
阅读EFLAGS
,让我思考,64位标志寄存器怎么样?这个寄存器只有32位吗?我在网上看了,用RFLAGS
扩展到了64位。我在英特尔指南中查了一下,它只是说,
RFLAGS以64位模式注册在64位模式下,EFLAGS扩展为64位,称为RFLAGS。 RFLAGS寄存器的高32位保留。 RFLAGS的低32位与EFLAGS相同。
然而,我不确定,“保留”意味着什么。有什么用RFLAGS
?它是由英特尔内部使用的吗?文档似乎表明寄存器是64位,但是当PUSHFD
和POPFD
看起来是双字和四字时,有没有办法甚至与高32位进行交互。未来的处理器是否有可能提供PUSHFQ
和POPFQ
?
如果调用过程需要维护EFLAGS寄存器的状态,它可以使用
PUSHF
/PUSHFD
和POPF
/POPFD
指令保存和恢复全部或部分寄存器。PUSHF
指令将EFLAGS
寄存器的低位字推入堆栈,而PUSHFD
指令则推送整个寄存器。POPF
指令从堆栈中弹出一个字到EFLAGS
寄存器的低位字,而POPFD
指令从堆栈中弹出一个双字到寄存器中。
有时区分ISA(提供给程序员的架构)和内部实现(硅片中实际发生的事情)是有用的。就ISA而言,RFLAGS是一个64位寄存器(大多数位保留),就内部实现而言(理论上),不同的CPU可以做任何他们喜欢的事情,有些可能只实现24位寄存器,因为并不需要实现所有保留位。
请注意,当尺寸增加时,CPU制造商通常只会在现有寄存器上添加更多位。这意味着RFLAGS,EFLAGS和FLAGS是相同的寄存器;只是RFLAGS是整个寄存器,EFLAGS只是低32位,而FLAGS只是低16位。
对于RFLAGS(以及之前的EFLAGS和FLAGS); “reserved”表示它保留给未来的CPU。这意味着软件永远不应该设置这些位,软件不应该依赖这些位的值(这样,如果/当新的功能被添加到ISA并且这些位实际用于新的东西时,软件不会在未来的CPU上中断)。
自引入64位/长模式(现在约15年)以来,PUSHFQ
和POPFQ
已经存在。
以上是关于英特尔RFLAGS和POPFQ PUSHFQ?的主要内容,如果未能解决你的问题,请参考以下文章
借助全新 MATLAB® 适配器代码示例读取英特尔® 实感? 摄像头数据流