今天是彙編專輯第二彈,以8086CPU抛磚引玉,讨論一下CPU确定物理地址平凡又神奇的操作!
物理地址我們知道,CPU 訪問内存單元時,要給出内存單元的地址。所有的内存單元構成的存儲空間是一個一維的線性空間,每一個内存單元在這個空間中都有唯一的地址,我們将這個唯一的地址稱為物理地址。
8086是16位結構的CPU,這也就是說,在8086内部,能夠一次性處理、傳輸、暫時存儲的信息的最大長度是16位。内存單元的地址在送上地址總線之前,必須在CPU中處理、傳輸、暫時存放。
而上一篇我們講到,地址總線的寬度決定CPU的尋址能力。8086有20根地址總線,可以傳送20位地址,所以其尋址能力為2^20B,即1M。(傳送門:計算機中的三類總線 )
很自然地,這裡産生了矛盾:如果隻是簡單地将地址從内部發出,那麼8086隻能發出16位的地址,表現的尋址能力也就隻有2^16byte,即64KB。這這與1M的尋址能力不符!
那麼如何解決該矛盾呢?
在正式讨論之前,我們換一個話題。如下圖所示,假如大熊要去圖書館,詢問胖虎圖書館的具體位置(物理地址),于是胖虎告訴他:
(1)你可以從從學校走2826米能到圖書館;
(2)也可以從學校走2000米到體育館,再走826米就是圖書館。
顯然,兩種方式大熊都能找到圖書館的位置。
那麼現在加一些限制條件,比如大熊和胖虎之間用如下的方格紙進行通信,那麼按照第一種方式直接寫入2826表示圖書館的位置就能準确定位。
如果現在再加一個限定條件:假如方格個數隻有三個,如何才能定位圖書館的位置呢?
隻能采用第二種方式咯:先找到體育館,再通過偏移的826米找到圖書館。
概括表述為:先用200米表示起始位置,我給它起個名字叫段地址,将200米乘以10的位置我們叫它基地址,基地址再加上偏移位置826米,正好是2826米,也就是圖書館的位置!
好了,我們再回到8086CPU确定物理地址的方式上來,根據上面的例子我們就能解決CPU内部與數據總線的矛盾。8086CPU采用一種在内部用兩個16位地址合成的方法來形成一個20位的物理地址。
(1) CPU中的相關部件提供兩個16位的地址,一個稱為段地址,另一個稱為偏移地址;
(2)段地址和偏移地址通過内部總線送入一個稱為地址加法器的部件;
(3)地址加法器将兩個16位地址合成為一個20位的物理地址;
(4)地址加法器通過内部總線将20位物理地址送入輸入輸出控制電路;
(5)輸入輸出控制電路将20位物理地址送上地址總線;
(6)20位物理地址被地址總線傳送到存儲器。
動圖演示如下:
地址加法器采用物理地址=段地址x16 偏移地址的方式合成物理地址,其思想和上述例子中找圖書館的位置時如出一轍的,隻不過從10進制變成了計算機的16進制。
當個體受限時,借助外力以及互相配合則顯得尤為重要!
君子性非異也,善假于物也。——荀子
兩點注意:
(1)段地址×16必然是16的倍數,所以一個段的起始地址也一定是16的倍數;
(2)偏移地址為16位,16位地址的尋址能力為64KB,所以一個段的長度最大為64KB。
總結
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!