2017-07-16 38 views
4

我剛寫完review for a program that displays the results from QuerySystemAddressMap
我留下了2個問題:由4GB +內存E820h QuerySystemAddressMap返回的值

  1. 看到那些 - 對於大多數不必要的大 - 32位參數ECXEBX,尤其是在EAX功能號,我懷疑有可能存在一個保護模式此BIOS功能對應。我懷疑是否正確?

  2. the BIOS function 0000E820h在計算機上運行從實地址模式比4GB內存以及瞭解4GB關口上方內存不會被尋址,將地址和長度所報告保持低於4GB的?

通常情況下,我只想試試這個,看看我自己,但我沒有這種硬件(還)。

+2

您沒有超過4 GB內存的硬件?因爲每個系統,甚至是全新系統,都以實模式啓動,因此很容易測試。據我所知,ROM BIOS中斷* no *可以從保護模式訪問。 [此參考資料](http://www.uruk.org/orig-grub/mem64mb.html)表明E820h也僅限於實模式。我認爲這只是歷史,爲什麼它使用32位寄存器:它是爲Compaq SystemPro引入的,它是第一個需要它的系統,而且它使用了386處理器。爲什麼*不使用全部寄存器? –

+0

@CodyGray我在某種程度上假設可能有類似於VESA視頻BIOS中的* ProtectedModeEntryPoint *。至於「爲什麼不使用全部寄存器」,所有這些操作數大小前綴和32位立即數在實地址模式中佔用大量字節。 –

回答

3

BIOS功能INT 15h EAX = 0000E820h旨在獲得完整的系統內存映射,旨在克服以前不支持4 GB以上內存接口的限制。因此,這個功能沒有意義的報告4 GB以上的內存。沒有保護模式等效的BIOS功能。 (雖然UEFI GetMemoryMap服務通過UEFI而不是傳統BIOS引導方法啓動時提供等效的功能。)

的功能是爲了在實模式操作系統進入保護模式之前被調用。在實模式下使用32位寄存器的少數附加代碼字節是不重要的。無論如何,大多數操作系統都會回收早期實模式引導代碼所使用的內存。

+0

遺憾的是,遺留系統中至少有'GetMemoryMap'或者至少那些使用BIOS啓動的'GetMemoryMap',必須如此複雜。 AMI rev 6.05 01/18/11 core 08.00.16將int 15H處理程序複製到99FB:0和20字節成員生活在@ 99FB:90H。如果AX = E820只是返回一個指向該數組的指針,會更方便一些。 –