計算機或者嵌入式剛剛入門的人,可能會有這樣的疑問:CPU 是 32 位/64 位的計算機,是怎么讀取一個字節的?又或者說,是怎么一下子讀取到 32 位/64 位數據的?這其實就是計算機的編址的問題。只要知道了,按字節編址與按字長編址的區別就可以解決這些疑問了。下面將用按字節編址與按字編址的電路原理圖圖解來講述其中的奧秘。
首先,32 位/64 位 CPU 指的是 CPU 的數據總線的寬度,也是字長。初學者可能就會認為,既然是 32 位 CPU 了,數據總線的寬度也是 32 位的,那么 CPU 就應該是每一次都是從內存中并行讀取 32 位的數據,那么 32 位 CPU 的內存的基本單元就應該是 32 位的才對,為什么現在的計算機都是以 8 位一個字節為基本存儲單元的呢?32 位 CPU 它是怎么實現對一個字節單元的讀寫操作的呢?
按字節編址
關鍵就在于字節編址。編址,顧名思義就是對地址的編排。而按字節編址就是,一個字節做為一個基本的地址單元。通俗點說就是一個地址對應一個字節(8 位)。
?需要說明的是該芯片的基本存儲單元是 8 位(一個字節),cADDR0-cADDR15 是 CPU 的地址線。
如上圖所示就是一個很經典的按字節編址的電路。按照該電路設計,那么 CPU 的每一個地址都對應著存儲芯片的一個字節。這時候還是會有疑問,那么按字節編址,CPU 不是每一次都是只能讀取一個字節的數據嗎?這個時候再看一個圖:
這是一個 32 位 CPU 的內存芯片電路圖。仔細觀察電路圖可以看到,CPU 的 32 位數據是由兩個 16 位內存芯片的數據并成的。這樣 CPU 就可以每一次都是讀取到 32 位的數據了。這時候再來看看地址總線。你會發現,CPU 的地址總線 LADDR2 接的是內存芯片的 A0,LADDR1、LADDR0 哪里去了?為什么錯開了兩條地址線?
其實這就是 16 位及以上的 CPU 實現按字節編址的關鍵所在。舉個例子就好理解了。CPU 地址總線發出 4 個地址信號 000000、000001、000010、000011(省略掉前面的 N 個 0 了),這 4 個地址信號改變的是最低兩位的地址線(LADDR1、LADDR0),高 30 位(LADDR2-LADDR31)始終還是 0,結合電路知道,CPU 地址總線發出的這 4 個地址信號讀取到的數據其實是相同的 32 位數據,因為最低兩位地址線根本沒有接到內存芯片上。而這 32 位數據(4 個字節)剛好可以通過最低兩位地址線進行編排(2^2=4),具體 4 個地址與 4 個字節是如何編排的則是由 CPU 所決定的(可以是高字節對高地址,也可以是高字節對低地址)。所以 CPU 發出的每一個地址信號其實還是只對應著一個字節(8 位)的,也就是 CPU 的尋址還是按照字節來尋址的。這就是按字節編址。
而 CPU 要實現對其中某一個字節的操作可以通過“按位與”和“按位或”運算實現。
?請忽略LADDR14-LADDR24 之間的不連續,這需要結合到具體的芯片型號才能看懂的。并不是本文的重點。
按字編址
如果懂了按字節編址,那么按字編址就很好理解了。直接看圖
該圖是 32 位 CPU 按字編址的電路原理圖。32 位 CPU 的字長就是 32 位,因此按字編址就是,每一個地址對應著一個字長的數據。圖中可以看到,CPU 的地址總線 cADDR0-cADDR15 與內存芯片的 A0-A15 是一一對應的,并沒有像按字節編址那樣,將最低兩位錯開。然后由兩個 16 位的內存芯片的數據合并成 32 位數據。CPU 同樣是每次讀取 32 字節的數據,但是,CPU 發出的每一個地址信號都對應著一個 32 位的數據,不同的地址信號對應著不同的存儲單元。
按字編址設計的電路,CPU 是沒辦法尋址到某一個字節并對其操作的,因為 CPU 發出的每一個地址信號都對應著 32 位的數據,無法具體到其中的哪些字節。
總結
判斷是按字編址還是按字節編址的關鍵在于,判斷 CPU 給出的每一個地址所確定的存儲單元的大小。其大小等于一個字節,那么就是按字節編址的;等于一個字,則是按字編址的。
現代計算機大多數采用的都是按字節編址的方式設計的,也就是經常所說的,計算機最基本的存儲單位是字節。
按字節編址的計算機較為通用,兼容性更好;
而按字編址的計算機的兼容性沒有那么好了,因為當 CPU 的字長發生變化時,計算機的基本存儲單位都會發生變化,但是它可尋址的存儲空間更大,因為它的一個地址對應著是 32 位/64 位數據,而按字節編址的一個地址對應的只有一個字節(8 位)的數據。
編輯:hfy
-
cpu
+關注
關注
68文章
10855瀏覽量
211590 -
計算機
+關注
關注
19文章
7488瀏覽量
87854
發布評論請先 登錄
相關推薦
評論