一、CPU的功能和基本結構
1、功能
當用計算機解決某個問題是,我們首先必須為他編寫程序,程序是一個指令序列,這個序列明確告訴計算機應該執行什么操作,在什么地方找到用來操作的數據,一旦把程序裝入內存器,就可以由計算機來自動完成取出指令和執行指令的任務。專門用來完成此項工作的計算機部件稱為中央處理器,通常簡稱CPU。

虛線框就是CPU結構
CPU通過地址總線 數據總線來訪問存儲器或者輸入輸出端口。
ALU:執行運算 兩個數一個來自緩存寄存器DR 一個來自累加器AC 運算結果暫時存放到累加器中
狀態條件寄存器:0標志位 溢出標志位 等
緩沖寄存器DR:信息進出CPU都有在這蹲點,不論是指令還是數據進CPU都要先進緩存寄存器DR。
指令寄存器:當前正在執行的指令,這里的指令中包含操作碼和地址碼,將操作碼送入指令譯碼器就知道指令是做什么的,指令譯碼器把翻譯結果告訴操作控制器和時序產生器,他們再按照時間順序向計算機的執行部件發出執行命令。
程序計數器:下一條將要執行指令的地址
地址寄存器:存放CPU正在訪問的內存的地址,一般和地址總線直接相連
CPU的基本部分由運算器 cache和控制器三大部分組成。
二、指令的執行過程
1.指令周期的基本概念
問題:計算機讀取的指令和數據都是存在存儲器里面的二進制代碼,計算機如歌區分這二進制代碼是指令還是數據?
計算機能自動的工作,從存放程序的內存里取出一條指令並執行這條指令,緊接着又是取指令,執行指令,如此周而復始,構成了封閉的循環,除非遇到停機指令,否則這個循環將一直繼續下去、
指令周期:CPU從內存取出一條指令並執行這條指令的時間總和,不同指令的指令周期不同。
CPU周期:又稱機器周期,用從內存讀取一條指令字的最短時間來定義
時鍾周期:通常稱為節拍脈沖或T周期,一個CPU周期包含若干個時鍾周期

eg:分析代碼的執行過程
CLA ;清零指令,將累加寄存器AC的所有位清零
ADD 30 :加法指令,將底座為30的內存空間的內容與累加器AC的內容相加
STA 40:將和寫入地址為40的內存空間
NOP :空操作
JMP 21:跳轉指令,目標地址為21

