我想知道为什么EFLAGS寄存器的未定义的第二位默认设置为1。 所有其他未定义/保留位都设置为0.这是否有特殊含义?
答案 0 :(得分:2)
它是“保留”,而不是“未定义”。据推测,它反映了一些内部状态,这种状态根本不会暴露于正常应用中。
有时无证件的行为实际上意味着“只有内部记录”。
答案 1 :(得分:0)
大概这个位被保留用于默认/兼容设置被视为真的用途。
作为分配给保留位的值可能很重要的示例,请考虑x86页表中的No-eXecute位。由于此位被定义为保留值为零,因此无法将此位称为eXecute权限位(同时保留软件兼容性)。此外,在x86如何使用其页表树的情况下,最终权限由页表的所有级别的权限设置的and
生成(NX除外);这使得每个权限位至少与虚拟内存的最严格部分一样具有限制性。但是,如果NX为1,则限制性更高的权限,必须区别对待NX(使用or
代替and
)。
提供一致的概念框架是基本的良好实践,使内存更可靠(产生的错误更少,某些类型的错误更明显,并且检查文档的需求更少)和学习更容易。通过提供保留为1位,合理默认为true的值可以具有一致,直接的名称和表示。