0 參考資料
10分鍾看懂CPU構造原理 https://new.qq.com/rain/a/20200511A0814P00
電腦硬件入門——基礎之CPU架構解讀 https://zhuanlan.zhihu.com/p/65840506
計算機硬件系統—CPU(運算器和控制器)(一) https://www.jianshu.com/p/defc60406dc1
Caffee Lake-英特爾CPU微架構 (第八代處理器) https://en.wikichip.org/wiki/intel/microarchitectures/coffee_lake
第一章 計算機系統概論 https://www.pianshen.com/article/55491435509/
CPU組成 https://wenku.baidu.com/view/410842cd2cc58bd63186bd6f.html
五分鍾理解主存儲器的基本組成結構 https://www.cnblogs.com/codevald/p/codevald2.html
CPU中的主要寄存器 https://blog.csdn.net/kwame211/article/details/77773621
1 運算器、控制器、寄存器
CPU內部主要由運算器、控制器、寄存器三大部分組成。
運算器 負責算術運算(+ - * / 基本運算和附加運算)和邏輯運算(包括 移位、邏輯測試或比較兩個值等)。
控制器 負責應對所有的信息情況,調度運算器把計算做好。
寄存器 它們可用來暫存指令、數據和地址。既要對接控制器的命令,傳達命令給運算器;還要幫運算器記錄處理完或者將要處理的數據。


1.1 控制器
控制器由程序計數器(PC,Program Counter)、指令寄存器(IR,Instruction Register)、指令譯碼器(ID,Instruction Decoder)、時序產生器(Timing Generator)、操作控制器(Control Unit)組成。
指令寄存器IR
,是用來存放當前正在執行的的一條指令,存放的內容來自於數據寄存器(DR,Data Register)。當一條指令需要被執行時,先要把它從內存取到數據寄存器,然后再送到指令寄存器IR中。
指令譯碼器ID
,在計算機執行一條指定的指令時,必須首先分析這條指令的操作碼是什么,以決定操作的性質和方法,然后控制計算機的其他各部件協同完成指令表達的功能,這中間的分析工作就是指令譯碼器ID完成的。
程序計數器PC
,用來存放下一條要執行指令的地址,它與存儲器(內存)之間有一條直接通路。執行指令時,首先需要根據程序計數器PC中存放的指令地址,將指令由內存取到指令寄存器IR,完成“取指令”的操作。程序計數器PC本身具有自動加1的功能,可以自動給出下一條指令的地址,如此循環,執行每一條指令。
時序產生器
,類似於“時間作息表”,給計算機各部分提供工作所需的時間標志,一般是利用定時脈沖的順序和不同的脈沖間隔來實現。
操作控制器
,根據指令所需完成的操作和信號,發出各種微操作命令序列,用以控制所有被控對象,完成指令的執行。
整個控制器的運行邏輯是先按照程序計數器
所指出的指令地址,從內存中取出一條指令到指令寄存器IR
,然后指令譯碼器ID
對指令進行分析,之后操作控制器
根據指令的功能向有關部件發出控制命令,執行控制指令的操作。完成操作之后,程序計數器
加1,再重復執行上述操作。
1.2 運算器
運算器,一般最少包括3個寄存器
和1個算術邏輯單元(ALU)
,現代計算機內部往往設有通用寄存器組。
寄存器,一種有限存儲容量的高速存儲部件,可用來暫存指令、數據和位址。寄存器有很多種類,一般涉及到四則運算的有3類,ACC(Accumulator)為累加器,MQ(Multiplier-Quotient Register)為乘商寄存器,X為操作數寄存器,3類寄存器在完成不同運算時,所存放的操作數類別也各不相同。