021到024 存放指令,說明這是單地址指令,取需要一個CPU周期
第一條指令:不需要訪問內存,取指令占用1個CPU周期。執行之前先將PC的內容變為20,周期開始,取指令,指令地址是20,根據地址20去訪問內存,地址寄存器存放的是CPU當前要訪問的內存地址,地址寄存器和地址總線是直接相連的,所以第一步是把PC中的餓0送到地址寄存器,接着送往地址總線(此時取值完成,自動加1,PC中的內容變為21.下一條指令做好准備),地址總線傳給內存,從內存中地址為20的地方讀出的指令經過數據總線進CPU,現在緩存寄存器DR中蹲點,因為現在只取指令階段,所以可以判斷讀取的是指令,因為是指令所以講其送往指令寄存器 IR中,IR中存放的就是當前要執行的指令信息,將指令中的操作碼信息送往指令譯碼器 ,通過譯碼將結果告訴操作控制器和時序產生器,這個時候操作控制器和時序產生器想ALU和累加器 發出執行命令。ALU就將累加器中的內容變為了0.
第二條指令:取指令占用1個CPU周期,執行周期要占用2個CPU周期。當前PC內容是21,先把PC的21送到地址寄存器,送到地址總線,PC的內容+1,從內存中地址為21的地方讀出加法指令,經過數據總線現在緩存寄存器中蹲點,取指令階段,指令送往指令寄存器,然后把操作數送往指令譯碼器,譯碼結果發給操作控制器和時序產生器,加法指令一個操作數在累加器中,另一個在地址為30的單元中,因為要訪問地址是30的數據,所以必須通過指令寄存器把30通過內部總線送到地址寄存器,因為地址寄存器之間和地址總線相連,所以導內存中地址為30的單元取值,將地址30中的額數據6通過數據總線先進緩存寄存器蹲點,因為是執行階段,所以將數據送給ALU,把累加器的數作為另外一個數送到ALU,相加之和再將數據寫回累加器。
第三條指令:寫數要訪問內存,目前PC的內容是22,我們要訪問地址為22的單元,讀取指令。先將PC中的22送到地址寄存器,然后PC中的值+1變為23,經過地址總線取到地址為22的單元的指令內容,經過數據總線送到緩沖寄存器,因為是取指階段,所以將指令送往指令寄存器,指令寄存器將操作碼送往指令譯碼器,指令譯碼器將結果送往操作控制器和時序產生器,要寫入的地址是40.通過內部總線將40傳給地址寄存器,經過總線選中地址為40的單元,將累加器中的值6先進緩沖寄存器,通過內部數據總線寫入內存。
第四條指令:PC的內存是23 代表一個空操作,將PC中的23送給地址寄存器,經過地址總線找到內存中地址為23的單元,將空操作指令經過數據總線送到緩沖寄存器,送往指令譯碼器,然后什么也不做。共占用一個CPU周期。
第五條指令:PC的內存是24 . 將24送給地址寄存器,經過地址總線導內存中找到地址為24的單元,通過總線將指令送給緩沖寄存器,因為是取指階段,所以將指令送給指令寄存器。然后譯碼,
跳轉指令的實質是將跳轉地址重新寫回PC。
例:下圖所示為雙總線結構機器的數據通路,IR為指令寄存器,PC為程序計數器(具有自增功能),M為主存(受R/W信號控制),AR為地址寄存器,DR為數據緩沖寄存器,ALU由加、減控制信號覺得完成何種操作,控制信號G控制的是一個門電路,另外,線上標注有小圓圈表示有控制信號,例中yi表示y寄存器的輸入控制信號,R1o為寄存器R1的輸出控制信號,未標字符的線為直通線,不受控制

1)ADD R2,R0指令完成(R0)+(R2)->R0的功能操作,畫出其指令周期流程題,假設該指令地址已放入PC中,並列出相應的微操作控制信號序列。
答:指令周期包含取指令和執行指令
取指令:指令地址在PC中,(需要PC中的指令地址送到地址寄存器中)PCo G ARi
到達AR相當於到了地址總線,經過地址總線傳給存儲器
加讀控制信號,CPU把內存中的內容讀先進去到緩存寄存器(DR)
是指令將指令送往指令寄存器:DRo B總線 G A總線 IRi 寫入指令寄存器
譯碼
R0的內容送到x R0o B總線 G Xi
R2的內容送到Y R2o B總線 G Yi
只連送到ALU 控制信號+
結果存入R0 R0到B總線通過經過G送到R0
2)SUB R2 R3

例三、某計算機字長16位,采用16位定長指令字結果,部分數據通路結構如圖所示,圖中所有控制信號為1時表示有效,為0時表示無效,例如控制信號MDRInE為1表示允許數據從DB打入MDR,MDRin為1表示允許數據從內總線打入MDR,假設MAR的輸出一直處於使能狀態
加法指令ADD (R1) ,R0的功能為(R0)+((R1))->(R1)即將R0中的數據與R1的內容所指主存單元的數據相加,並將結果送入導R1的內容所指主存單元中保存。

下表給出了上述指令取值和譯碼階段每個街拍(時鍾周期)的功能和有效控制信號,請按表中描述方式用表格列出指令執行階段每個節拍的功能和有效控制信號
| 時鍾 | 功能 | 有效控制信號 |
| C1 | MAR<-(PC) | PCout MARin |
| C2 | MDR<-M(MAR) PC<-(PC)+1 | MemR MDRinE PC+1 |
| C3 | IR<-(MDR) | MDRout IRin |
| C4 | 指令譯碼 | 無 |
解:分析
1.數據通路組成(運算器 存儲器 總線 指令系統 cpu)
2、指令周期 CPU周期 時鍾周期
3、機器指令ADD(R1) ,R0的含義:(R0)+((R1)) (R1)
4、指令周期流程圖設計
5、指令執行階段控制信號列表



