Posted on 2009-10-17 00:08
S.l.e!ep.¢% 閱讀(435)
評論(0) 編輯 收藏 引用 所屬分類:
系統低層
WIN32 程序運行在保護模式下的,保護模式的歷史可以追溯到 80286。而今 80286 已成為了歷史。所以我們將只把精力集中于 80386 及后續的X86 系列 CPU。Windows 把每一個 Win32 應用程序放到分開的虛擬地址空間中去運行,也就是說每一個應用程序都擁有其相互獨立的 4GB 地址空間,當然這倒不是說它們都擁有 4GB 的物理地址空間,而只是說能夠在 4GB 的范圍內尋址。操作系統將會在應用程序運行時完成 4GB 的虛擬地址和物理內存地址間的轉換。這就要求編寫應用程序時必須格守 Windows 的規范,否則極易引起內存的保護模式錯誤。而過去的 Win16 內存模式下,所有的應用程序都運行于同一個 4GB 地址空間,它們可以彼此"看"到別的程序的內容,這極易導致一個應用程序破壞另一個應用程序甚至是操作系統的數據或代碼。
和 16 位 Windows 下的把代碼分成 DATA,CODE 等段的內存模式不同,WIN32 只有一種內存模式,即 FLAT 模式,意思是"平坦"的內存模式,再沒有 64K 的段大小限制,所有的 WIN32 的應用程序運行在一個連續、平坦、巨大的 4GB 的空間中。這同時也意味著您無須和段寄存器打交道,您可以用任意的段寄存器尋址任意的地址空間,這對于程序員來說是非常方便的,這也使得用32位匯編語言和用C語言一樣方便。 在Win32下編程,有許多重要的規則需要遵守。有一條很重要的是:Windows 在內部頻繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去檢測這些寄存器的值是否被更改,這樣當您要使用這些寄存器時必須先保存它們的值,待用完后再恢復它們,一個最顯著的應用例子就是 Windows 的 CallBack 函數中。
1. 實模式 64K段限制的原因?
2. Win32下的平坦模式具體是什么? 實模式下沒有所謂的平擔模式?