存儲器的分段 我們知道:計算機的內(nèi)存單元是以“字節(jié)”為最小單位進行線性編址的。為了標(biāo)識每個存儲單元,就給每個存儲單元規(guī)定一個編號,此編號就是該存儲單元的物理地址。 存儲單元的物理地址是一個無符號的二進制數(shù)。但為了書寫的簡化,物理地址通常用十六進制來表示。 16位CPU內(nèi)部有20根地址線,其編碼區(qū)間為:00000H~0FFFFFH,所以,它可直接訪問的物理空間為1M(220)字節(jié)。而16位CPU內(nèi)部存放存儲單元偏移量的寄存器(如:IP、SP、BP、SI、DI和BX等)都是16位,它們的編碼范圍僅為:00000H~0FFFFH。這樣,如果用16位寄存器來訪問內(nèi)存的話,則只能訪問內(nèi)存的最低端的64K,其它的內(nèi)存將無法訪問。為了能用16位寄存器來有效地訪問1M的存儲空間,16位CPU采用了內(nèi)存分段的管理模式,并引用段寄存器的概念。
這種存儲器分段的內(nèi)存管理方法不僅實現(xiàn)了用兩個16位寄存器來訪問1M的內(nèi)存空間,而且對程序的重定位、浮動地址的編碼和提高內(nèi)存的利用率等方面都具有重要的實用價值。 2.2.1 物理地址的形成方式由于規(guī)定段地址必須是16的倍數(shù),所以,其值的一般形式為:XXXX0H,即:前16位二進制位是變化的,后四位是固定為0。鑒于段地址的這種特性,我們可以僅保存其前16位二進制來達到保存整個段地址,其后四位可通過“左移補0”來獲得。 在確定了某個存儲單元所屬的內(nèi)存段后,我們也只知道其所處內(nèi)存位置的范圍,還不能確定其具體位置。要想確定內(nèi)存單元的具體位置,還必須知道該單元離該段地址有多遠。我們通常把存儲單元的實際地址與其所在段的段地址之間的距離稱為段內(nèi)偏移,也可稱為有效地址(EA—EffectiveAddress)或偏移量(Offset)等。有了段地址和偏移量,就能唯一地確定某一內(nèi)存單元在存儲器內(nèi)的具體位置。 由此可見,存儲單元的邏輯地址分為兩部分:段地址和偏移量。由邏輯地址得到其物理地址(PA—PhysicalAddress)的計算方法如下: 物理地址PA=段地址×16 + 偏移量 計算存儲單元物理地址的公式可用“左移4位”和“加”運算來實現(xiàn)。圖2.5是物理地址的計算示意圖。
對物理地址來說,當(dāng)段地址變化時,只要對其偏移量進行相應(yīng)的調(diào)整就可對應(yīng)同一個物理地址,所以,同一個物理地址可有多個邏輯地址。如圖2.6所示。 在匯編語言程序中,存儲單元通常不是用其物理地址標(biāo)識的,而是用其邏輯地址標(biāo)識的。邏輯地址的段地址由段寄存器給出,偏移量可由寄存器(SI、DI、BP和BX等)給出,也可用符號地址或具體的數(shù)值給出。至于在指令中如何指出存儲單元的邏輯地址將在第3章“尋址方式”中給出詳細說明。 |
|