計算機(jī)或者嵌入式剛剛?cè)腴T的人,可能會有這樣的疑問:CPU 是 32 位/64 位的計算機(jī),是怎么讀取一個字節(jié)的?又或者說,是怎么一下子讀取到 32 位/64 位數(shù)據(jù)的?這其實就是計算機(jī)的編址的問題。只要知道了,按字節(jié)編址與按字長編址的區(qū)別就可以解決這些疑問了。下面將用按字節(jié)編址與按字編址的電路原理圖圖解來講述其中的奧秘。
首先,32 位/64 位 CPU 指的是 CPU 的數(shù)據(jù)總線的寬度,也是字長。初學(xué)者可能就會認(rèn)為,既然是 32 位 CPU 了,數(shù)據(jù)總線的寬度也是 32 位的,那么 CPU 就應(yīng)該是每一次都是從內(nèi)存中并行讀取 32 位的數(shù)據(jù),那么 32 位 CPU 的內(nèi)存的基本單元就應(yīng)該是 32 位的才對,為什么現(xiàn)在的計算機(jī)都是以 8 位一個字節(jié)為基本存儲單元的呢?32 位 CPU 它是怎么實現(xiàn)對一個字節(jié)單元的讀寫操作的呢?
按字節(jié)編址
關(guān)鍵就在于字節(jié)編址。編址,顧名思義就是對地址的編排。而按字節(jié)編址就是,一個字節(jié)做為一個基本的地址單元。通俗點說就是一個地址對應(yīng)一個字節(jié)(8 位)。
?需要說明的是該芯片的基本存儲單元是 8 位(一個字節(jié)),cADDR0-cADDR15 是 CPU 的地址線。
如上圖所示就是一個很經(jīng)典的按字節(jié)編址的電路。按照該電路設(shè)計,那么 CPU 的每一個地址都對應(yīng)著存儲芯片的一個字節(jié)。這時候還是會有疑問,那么按字節(jié)編址,CPU 不是每一次都是只能讀取一個字節(jié)的數(shù)據(jù)嗎?這個時候再看一個圖:
這是一個 32 位 CPU 的內(nèi)存芯片電路圖。仔細(xì)觀察電路圖可以看到,CPU 的 32 位數(shù)據(jù)是由兩個 16 位內(nèi)存芯片的數(shù)據(jù)并成的。這樣 CPU 就可以每一次都是讀取到 32 位的數(shù)據(jù)了。這時候再來看看地址總線。你會發(fā)現(xiàn),CPU 的地址總線 LADDR2 接的是內(nèi)存芯片的 A0,LADDR1、LADDR0 哪里去了?為什么錯開了兩條地址線?
其實這就是 16 位及以上的 CPU 實現(xiàn)按字節(jié)編址的關(guān)鍵所在。舉個例子就好理解了。CPU 地址總線發(fā)出 4 個地址信號 000000、000001、000010、000011(省略掉前面的 N 個 0 了),這 4 個地址信號改變的是最低兩位的地址線(LADDR1、LADDR0),高 30 位(LADDR2-LADDR31)始終還是 0,結(jié)合電路知道,CPU 地址總線發(fā)出的這 4 個地址信號讀取到的數(shù)據(jù)其實是相同的 32 位數(shù)據(jù),因為最低兩位地址線根本沒有接到內(nèi)存芯片上。而這 32 位數(shù)據(jù)(4 個字節(jié))剛好可以通過最低兩位地址線進(jìn)行編排(2^2=4),具體 4 個地址與 4 個字節(jié)是如何編排的則是由 CPU 所決定的(可以是高字節(jié)對高地址,也可以是高字節(jié)對低地址)。所以 CPU 發(fā)出的每一個地址信號其實還是只對應(yīng)著一個字節(jié)(8 位)的,也就是 CPU 的尋址還是按照字節(jié)來尋址的。這就是按字節(jié)編址。
而 CPU 要實現(xiàn)對其中某一個字節(jié)的操作可以通過“按位與”和“按位或”運算實現(xiàn)。
?請忽略LADDR14-LADDR24 之間的不連續(xù),這需要結(jié)合到具體的芯片型號才能看懂的。并不是本文的重點。
按字編址
如果懂了按字節(jié)編址,那么按字編址就很好理解了。直接看圖
該圖是 32 位 CPU 按字編址的電路原理圖。32 位 CPU 的字長就是 32 位,因此按字編址就是,每一個地址對應(yīng)著一個字長的數(shù)據(jù)。圖中可以看到,CPU 的地址總線 cADDR0-cADDR15 與內(nèi)存芯片的 A0-A15 是一一對應(yīng)的,并沒有像按字節(jié)編址那樣,將最低兩位錯開。然后由兩個 16 位的內(nèi)存芯片的數(shù)據(jù)合并成 32 位數(shù)據(jù)。CPU 同樣是每次讀取 32 字節(jié)的數(shù)據(jù),但是,CPU 發(fā)出的每一個地址信號都對應(yīng)著一個 32 位的數(shù)據(jù),不同的地址信號對應(yīng)著不同的存儲單元。
按字編址設(shè)計的電路,CPU 是沒辦法尋址到某一個字節(jié)并對其操作的,因為 CPU 發(fā)出的每一個地址信號都對應(yīng)著 32 位的數(shù)據(jù),無法具體到其中的哪些字節(jié)。
總結(jié)
判斷是按字編址還是按字節(jié)編址的關(guān)鍵在于,判斷 CPU 給出的每一個地址所確定的存儲單元的大小。其大小等于一個字節(jié),那么就是按字節(jié)編址的;等于一個字,則是按字編址的。
現(xiàn)代計算機(jī)大多數(shù)采用的都是按字節(jié)編址的方式設(shè)計的,也就是經(jīng)常所說的,計算機(jī)最基本的存儲單位是字節(jié)。
按字節(jié)編址的計算機(jī)較為通用,兼容性更好;
而按字編址的計算機(jī)的兼容性沒有那么好了,因為當(dāng) CPU 的字長發(fā)生變化時,計算機(jī)的基本存儲單位都會發(fā)生變化,但是它可尋址的存儲空間更大,因為它的一個地址對應(yīng)著是 32 位/64 位數(shù)據(jù),而按字節(jié)編址的一個地址對應(yīng)的只有一個字節(jié)(8 位)的數(shù)據(jù)。
編輯:hfy
-
cpu
+關(guān)注
關(guān)注
68文章
10921瀏覽量
213208 -
計算機(jī)
+關(guān)注
關(guān)注
19文章
7552瀏覽量
88765
發(fā)布評論請先 登錄
相關(guān)推薦
對MCU的CAN節(jié)點進(jìn)行編址
一個具有20位地址和32位字長的存儲器能存儲多少個字節(jié)的信息
AVR系列單片機(jī)內(nèi)部有三種類型的被獨立編址的存儲器
內(nèi)存的編址方法
SDRAM和NOR FLASH屬于CPU的統(tǒng)一編址空間嗎
請問按字節(jié)編址沒接入內(nèi)存芯片的用作字內(nèi)尋址的那幾根地址線在mar里嗎?
空分多址(SDMA),空分多址(SDMA)是什么意思
51單片機(jī)存儲器擴(kuò)展的編址技術(shù)詳細(xì)介紹
![51單片機(jī)存儲器擴(kuò)展的<b class='flag-5'>編</b><b class='flag-5'>址</b>技術(shù)詳細(xì)介紹](https://file.elecfans.com/web1/M00/9A/47/o4YBAF0e_O6AcqySAADIf9JxMgM687.png)
如何采用51單片機(jī)設(shè)計出總線編址電路
![如何采用51單片機(jī)設(shè)計出總線<b class='flag-5'>編</b><b class='flag-5'>址</b>電路](https://file.elecfans.com/web1/M00/8F/F4/pIYBAFzBfuGAbIhoAAKgL9T3CQA774.png)
設(shè)計電氣原理圖時如何做到PLC高效自動編址?
![設(shè)計電氣<b class='flag-5'>原理圖</b>時如何做到PLC高效自動<b class='flag-5'>編</b><b class='flag-5'>址</b>?](https://file.elecfans.com/web1/M00/F0/BE/o4YBAGCtpeyAT_qTAAAVyIego-U307.jpg)
評論