2017-07-14 58 views
1

我在Barry B. Brey的書「THE INTEL MICROPROCESSORS」中找到了它。這是真的嗎?但爲什麼?我知道在實際的8086微處理器的實模式下,沒有32位寄存器。那麼現在應該對32位寄存器施加相同的限制嗎?在實模式下使用32位寄存器尋址存儲器時,寄存器的內容不得超過0000FFFFH。爲什麼?

+1

什麼是實模式?你知道嗎? – Marichyasana

+3

在32位處理器(386+)上,您可以在實模式下使用32位寄存器和32位尋址。如果您處於[虛幻模式](https://en.wikipedia.org/wiki/Unreal_mode),地址可以高於0xFFFF。在傳統的實模式中,您被限制爲0xFFFF的限制。 –

+0

這已經是這本書中第二個誤導性的東西,它實際上有什麼好處? – harold

回答

5

我會說註冊表的內容是不相關的;有效地址不得超過0xFFFF的:

  • 如果EBP具有價值0xFFFFFFF0並使用指令mov EBX, [EBP+0x20]你在地址0x10的訪問內存。儘管寄存器值高於0xFFFF,這應該可以完美工作。

  • 如果EBP的值爲0xFFF0,並且您使用相同的指令訪問0x10010處的內存。雖然寄存器的值低於0xFFFF,但這不應該起作用。

邁克爾·佩赫已經給了暗示在他的評論的原因:

內存段確實有在實模式下一個段的限制!

在實模式下,不需要段限制檢查。 286的開發人員可以通過在實模式下關閉分段限制檢查的方式開發電路。這會使電路更加複雜和昂貴。所以他們決定簡單地將段限制初始化爲0xFFFF,儘管段限制檢查已打開,但事實上禁用了段限制檢查。

在386英特爾顯然沒有改變這個初始化值從0xFFFF到0xFFFFFFFF。

在386上,您可以使用Michael Petch'es評論中提到的「虛幻模式」來更改此限制。但據我所知,沒有任何英特爾的官方文件表示這種方法是「正式」允許的 - 這意味着沒有文件說這種方法可以與所有未來的英特爾CPU配合使用。

例如,在386+的「虛擬模式」下(此模式用於在保護模式OS處於活動狀態時運行實模式程序),限制固定爲0xFFFF。

相關問題