CPU的內部架構和工作原理


我們都知道CPU的根本任務就是執行指令,對計算機來說最終都是一串由“0”和“1”組成的序列。CPU從邏輯上可以划分成3個模塊,分別是控制單元、運算單元和存儲單元,這三部分由CPU內部總線連接起來。如下所示:

 

 

控制單元:控制單元是整個CPU的指揮控制中心,由指令寄存器IR(Instruction Register)、指令譯碼器ID(Instruction Decoder)和操作控制器OC(Operation Controller)等,對協調整個電腦有序工作極為重要。它根據用戶預先編好的程序,依次從存儲器中取出各條指令,放在指令寄存器IR中,通過指令譯碼(分析)確定應該進行什么操作,然后通過操作控制器OC,按確定的時序,向相應的部件發出微操作控制信號。操作控制器OC中主要包括節拍脈沖發生器、控制矩陣、時鍾脈沖發生器、復位電路和啟停電路等控制邏輯。

運算單元:是運算器的核心。可以執行算術運算(包括加減乘數等基本運算及其附加運算)和邏輯運算(包括移位、邏輯測試或兩個值比較)。相對控制單元而言,運算器接受控制單元的命令而進行動作,即運算單元所進行的全部操作都是由控制單元發出的控制信號來指揮的,所以它是執行部件。

存儲單元:包括CPU片內緩存和寄存器組,是CPU中暫時存放數據的地方,里面保存着那些等待處理的數據,或已經處理過的數據,CPU訪問寄存器所用的時間要比訪問內存的時間短。采用寄存器,可以減少CPU訪問內存的次數,從而提高了CPU的工作速度。但因為受到芯片面積和集成度所限,寄存器組的容量不可能很大。寄存器組可分為專用寄存器和通用寄存器。專用寄存器的作用是固定的,分別寄存相應的數據。而通用寄存器用途廣泛並可由程序員規定其用途,通用寄存器的數目因微處理器而異。這個是我們以后要介紹這個重點,這里先提一下。

我們將上圖細化一下,可以得出CPU的工作原理概括如下:

 

總的來說,CPU從內存中一條一條地取出指令和相應的數據,按指令操作碼的規定,對數據進行運算處理,直到程序執行完畢為止。
   上圖中我沒有畫總線,只是用邏輯方式對其進行呈現。原因早期Intel的微處理器,諸如8085,8086/8088CPU,普遍采用了地址總線和數據總線復用技術,即將部分(或全部)地址總線與數據總線共用CPU的一些引腳。例如8086外部地址總線有20根,數據總線復用了地址總線的前16根引腳。復用的數據總線和地址總線雖然可以少CPU的引腳數,但卻引入了控制邏輯及操作序列上的復雜性。所以,自80286開始,Intel的CPU才采用分開的地址總線和數據總線。
   不管是復用還是分開,對我們理解CPU的運行原理沒啥影響,上圖沒畫總線的目的就是怕有些人太過於追求細節,一頭扎下去,浮不起來,不能從宏觀上藐視敵人。
   OK,總結一下,CPU的運行原理就是:控制單元在時序脈沖的作用下,將指令計數器里所指向的指令地址(這個地址是在內存里的)送到地址總線上去,然后CPU將這個地址里的指令讀到指令寄存器進行譯碼。對於執行指令過程中所需要用到的數據,會將數據地址也送到地址總線,然后CPU把數據讀到CPU的內部存儲單元(就是內部寄存器)暫存起來,最后命令運算單元對數據進行處理加工。周而復始,一直這樣執行下去,天荒地老,海枯枝爛,直到停電。
   
如果你對這段話還是覺得比較暈乎,那么就看我們老師是怎么講的:
   1、取指令:CPU的控制器從內存讀取一條指令並放入指令寄存器。指令的格式一般是這個樣子滴:

 
        操作碼就是匯編語言里的mov,add,jmp 等符號碼;操作數地址說明該指令需要的操作數所在的地方,是在內存里還是在CPU 的內部寄存器里。
   
2、 指令譯碼:指令寄存器中的指令經過譯碼,決定該指令應進行何種操作( 就是指令里的操作碼) 、操作數在哪里( 操作數的地址)。
   
3、   執行指令,分兩個階段“取操作數”和“進行運算”。
   
4、   修改指令計數器,決定下一條指令的地址。
 

關於CPU我們從宏觀上把握到這個程度就OK了,后面我們會逐步進入微觀階段,依次介紹80X86寄存器及其用途,NASM匯編和AT&T的區別,以及C代碼中嵌入的匯編語言的寫法。之所以介紹匯編語言目的不是說用匯編去寫代碼,那是相當的不現實,除非你是硬件驅動工程師。稍微偏上層一點的開發人員懂點低等的東西,對自己理解整個系統的架構和原理是相當有好處的。
    未完,待續…


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM