計算機(jī)的存儲系統(tǒng)由主存儲器(也稱為內(nèi)存儲器)和輔助存儲器(也稱為外存儲器)組成,存儲器是用來存放程序和數(shù)據(jù)的裝置。
主存儲器(簡稱主存)的基本存儲單元是位,它能容納一個二進(jìn)制的0和1。整個主存由許多存儲位構(gòu)成,這些存儲位每8位組合成一個字節(jié),每相鄰的2個字節(jié)組成一個字,相鄰的兩個字組成一個雙字。為了區(qū)別這些不同的字節(jié)(或字)存儲單元,每一單元都被指定一個編號,稱為此單元的物理地址(簡稱PA)。PC機(jī)的主存是按8位字節(jié)編址的,即以字節(jié)作為最小單位。假定主存容量為1M字節(jié),則它的最低地址為00000H,最高地址為0FFFFFH。
主存儲器的讀取規(guī)則:“高高低低”規(guī)則,即高地址對應(yīng)高字節(jié),低地址對應(yīng)低字節(jié)。
【例 1.5.6】圖為主存部分單元狀態(tài),試從中讀取數(shù)據(jù)
[解:]
|
|
如左圖所示,字節(jié)單元(00000)的內(nèi)容為 12H ,字單元(00000)的內(nèi)容為(00001,00000) = 9812H,字單元(00001)的內(nèi)容為(00002,00001) = 0AC98H。
注意:如果16進(jìn)制數(shù)的第一個數(shù)字為字符A~F,需在此16進(jìn)制數(shù)前加一數(shù)字0,以便與其它同名的變量名及寄存器名相區(qū)別。
|
2、物理地址的形成
8086/8088 CPU的地址線有20根,直接尋址220=1MB。而 8086/8088 CPU的字長為16位,直接尋址216=64KB,無法尋址1MB。為此,8086/8088采用了存儲器地址分段的方法。
將整個存儲器分成許多邏輯段,每個邏輯段的容量最多為64KB,允許它們在整個存儲器空間浮動,各個邏輯段可以緊密相連,也可以重疊。對于任何1個物理地址來說,可以唯一地被包含在1個邏輯段中,也可以被包含在多個相互重疊的邏輯段中,只要能得到它所在段的首地址和段內(nèi)的相對地址,就可以對它進(jìn)行訪問。在 8086/8088存儲空間中,從0地址開始,把每16個連續(xù)字節(jié)的存儲空間稱為小節(jié)。為了簡化操作,邏輯段必須從任一小節(jié)的首地址開始。這樣劃分的特點(diǎn)是:在16進(jìn)制表示的地址中,最低位為0(即20位地址中的低4位為0)。在1MB的地址空間中,共有64KB小節(jié)。
綜上所述,分段的原則如下:
(1) 每個段的最大長度為64KB;
(2) 段的首地址能被16整除。
8086/8088中,每一個存儲單元都有一個唯一的20位地址,稱此地址為該存儲單元的物理地址。CPU訪問存儲器時,必須先確定所要訪問的存儲單元地址才能取得該單元的內(nèi)容。20位的物理地址由16位的段地址和16位的段內(nèi)偏移地址計算得到。段地址是每一邏輯段的起始地址,必須是每個小節(jié)中的首地址,其低4位一定是0,于是在保留段地址時,可以只取段地址的高16位。偏移地址則是在段內(nèi)相對于段起始地址的偏移值。因此任一存儲單元物理地址的計算方法如下:
物理地址 = 16 D × 段地址 + 段內(nèi)偏移地址
在微型計算機(jī)中,設(shè)有4個存放段地址的寄存器,稱為段寄存器。它們是代碼段寄存器CS,數(shù)據(jù)段寄存器DS,附加段寄存器ES,堆棧段寄存器SS。