今天是匯編專輯第二彈,以8086CPU拋磚引玉雅宾,討論一下CPU確定物理地址平凡又神奇的操作卦溢!
我們知道,CPU 訪問內(nèi)存單元時秀又,要給出內(nèi)存單元的地址单寂。所有的內(nèi)存單元構(gòu)成的存儲空間是一個一維的線性空間,每一個內(nèi)存單元在這個空間中都有唯一的地址吐辙,我們將這個唯一的地址稱為物理地址宣决。
8086是16位結(jié)構(gòu)的CPU,這也就是說昏苏,在8086內(nèi)部尊沸,能夠一次性處理、傳輸贤惯、暫時存儲的信息的最大長度是16位洼专。內(nèi)存單元的地址在送上地址總線之前,必須在CPU中處理孵构、傳輸屁商、暫時存放。
而上一篇我們講到颈墅,地址總線的寬度決定CPU的尋址能力蜡镶。8086有20根地址總線,可以傳送20位地址恤筛,所以其尋址能力為2^20B官还,即1M。(傳送門:計算機(jī)中的三類總線 )
很自然地毒坛,這里產(chǎn)生了矛盾:如果只是簡單地將地址從內(nèi)部發(fā)出望伦,那么8086只能發(fā)出16位的地址林说,表現(xiàn)的尋址能力也就只有2^16byte,即64KB屯伞。這這與1M的尋址能力不符述么!
那么如何解決該矛盾呢?
在正式討論之前愕掏,我們換一個話題度秘。如下圖所示,假如大熊要去圖書館饵撑,詢問胖虎圖書館的具體位置(物理地址)剑梳,于是胖虎告訴他:
(1)你可以從從學(xué)校走2826米能到圖書館;
(2)也可以從學(xué)校走2000米到體育館滑潘,再走826米就是圖書館垢乙。
顯然,兩種方式大熊都能找到圖書館的位置语卤。
那么現(xiàn)在加一些限制條件追逮,比如大熊和胖虎之間用如下的方格紙進(jìn)行通信,那么按照第一種方式直接寫入2826表示圖書館的位置就能準(zhǔn)確定位粹舵。
如果現(xiàn)在再加一個限定條件:假如方格個數(shù)只有三個钮孵,如何才能定位圖書館的位置呢?
只能采用第二種方式咯:先找到體育館眼滤,再通過偏移的826米找到圖書館巴席。
概括表述為:先用200米表示起始位置,我給它起個名字叫段地址诅需,將200米乘以10的位置我們叫它基地址漾唉,基地址再加上偏移位置826米,正好是2826米堰塌,也就是圖書館的位置赵刑!
好了,我們再回到8086CPU確定物理地址的方式上來场刑,根據(jù)上面的例子我們就能解決CPU內(nèi)部與數(shù)據(jù)總線的矛盾般此。8086CPU采用一種在內(nèi)部用兩個16位地址合成的方法來形成一個20位的物理地址。
(1) CPU中的相關(guān)部件提供兩個16位的地址摇邦,一個稱為段地址恤煞,另一個稱為偏移地址屎勘;
(2)段地址和偏移地址通過內(nèi)部總線送入一個稱為地址加法器的部件;
(3)地址加法器將兩個16位地址合成為一個20位的物理地址;
(4)地址加法器通過內(nèi)部總線將20位物理地址送入輸入輸出控制電路;
(5)輸入輸出控制電路將20位物理地址送上地址總線;
(6)20位物理地址被地址總線傳送到存儲器施籍。
動圖演示如下:
地址加法器采用物理地址=段地址x16+偏移地址的方式合成物理地址,其思想和上述例子中找圖書館的位置時如出一轍的概漱,只不過從10進(jìn)制變成了計算機(jī)的16進(jìn)制丑慎。
當(dāng)個體受限時,借助外力以及互相配合則顯得尤為重要!
君子性非異也竿裂,善假于物也玉吁。——荀子
兩點注意:
(1)段地址×16必然是16的倍數(shù)腻异,所以一個段的起始地址也一定是16的倍數(shù);
(2)偏移地址為16位进副,16位地址的尋址能力為64KB,所以一個段的長度最大為64KB悔常。
CPU將若干地址連續(xù)的內(nèi)存單元看作一個段影斑,用段地址x16定位段的起始地址(基礎(chǔ)地址),用偏移地址定位段中的內(nèi)存單元机打;
物理地址=段地址x16+偏移地址