2011-07-12 101 views
3

我想知道爲什麼EFLAGS寄存器未定義的第二位默認設置爲1。 所有其他未定義/保留位都設置爲0.這是否有特殊含義?爲什麼EFLAGS位1始終設置?

+0

0有特殊含義嗎?不,它僅僅是出於某種歷史原因。有關記錄的狀態,請參閱http://en.wikipedia.org/wiki/FLAGS_register。 –

回答

2

它是「保留」,而不是「未定義」。據推測它反映了一些內部狀態,它根本不會暴露於正常應用。

有時無證行爲確實意味着「僅內部記錄」。

+1

行爲「無證」在哪裏?你知道什麼具體的事情「只有內部記錄」,會讓你說你說什麼? –

+0

有時這些東西是商業祕密。例如,它在GPU中發生了很多。 – spraff

0

大概這個位被保留用於默認/兼容設置會被視爲真實的用途。

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

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