32位微機(jī)的內(nèi)存管理模式
32位微機(jī)的內(nèi)存存管理仍然采用“分段”的管理模式,存儲(chǔ)器的邏輯地址同樣由段地址和偏移量兩部分組成。32位微機(jī)的內(nèi)存管理與16位微機(jī)的有相同之處,也有不同之處,因?yàn)樗峁┝藘煞N不同工作方式:實(shí)方式和保護(hù)方式。
1、物理地址的計(jì)算方式
實(shí)方式:段地址仍然是16的倍數(shù),每個(gè)段的最大容量仍為64K。段寄存器的值是段的起始地址,存儲(chǔ)單元的物理地址仍為段寄存器的值乘16,再加上段內(nèi) 偏移量。在此方式下,32位微機(jī)的內(nèi)存管理與16位微機(jī)是相一致的。
保護(hù)方式:段地址可以長達(dá)32位,其值可以不是16的倍數(shù),每個(gè)段的最大容量可達(dá)4G。段寄存器的值是表示段地址的“選擇器”(Selector),用該“選擇器”可從內(nèi)存中得到一個(gè)32位的段地址,存儲(chǔ)單元的物理地址就是該段地址加上段內(nèi)偏移量,這與16位微機(jī)的物理地址計(jì)算完全不同。
2、段寄存器的引用
32位CPU內(nèi)有6個(gè)段寄存器,程序在某一時(shí)刻可訪問6個(gè)不同的段。其段寄存器的值在不同的方式下具有不同的含義:
1、在實(shí)方式下,段寄存器的值就是段地址;
2、在保護(hù)方式下,段寄存器的值不是段地址,是段地址的“選擇器”。它間接指出一個(gè)32位的段地址。
下面分別說明各段寄存器的用法和作用。
代碼段寄存器:32位微機(jī)在取指令時(shí),系統(tǒng)自動(dòng)引用CS和EIP來取出下條指令。在實(shí)方式下,由于段的最大容量不超過64K,所以,EIP的高16位全為0,其效果相當(dāng)于16位CPU中的IP。
堆棧段寄存器:32位微機(jī)在訪問堆棧段時(shí),總是引用堆棧段寄存器SS。但在不同的方式下其堆棧指針有所不同:
1)、在實(shí)方式下,32位微機(jī)把ESP的低16位SP作為指向堆棧的指針,所以,我們可以認(rèn)為棧頂單元是由SS和SP來指定的。這就與16位微機(jī)訪問棧頂單元的方法相一致;
2)、在保護(hù)方式下,堆棧指針可用32位的ESP和16位的SP。
數(shù)據(jù)段寄存器:DS是主要的數(shù)據(jù)段寄存器。通常情況下,它是除訪問堆棧以外數(shù)據(jù)時(shí)的默認(rèn)段寄存器。在某些串操作中,其目的操作數(shù)的段寄存器被指定為ES是另一個(gè)例外。
另外,段寄存器CS、SS、ES、FS和GS也都可以作為訪問數(shù)據(jù)時(shí)的段寄存器,但它們必須用段超越前綴的方式在指令中直接寫出。用這種方式會(huì)增加指令的長度,指令的執(zhí)行時(shí)間也有所延長。
一般來說,程序頻繁訪問的數(shù)據(jù)段用DS來指向,不太經(jīng)常訪問的數(shù)據(jù)段可用ES、FS和GS等來指向。
3、存儲(chǔ)單元的內(nèi)容
32位微機(jī)存儲(chǔ)單元內(nèi)容的存儲(chǔ)格式與16位微機(jī)的完全一致,也都采用“高高低低”的原則來存放數(shù)據(jù)。