【问题标题】:Why is EFLAGS bit 1 always set?为什么 EFLAGS 位 1 总是设置?
【发布时间】:2011-07-12 09:41:32
【问题描述】:

我想知道为什么 EFLAGS 寄存器中未定义的第二位默认设置为 1。 所有其他未定义/保留位都设置为 0。这有什么特殊含义吗?

【问题讨论】:

标签: cpu intel assembly


【解决方案1】:

它是“保留的”,而不是“未定义的”。大概它反映了一些根本不暴露给普通应用程序的内部状态。

有时未记录的行为实际上意味着“仅在内部记录”。

【讨论】:

  • 行为“无证”在哪里?对于“仅内部记录”,您知道哪些具体的事情会让您说出您所说的话?
  • 有时这些东西是商业机密。例如,这种情况在 GPU 中经常发生。
【解决方案2】:

大概该位被保留用于默认/兼容设置被视为真实的用途。

作为分配给保留位的值的一个示例,请考虑 x86 页表中的 No-eXecute 位。因为该位被定义为保留值为零,所以不可能将其称为执行权限位(同时保持软件兼容性)。另外,随着x86如何使用它的页表树,最终的权限是由所有级别的页表(NX除外)的权限设置的and生成的;这使得每个权限位至少与虚拟内存中最严格的部分一样具有限制性。但是,由于 NX 为 1 作为限制性更强的权限,因此必须区别对待 NX(使用or 而不是and)。

提供一致的概念框架是基本的良好实践,使记忆更加可靠(产生的错误更少,某些类型的错误更加明显,并且不需要检查文档)并且更容易学习。通过提供保留为 1 位,合理默认为 true 的值可以具有一致、直接的名称和表示。

【讨论】:

    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2023-03-09
    • 2014-05-11
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多