官术网_书友最值得收藏!

4.3 中央處理器

中央處理器(CPU)是計算機中進行實際計算的部分。按照我們的比喻,CPU住在市中心,城市里其他成員都是配角。CPU由許多不同的部分組成,我們將在本節(jié)介紹這些部分。

4.3.1 算術(shù)邏輯單元

算術(shù)邏輯單元(Arithmetic Logic Unit, ALU)是CPU的主要部件之一。它負責算術(shù)、布爾代數(shù)和其他運算。圖4-7展示了ALU的簡單結(jié)構(gòu)。

圖4-7 算術(shù)邏輯單元示例

操作數(shù)只是可以表示數(shù)字的位。操作碼是一個數(shù)字,它告訴ALU要將哪個運算符應用于操作數(shù)。當然,結(jié)果就是我們對操作數(shù)應用運算符時得到的結(jié)果。

條件碼包含與結(jié)果有關(guān)的額外信息。它們通常存儲在條件碼寄存器中。我們在第3章中提到過寄存器,它只是一個特殊的內(nèi)存片段,與其他內(nèi)存不同,它住在另一個“街道”上,那條街上有昂貴的定制住宅。典型條件碼寄存器如圖4-8所示。方框頂部的數(shù)字是位編號,可以很方便地指示位。注意有些位沒有使用,這種情況并不罕見。

圖4-8 條件碼寄存器

如果最后一個操作的結(jié)果是負數(shù),則N位被設(shè)置為1。如果最后一個操作的結(jié)果為0,則Z位被設(shè)置為1。如果最后一個操作的結(jié)果造成了溢出或下溢,O位被設(shè)置為1。

表4-1展示了ALU的具體功能。

表4-1 示例算術(shù)邏輯單元操作碼

ALU可能看起來很神秘,但實際上它只是一些選擇器中的邏輯門。圖4-9展示了ALU的總體設(shè)計,為了簡單起見省略了一些復雜的功能。

圖4-9 ALU部分內(nèi)部結(jié)構(gòu)

4.3.2 移位寄存器

你可能已經(jīng)注意到表4-1中的移位操作。左移使每一位向左移動一個位置,丟棄最左邊的位,最右邊的空位置移入一個0。如果把01101001(10510)左移一位,將得到11010010(21010)。這是非常方便的,因為把一個數(shù)字左移一個位后得到的數(shù),就是把它乘以2后的數(shù)。

右移使每一位向右移動一個位置,丟棄最右邊的位并將0移到最左邊的空位置。如果把01101001(10510)右移1位,將得到00110100(5210)。右移一位的結(jié)果是將這個數(shù)除以2并去掉它的余數(shù)。

經(jīng)常需要左移時會丟失MSB(最高有效位)值,經(jīng)常需要右移時會丟失LSB(最低有效位)值,因此MSB值和LSB值保存在條件碼寄存器中。我們假設(shè)CPU把這些保存在O位。

你可能已經(jīng)注意到,除這些移位指令之外,ALU中的所有內(nèi)容看起來都可以用組合邏輯實現(xiàn)。你可以用觸發(fā)器來構(gòu)建移位寄存器,其中的內(nèi)容每計算機時鐘移位一位。

順序移位寄存器(如圖4-10所示)速度很慢,在最壞的情況下它移動每位需要一個計算機時鐘。

圖4-10 順序移位寄存器

我們可以通過使用邏輯構(gòu)件之一的選擇器(參見圖2-47)完全用組合邏輯構(gòu)造桶式移位器來解決這個問題。要構(gòu)建一個8位移位器,我們需要8個8:1選擇器。

每個位要有一個選擇器,如圖4-11所示。

圖4-11 組合桶式移位器

右移量由S0-2提供。可以看到,在沒有移位的情況下(S為000),輸入位0(I0)被傳遞到輸出位0(O0),I1傳遞到O1,以此類推。當S為001時,輸出右移1位,因為這是輸入連接到選擇器的方式。當S為010時,輸出右移2位,以此類推。換言之,我們有8種可能的連接方式,但只需選擇一種我們想要的。