二、時序信號的作用和體制
時序信號:CPU中一個類似作息時間的東西,使計算機可以准確、迅速、有條不紊的工作。
機器一旦被啟動,即CPU開始取指令並執行指令時,操作控制器就利用定時脈沖的順序和不同的脈沖間隔,有條理。有節奏的指揮機器的動作,規定在這個脈沖導來時做什么,在那個脈沖到來時做什么,給計算機各部分提供工作所需的時間標志。
三、控制器的功能和工作原理
微程序控制器:把操作控制信號編寫成微指令,放到只讀存儲器中(控制存儲器),當機器運行時
一條一條取出這些微指令,從而產生全機鎖徐的各種操作控制信號,使相應的部件執行所規定的操作。
1.微命令和微操作
數字計算機:控制部件(控制器) 執行部件(運算器 存儲器 外設)
微命令:控制部件通過控制線向執行部件發出的各種控制命令
微操作:執行部件接受微命令后所進行的操作
控制部件與執行部件通過控制線和反饋信息進行聯系。
控制部件 -》控制線導執行部件
執行部件-》反饋線導控制部件
執行部件通過反饋線向控制部件反應操作情況,以便控制部件通過根據執行部件的狀態來下達新的微命令,這叫狀態測試
相容性微操作:同事或在同一個CPU周期內可以並行執行的微操作
互斥性微操作:不能同事或不在同一個CPU周圍內可以並行執行的微操作
2、微指令和微程序
微指令:在機器的一個CPU周期中,一組實現一點操作功能的微命令的組合
微程序:實現一條機器指令功能的許多條微指令組成的序列
一條機器指令=1個微程序
程序-》指令=微程序{微指令 {微命令 }->微操作}
微指令的基本格式:

3、機器指令和微指令的關系
一會取機器指令,一會兒取微指令,他們之間什么關系?
答:一條機器指令對應一個微程序,這個微程序是由若干條微指令序列組成的,因此一條機器指令的功能是由若干條微指令組成的序列來實現的,簡言之。一條機器指令鎖完成的操作划分成若干條微指令來完成,由微指令進行解釋和執行。
4、微命令編碼
1)直接表示法
特點是操作控制字段中的每一位代表一個微命令。這種方法的優點是簡單直觀,其輸出直接用於控制。缺點是微指令字較長,因而使控制存儲器容量較大。
2)編碼表示法
編碼表示法是把一組相斥的微命令信號組成一個小組(即一個字段),然后通過小組姨媽期讀每一個微命令信號進行譯碼,譯碼輸出作為操作控制信號,其微指令結構如下圖
與自己控制法相比,字譯碼控制法克使微指令字大大縮短,但由於增加譯碼電路,使微程序的執行速度稍稍減慢。
目前在微程序控制器設計中,字段直接譯碼法使用較普遍。

