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