你可能會好奇為什么我一直在展示這些邏輯圖。在集成電路設(shè)計系統(tǒng)中,類似門、多路輸出選擇器、多路選擇器、加法器、鎖存器等功能都是預先定義好的。它們的用法和舊的元件類似,只是不用把第2章提到的7400系列零件粘在電路板上,而是用設(shè)計軟件把類似的元件組裝成一個芯片。

你可能已經(jīng)注意到我們的簡單ALU中沒有乘法和除法運算。那是因為乘法和除法要復雜得多,而且不能向我們展示我們還沒有看到過的東西。乘法可以通過重復加法來完成,也可以通過級聯(lián)桶式移位器和加法器來構(gòu)建組合乘法器,但請記住左移會將數(shù)字乘以2。

移位器是實現(xiàn)浮點運算的一個關(guān)鍵元素,指數(shù)用于移動尾數(shù)以對齊二進制點,以便它們可以相加、相減等。

4.3.3 執(zhí)行單元

計算機的執(zhí)行單元,也稱為控制單元,是計算機里的指揮中心。ALU自身并不能發(fā)揮作用,需要有指令指示它應該怎么做。執(zhí)行單元從內(nèi)存中正確的位置獲取操作碼和操作數(shù),告訴ALU要執(zhí)行哪些操作,并將結(jié)果放回內(nèi)存中。希望它能以某種有用的方式完成所有這些工作。

執(zhí)行單元如何做到?我們給它一個指令列表,比如“將位置10的數(shù)字與位置12的數(shù)字相加,并將結(jié)果放入位置14。”執(zhí)行單元在哪里找到這些指令?在內(nèi)存里!這種形式的計算機在技術(shù)上稱為存儲程序計算機。它起源于英國奇才艾倫·圖靈(Alan Turing)(1912—1954)的作品。

是的,我們還有另一種方法來看待和解釋位。指令是指示計算機做什么的位型。位型是特定CPU設(shè)計的一部分,它們不像數(shù)字那樣是一些通用的標準,所以Intel Core i7 CPU對于inc A指令的位型可能與ARM Cortex-A CPU的不同。

執(zhí)行單元如何知道在內(nèi)存中何處查找指令?執(zhí)行單元使用一個程序計數(shù)器(Program Counter, PC),它有點像郵遞員,或者像一個標有“你在這里”的大箭頭。如圖4-12所示,程序計數(shù)器是一個寄存器,是特殊“街道”上的一塊內(nèi)存。程序計數(shù)器是由一個計數(shù)器(見3.1.6節(jié))而非一個普通寄存器(見3.1.7節(jié))構(gòu)造的。你可以將它視為具有額外計數(shù)功能的寄存器。

圖4-12 程序計數(shù)器

程序計數(shù)器包含一個內(nèi)存地址。換句話說,它會指向或引用內(nèi)存中的一個位置。執(zhí)行單元從程序計數(shù)器引用的位置獲取指令。有些特殊的指令可以改變程序計數(shù)器的值。除非正在執(zhí)行某個指令,否則在指令執(zhí)行完畢后程序計數(shù)器值將遞增(即將一條指令的大小加到其中),以便下一條指令從下一個內(nèi)存位置中產(chǎn)生。請注意,當電源打開時,CPU有一些初始程序計數(shù)器值,通常為0。我們在圖3-17中看到的計數(shù)器具有支持所有這些功能的輸入。

這一切就像尋寶一樣。計算機進入內(nèi)存中的某個位置并找到一個“紙條”。計算機讀取那張“紙條”后,會被“紙條”告知該做些什么,然后到其他地方去拿下一張“紙條”,以此類推。

主站蜘蛛池模板: 莱阳市| 邵阳市| 大兴区| 台江县| 顺昌县| 平江县| 彭水| 清水县| 西乌| 海伦市| 达州市| 福贡县| 辽宁省| 肃南| 静安区| 阜南县| 米易县| 长顺县| 库伦旗| 兖州市| 庄河市| 华蓥市| 遵义县| 沅江市| 乐山市| 岳普湖县| 沅江市| 湘乡市| 岫岩| 德阳市| 上虞市| 新余市| 无极县| 高雄县| 阿拉善左旗| 平山县| 上饶县| 昌平区| 常熟市| 华池县| 当涂县|