采用字段譯碼的編碼方法,可以用較小的二進制信息位表示較多的微命令信號。
n位二進制編碼能表示2的n次方-1條微指令。 剩下的一個表示什么都不發
3)混合表示法
這種方法是把直接表示法和字段編碼法混合使用,以便能綜合考慮指令字長、靈活性、執行微程序素的等方面的要求
另外,在微指令中還可附設一個常數字段,改常數可用作操作數送入ALU運算,也可作為計數器初值來控制微程序循環次數。
5、微地址的形成方法
微指令執行的順序控制問題,實際上是如何確定下一條微指令的地址問題,通常,產生后繼微地址有兩種方法
1)計數器方法
這種方法同用程序計數器來產生極其指令地址的方法類似
在順序執行微指令時,后繼微地址現行微地址加上一個增量來產生。
2)多路轉移方式
一條微指令具有多個轉移分支的能力稱為多路轉移
在多路轉移方式中,當微程序不產生分支時,后繼微地址直接由微指令的順序控制字段給出
6、微指令格式
微指令的編譯方法是決定微指令格式的主要因素,微指令的格式大體分為兩類:水平型微指令和垂直型微指令
1)水平型微指令
一次能定義並執行多個並行操作微命令的微指令稱為水平型微指令。其一般格式如下:
| 控制字段 | 判別測試字段 | 下地址 |
按照控制字段的編碼方法不同,水平型微指令分為3種:全水平型(不譯法)微指令,字段譯碼法水平型微指令以及直接和譯碼相混合的水平型微指令。
2)垂直型微指令
微指令中設置微操作碼字段,采用微操作碼編譯法,由未操作嗎規定微指令的功能,稱為垂直型微指令。
結構類似於機器指令的結構,他有操作碼,在一條微指令中有1-2個微操作命令,每條微指令的功能簡單,因此,實現一條機器指令的微程序要比水平型微指令編寫的微程序長的多
它是采用較長的微程序結果去換取較短的微指令結構。
eg:4條垂直微指令的微指令格式,設微指令字長為16位,微操作碼3位。
寄存器-寄存器傳送型微指令
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 源寄存器編址 | 目標寄存器編址 | 其他 | |||||||||||||
功能是將源寄存器數據送目標寄存器,13-15是源操作碼,源寄存器和目標寄存器編址各5位,可指定31個寄存器。
例一、

答:1)控制存儲器的容量要包含所有微指令,其位長是微指令的長度
轉移條件是4個,每個條件是1位,所以判別測試字段是4位
能夠全部轉移,所以下地址字段應該可以找到控存中的512個存儲單元都能找到 所以下地址字段是9位
整個微指令是48位,所以微命令字段是35位
2)
例二、
例三、某計算機的控制器采用微程序控制方式,微命令中的操作控制字段采用字段直接編碼法,共有32個微命令,構成5個互斥類,分別包含7 3 12 5 6個微命令,則操作控制字段至少有(C)
3+2+4+3+3
A 5 B6 C 15 D 33
例四、某計算機采用微程序控制器,共有32條指令,公共的取指令微程序包含2條微指令,各指令對應的微程序平均由4條微程序組成,采用斷定法(下置字段法)確定下條微指令的地址,則微指令中下址字段的位數至少是(C)
A 5 B 6 C 8 D 9
答:4*32=128條微指令 再加公共的2個是130,要保證下地址字段能找到所有的單元要8位 2的8次方
tips:
一條微指令存放在控制器的一個控存單元中
微程序控制器屬於CPU的一部分
取指令是控制器固有的功能,不需要在操作碼控制下進行
在微程序控制器中,形成微程序入口地址的是:機器指令的操作碼字段
在組合邏輯控制器中,微操作控制信號的形成主要與指令譯碼信號和時鍾信號有關
若采永微程序控制方式,uPC不可以取代PC(因為uPC只是只在微程序中指向下一條微指令地址的寄存器,所以他並不可能知道這段微程序執行完畢之后下一條指令是什么)
大題:2017年

答:RISC采用的是固定的指令格式,
1)因為M的指令長短不一,不符合RISC的指令特點,所以采用的是CISC。
2)f1的機器代碼占96B,因為f1的第一條指令“push ebp”所在的虛擬地址為00401020H,最后一條指令ret所在的虛擬地址為0040107FH,所以f1的機器指令代碼長度為0040107F-00401020+1=60H=96個字節
3)CF=1,cmp指令實現i與n-1的比較功能,進行的是減法運算,在執行f1(0)的時候n=0,當i=0時,i=00000000H,並且n-1=FFFFFFFFH,因此,當之前第20條指令的時候,在補碼加/減運算器中執行0減FFFFFFFFH的操作,即00000000H+00000000H+1=00000001H,此時進位輸出C=0;減法運算的借位標記CF=C異或1=1
4)f2中不能使用sh1指令實現power*2,因為sh1指令用來將一個整數的所有有效位作為一個整體左移,而f2中的變量power是float型的,其機器數中不包含最高有效位數,但包含了階碼部分,將其作為一個整體左移時並不能實現乘2的功能,因而f2中不能用sha指令實現power*2,浮點數運算比整型運算要復制,耗時也較多
