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