關於乘積高位和乘積低位的概念,以十進制為例,百位就是十位的高位,十位是百位的低位。兩個16位數相乘,結果可能會有32位,那左半部分的16位就是乘積高位,存儲到ACC中,右半部分的16位就是乘積低位,存儲到MQ中。
算術邏輯單元(ALU,Arithmetic and Logic Unit),是算術運算和邏輯運算的部件。算術運算包括加、減、乘的整數運算,邏輯運算是與、或、非和異或等邏輯操作,還有移位、比較和傳送等操作。
移位運算,將一個字符向左或向右移動位,或是浮動特定位,包含帶符號延伸和無符號延伸,在程序中應用很廣泛。
1.3 寄存器
在CPU中至少要有六類寄存器:指令寄存器(IR)、程序計數器(PC)、地址寄存器(AR)、數據寄存器(DR)、累加寄存器(AC)、程序狀態字寄存器(PSW)。這些寄存器用來暫存一個計算機字,其數目可以根據需要進行擴充。
-
數據寄存器
數據寄存器(Data Register,DR
)又稱數據緩沖寄存器,其主要功能是作為CPU和主存、外設之間信息傳輸的中轉站,用以彌補CPU和主存、外設之間操作速度上的差異。
數據寄存器用來暫時存放由主存儲器讀出的一條指令或一個數據字;反之,當向主存存入一條指令或一個數據字時,也將它們暫時存放在數據寄存器中。
數據寄存器的作用是 :
(1)作為CPU和主存、外圍設備之間信息傳送的中轉站;
(2)彌補CPU和主存、外圍設備之間在操作速度上的差異;
(3)在單累加器結構的運算器中,數據寄存器還可兼作操作數寄存器。 -
指令寄存器
指令寄存器(Instruction Register,IR
)用來保存當前正在執行的一條指令。
當執行一條指令時,首先把該指令從主存讀取到數據寄存器中,然后再傳送至指令寄存器。
指令包括操作碼和地址碼兩個字段,為了執行指令,必須對操作碼進行測試,識別出所要求的操作,指令譯碼器(Instruction Decoder,ID)就是完成這項工作的。指令譯碼器對指令寄存器的操作碼部分進行譯碼,以產生指令所要求操作的控制電位,並將其送到微操作控制線路上,在時序部件定時信號的作用下,產生具體的操作控制信號。
指令寄存器中操作碼字段的輸出就是指令譯碼器的輸入。操作碼一經譯碼,即可向操作控制器發出具體操作的特定信號。 -
程序計數器
程序計數器(Program Counter,PC
)用來指出下一條指令在主存儲器中的地址。
在程序執行之前,首先必須將程序的首地址,即程序第一條指令所在主存單元的地址送入PC,因此PC的內容即是從主存提取的第一條指令的地址。
當執行指令時,CPU能自動遞增PC的內容,使其始終保存將要執行的下一條指令的主存地址,為取下一條指令做好准備。若為單字長指令,則(PC)+1àPC,若為雙字長指令,則(PC)+2àPC,以此類推。
但是,當遇到轉移指令時,下一條指令的地址將由轉移指令的地址碼字段來指定,而不是像通常的那樣通過順序遞增PC的內容來取得。
因此,程序計數器的結構應當是具有寄存信息和計數兩種功能的結構。 -
地址寄存器
地址寄存器(Address Register,AR
)用來保存CPU當前所訪問的主存單元的地址。
由於在主存和CPU之間存在操作速度上的差異,所以必須使用地址寄存器來暫時保存主存的地址信息,直到主存的存取操作完成為止。
當CPU和主存進行信息交換,即CPU向主存存入數據/指令或者從主存讀出數據/指令時,都要使用地址寄存器和數據寄存器。
如果我們把外圍設備與主存單元進行統一編址,那么,當CPU和外圍設備交換信息時,我們同樣要使用地址寄存器和數據寄存器。 -
累加寄存器
累加寄存器通常簡稱累加器(Accumulator,AC
),是一個通用寄存器。
累加器的功能是:當運算器的算術邏輯單元ALU執行算術或邏輯運算時,為ALU提供一個工作區,可以為ALU暫時保存一個操作數或運算結果。
顯然,運算器中至少要有一個累加寄存器。 -
程序狀態字寄存器
程序狀態字(Program Status Word,PSW
)用來表征當前運算的狀態及程序的工作方式。
程序狀態字寄存器用來保存由算術/邏輯指令運行或測試的結果所建立起來的各種條件碼內容,如運算結果進/借位標志(C)、運算結果溢出標志(O)、運算結果為零標志(Z)、運算結果為負標志(N)、運算結果符號標志(S)等,這些標志位通常用1位觸發器來保存。
除此之外,程序狀態字寄存器還用來保存中斷和系統工作狀態等信息,以便CPU和系統及時了解機器運行狀態和程序運行狀態。
因此,程序狀態字寄存器是一個保存各種狀態條件標志的寄存器。
注意:
MAR/MDR 在CPU中
MAR(地址寄存器)的作用是:用來存放預訪問的存儲單元的地址,其位數對應存儲單元的個數。
MDR(數據寄存器)的作用是:是存儲器數據寄存器,用來存放從存儲體某單元取出的代碼。