簡體   English   中英

為什么 EFLAGS 位 1 總是設置?

[英]Why is EFLAGS bit 1 always set?

我想知道為什么 EFLAGS 寄存器的未定義第二位默認設置為 1。 所有其他未定義/保留位都設置為 0。這有特殊含義嗎?

它是“保留的”,而不是“未定義的”。 大概它反映了一些內部 state 根本不暴露於正常應用程序。

有時未記錄的行為實際上意味着“僅在內部記錄”。

大概該位被保留用於默認/兼容設置被視為真實的用途。

作為分配給保留位的值可能很重要的示例,請考慮 x86 頁表中的 No-eXecute 位。 因為該位被定義為保留值為零,所以不可能將其稱為執行權限位(同時保持軟件兼容性)。 另外,x86如何使用它的頁表樹,最終的權限是由所有級別的頁表(NX除外)的權限設置的and生成的; 這使得每個權限位至少與虛擬 memory 中最嚴格的部分一樣具有限制性。 但是,由於 NX 為 1 作為限制性更強的權限,因此必須區別對待 NX(使用or代替and )。

提供一致的概念框架是基本的良好實踐,使 memory 更可靠(產生的錯誤更少,某些類型的錯誤更明顯,並且不需要檢查文檔)並且學習更容易。 通過提供保留為 1 位,合理默認為 true 的值可以具有一致、直接的名稱和表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM