(實驗五 CPU組成與指令周期實驗)
課程 計算機組成原理實驗
實驗日期 2015 年 12 月 8 日
一、實驗目的
1.將微程序控制器同執行部件(整個數據通路)聯機,組成一台模型計算機。
2.用微程序控制器控制模型計算機的數據通路。
3.通過TEC-5執行由8條機器指令組成的簡單程序,掌握機器指令與微指令的關系,牢固建立計算機的整機概念。
二、實驗內容
1. 實驗電路圖1
2.實驗任務
(1)將下表5-1的程序按機器指令格式手工匯編成二進制機器代碼(要求預習時完成)。
表5-1
內存地址 |
機器指令 |
機器代碼(十六進制表示) |
00H |
ADD R1, R0 |
01H |
01H |
JC R3 |
5CH |
02H |
STA R1, [R2] |
39H |
03H |
LDA R2, [R2] |
4AH |
04H |
AND R2, R0 |
22H |
05H |
SUB R2, R3 |
1EH |
06H |
OUT R2 |
78H |
07H |
STP |
60H |
(2) 將實驗任務(1)中的程序代碼用控制台指令存入內存中,並根據程序的需要,用數碼開關SW7-SW0設置通用寄存器的數據和內存數據。要求使用兩組寄存器數據,第一組寄存器數據在執行 ADD R1,R0指令時產生進位,第二組寄存器數據在執行ADD R1,R0指令時不產生進位,以觀察同一程序的不同執行流程。
(3)用單拍(DP)方式執行一遍程序,記錄最后得到的四個寄存器的數據,以及由STA指令存入RAM中的數據,與理論分析值比較。執行時注意觀察各個指示燈的顯示,以跟蹤程序執行的詳細過程(可觀察到每一條微指令的執行過程)。
(4)用連續方式再次執行程序。這種情況相當於計算機正常的工作。程序執行到STP指令后自動停機。讀出寄存器中的運算結果,與理論值比較。
參考數據:
假設第一組數據:
預置寄存器數據R0=35H,R1=43H,R2=10H,R3=07H。存儲器10H單元的內容為55H。
假設第二組數據:
預置寄存器數據R0=86H,R1=88H,R2=10H,R3=07H。存儲器10H單元的內容為55H。
三、實驗環境
軟件: WIN XP、串口調試助手軟件
硬件:1.微機 1台
2.TEC-5實驗系統 1台
3.邏輯測試筆 1支
4.編程器 公用
四、實驗步驟和實驗結果
(一)對機器指令系統組成的簡單程序進行手工譯碼的結果如下:
內存地址 |
機器指令 |
機器代碼(十六進制表示) |
00H |
ADD R1, R0 |
01H |
01H |
JC R3 |
5CH |
02H |
STA R1, [R2] |
39H |
03H |
LDA R2, [R2] |
4AH |
04H |
AND R2, R0 |
22H |
05H |
SUB R2, R3 |
1EH |
06H |
OUT R2 |
78H |
07H |
STP |
60H |
(二)接線表:
控制器 |
LDIR |
PC+1 |
LDPC# |
AR+1 |
LDAR# |
LDDR1 |
LDDR2 |
LDRi |
數據通路 |
LDIR |
PC+1 |
LDPC# |
AR+1 |
LDAR# |
LDDR1 |
LDDR2 |
LDRi |
控制器 |
SW_BUS# |
Rs_BUS# |
ALU_BUS# |
RAM_BUS# |
CER# |
CEL# |
數據通路 |
SW_BUS# |
Rs_BUS# |
ALU_BUS# |
RAM_BUS# |
CER# |
CEL# |
控制器 |
LR/W# |
Cn# |
M |
S0 |
S1 |
S2 |
S3 |
數據通路 |
LR/W# |
Cn# |
M |
S0 |
S1 |
S2 |
S3 |
控制器 |
進位C |
IR7 |
IR6 |
IR5 |
IR4 |
數據通路 |
進位C |
IR7 |
IR6 |
IR5 |
IR4 |
數據通路 |
IR3 |
IR2 |
IR1 |
IR0 |
IR1 |
IR0 |
數據通路 |
RS1 |
RS0 |
RD1 |
RD0 |
WR1 |
WR0 |
控制器 |
TJ |
時序電路 |
TJ |
(三)打開TEC-5電源。
(四)用串口調試助手對控存EEPROM進行改寫。
首先需要用串口調試助手對控存EEPROM進行改寫:
TEC-5中的4片EEPROM(CM0-CM3,U35-U38)是控存,里面裝有TEC-5微程序的微代碼。由於它是電可擦除可編程的EEPROM,因此可以實現不用將CM0-CM3從插座上取出就能實現對其編程的目的。為此我們在TEC-5上用1片單片機芯片89S52(U39)和一些附加電路實現了不用拔出CM0-CM3就能對其編程,從而改寫這些EEPROM中微代碼的目的。89S52中包含一個監控程序,它負責通過串行口和PC機通訊,向PC機發出提示信息、接收命令和數據,並根據接收到的命令(0,1,2,3)決定將隨后收到的64個數據寫入指定的EEPROM。命令0、1、2、3指定寫那個器件,0對應CM0,1對應CM1,2對應CM2,3對應CM3。64個字節的數據將寫入指定EEPROM的前64個單元(地址00H-3FH)。
注意波特率為1200波特。
CM0-CM3的下載步驟:
(1)在TEC-5關閉電源的情況下,用出廠時提供的RS232串口線將TEC-5實驗儀的串口與主機的串口連接起來。TEC-5上的編程開關撥到“1編程”位置。將串口調試助手程序打開,設置好參數。打開電源。按一下復位鍵RESET,使控制存儲器處於接收信息狀態,此時TEC-5中微地址與微碼的指示燈全亮。(注意:在數據傳送過程中這些指示燈會閃爍)。
(2)軟件的數據接收區此時會顯示‘WAITING FOR COMMAND ...’,如下圖4。按“清空重填”按鈕,然后請在數據發送窗口寫入‘0’,按‘手動發送’按鈕,將命令‘0’發送給89S52,表示通知它要寫CM0文件了。
(3)此時數據接收區會出現‘PLEASE CHOOSE A CM FILE’,如下圖5所示,請通過按鈕‘選擇發送文件’,選擇要寫入二進制文件(如CM0.BIN),文件必須是“BIN”格式,長度為64字節。然后點擊‘發送文件’按鈕,將文件發往89S52。89S52接收數據並對CM0編程,然后它讀出CM0的數據和從PC機接收到數據比較,不管正確與否,89S52都向PC機發出結果信息,在串口調試助手軟件數據接收窗口顯示出來。如果發送成功,則結果如下圖6所示。
圖4 數據接收區等待命令窗口
圖5 選擇發送文件窗口
圖6 數據接收區發送成功窗口
(4)等待文件發送完畢的提示(注意看軟件的最底下的狀態行和數據接收區),請注意看數據接收區的命令提示,重復(2)-(3)步驟,分別輸入命令‘1’、‘2’、‘3’,同時,應分別選擇CM1、CM2、CM3文件,對相應的EEPROM編程。CM1、CM2、CM3全部編程完后,按RESET按鈕結束編程。最后將TEC-5上的編程開關撥到正常位置。
注意:對CM0、CM1、CM2、CM3的編程順序無規定,只要在發出器件號后緊跟着發送該器件的編程數據(文件)即可。例如,可以按CM3、CM2、CM0、CM1的順序編程。編程也可以只對一個或者幾個EEPROM編程,不一定對4個EEPROM全部編程,只要編程結束后按RESET按鈕結束編程,最后將TEC-5上的編程開關撥到正常位置即可
(五)存程序代碼。
設置通用寄存器R0、R1、R2和R3的第一組值及存儲器相關單元的數據。
設本組的寄存器數據R0=35H,R1=43H,R2=10H,R3=07H。存儲器10H單元的內容為55H。選擇這組數據的目的是執行ADD R1,R0指令時不產生進位C,從而在執行JC R3指令時不產生跳轉,而是順序執行。
設置通用寄存器R0、R1、R2和R3的值
在本操作中,置R0=35H,R1=43H,R2=10H,R3=07H
(1)令DP=0,DB=0,使系統處於連續運行狀態。令SWC=0,SWB=1,SWA=1,使系統處於寫寄存器狀態WRF。按CLR#按鈕,使實驗系統處於初始狀態。
(2)在SW7—SW0上設置一個存儲器地址,該存儲器地址供設置通用寄存器使用。即該地址設置為0FFH。按一次QD按鈕,將0FFH寫入左端口地址寄存器AR。
(3)在SW7—SW0上設置00H,作為通用寄存器R0的寄存器號。按一次QD按鈕,將00H寫入指令寄存器IR。
(4)在SW7—SW0設置35H,按一次QD按鈕,將35H寫入IR指定的R0寄存器。
(5)寫入R1、R2、R3方法與寫入R0類似,即重復(3)和(4)。
具體寫寄存器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
SW7-SW0 |
按QD將0FFH寫入AR |
||||
0 0 |
(0 1 1) |
0FFH |
|||||||
|
|||||||||
寄存器號 |
SW7-SW0 |
執行 |
結果 |
SW7-SW0 |
執行結果 |
||||
(R0)00H |
0000 0000 |
按QD按鈕 |
00H寫入IR |
35H |
將35H寫入IR指定的R0寄存器 |
||||
(R1)01H |
0000 0001 |
01H寫入IR |
43H |
將43H寫入IR指定的R0寄存器 |
|||||
(R2)02H |
0000 0010 |
02H寫入IR |
10H |
將10H寫入IR指定的R0寄存器 |
|||||
(R3)03H |
0000 0011 |
03H寫入IR |
07H |
將07H寫入IR指定的R0寄存器 |
設置完R0-R3的值后,用讀寄存器控制台操作檢查一下寫入內容是否正確。
具體讀寄存器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
SW7-SW0 |
按QD將0FFH寫入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器號 |
SW7-SW0 |
執行 |
執行結果 |
||||
(R0)00H |
0000 0000 |
按QD按鈕 |
DBUS上顯示35H |
||||
(R1)01H |
0000 0100 |
DBUS上顯示43H |
|||||
(R2)02H |
0000 1000 |
DBUS上顯示10H |
|||||
(R3)03H |
0000 1100 |
DBUS上顯示07H |
向存儲器中輸入程序機器代碼和數據
本操作中,我們從00地址開始存8個機器代碼:01H,5CH,39H,4AH,22H,1EH,78H,60H。在10H單元存入55H,作為10H單元的初值,以檢查LDA和STA兩條指令的作用。
(1)令DP = 0,DB = 0,使實驗系統處於連續運行狀態。令SWC = 0、SWB = 0、SWA = 1,使實驗系統處於寫雙端口存儲器工作方式WRM。按CLR#按鈕,使實驗系統處於初始狀態。
(2)置SW7—SW0為00H,按QD按鈕,將00H寫入左端口地址寄存器AR。
(3)置SW7—SW0 為01H,按QD按鈕,將01H寫入存儲器00H單元。AR自動加1,變為01H。
(4)置SW7—SW0 為5CH,按QD按鈕,將5CH寫入存儲器01H單元。AR自動加1,變為02H。
(5)將數據39H、4AH、22H、1EH、78H、60H分別寫入存儲器02H單元、03H單元、04H單元、05H、06H單元、07H單元的方法與上述類似。
(6)按CLR#按鈕,使實驗系統恢復到初始狀態。
(7)置SW7—SW0為10H,按QD按鈕,將10H寫入左端口地址寄存器AR。
(8)置SW7—SW0 為55H,按QD按鈕,將55H寫入存儲器10H單元。AR自動加1,變為11H。
具體寫存儲器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
|||
0 0 |
(0 0 1) |
|||||
|
||||||
(內存單元) |
(機器代碼)SW7-SW0 |
執行 |
執行結果 |
|||
(00H) |
00H |
按QD按鈕 |
將00H寫入左邊地址寄存器AR |
|||
(00H) |
01H |
將01H寫入存儲器00H單元,AR自動加1,變為01H |
||||
(01H) |
5CH |
將5CH寫入存儲器01H單元,AR自動加1,變為02H |
||||
(02H) |
39H |
將39H寫入存儲器02H單元,AR自動加1,變為03H |
||||
(03H) |
4AH |
將4AH寫入存儲器03H單元,AR自動加1,變為04H |
||||
(04H) |
22H |
將22H寫入存儲器04H單元,AR自動加1,變為05H |
||||
(05H) |
1EH |
將1EH寫入存儲器05H單元,AR自動加1,變為06H |
||||
(06H) |
78H |
將78H寫入存儲器06H單元,AR自動加1,變為07H |
||||
(07H) |
60H |
將60H寫入存儲器07H單元,AR自動加1,變為08H |
||||
按CLR#使系統處於初始狀態 |
||||||
(內存單元) |
(機器代碼)SW7-SW0 |
執行 |
執行結果 |
|||
(10H) |
10H |
按QD按鈕 |
將10H寫入左邊地址寄存器AR |
|||
|
55H |
將55H寫入存儲器10H單元,AR自動加1,變為11H |
設置完存儲器的程序和數據后,用存儲器控制台操作檢查一下寫入的內容是否正確。
具體讀存儲器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
內存單元 |
SW7-SW0 |
執行 |
執行結果 |
|||
AR7-AR0顯示 |
DBUS7-DBUS0顯示 |
|||||
00H |
00H |
按QD按鈕 |
00H |
01H |
||
01H |
- |
01H |
5CH |
|||
02H |
- |
02H |
39H |
|||
03H |
- |
03H |
4AH |
|||
04H |
- |
04H |
22H |
|||
05H |
- |
05H |
1EH |
|||
06H |
- |
06H |
78H |
|||
按CLR#使系統處於初始狀態 |
||||||
10H |
10H |
按QD按鈕 |
10H |
55H |
||
|
|
|
|
●用單拍(DP)方式執行一遍程序。
置SWC=0,SWB=0,SWA=0,DP=1,DB=0,使實驗系統處於單拍運行狀態。置SW7—SW0=00H,使程序從地址00H開始執行。按CLR#按鈕,使實驗系統處於初始狀態,然后一次一次按QD按鈕,使程序一拍一拍的執行。
在單拍執行過程中,首先要隨時監測AR、PC、µA5—µA0和IR的值,以判定程序執行到何處,正在執行哪條指令和微指令。對照微程序流程圖,可以判斷出微指令的地址和正在進行的微操作。
程序執行的結果如下:
初值:R0=35H,R1=43H,R2=10H,R3=07H。存儲器10H單元的內容為55H。
(1)ADD R1,R0
執行結果 R0=35H,R1=78H,R2=10H,R3=07H。存儲器10H單元的內容為( 55 )H。無進位C。
(2)JC R3
執行結果 R0=35H,R1=78H,R2=10H,R3=07H。存儲器10H單元的內容為( 55 )H。PC為(02)H。進位C不變。
(3)STA R1,[R2]
執行結果 R0=35H,R1=78H,R2=( 10 )H,R3=07H。存儲器10H單元的內容為( 78 )H。
(4)LDA R2,[R2]
執行結果 R0=35H,R1=78H,R2=(78)H,R3=07H。存儲器10H單元的內容為(78)H。
(5)AND R2,R0
執行結果 R0=35H,R1=78H,R2=(30)H,R3=07H。存儲器10H單元的內容為(78)H。
(6)SUB R2,R3
執行結果 R0=35H,R1=78H,R2=( 29 )H,R3=07H。存儲器10H單元的內容為(78)H。進位C為1。
(7)OUT R2
執行結果 R0=35H,R1=78H,R2=(29)H,R3=07H。存儲器10H單元的內容為( 78 )H。可在數據總線DBUS指示燈上觀察到( 29 )H。
(8)STP
執行結果 R0=( 35 )H,R1=(78)H,R2=( 29 )H,R3=(07)H。存儲器10H單元的內容為( 78 )H。
最后的執行結果可通過控制台的讀寄存器操作和讀存儲器操作觀察到,在觀察最后結果之前,首先應按CLR#按鈕,使實驗系統處於初始狀態。
具體讀寄存器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
SW7-SW0 |
按QD將0FFH寫入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器號 |
SW7-SW0 |
執行 |
執行結果 |
||||
(R0)00H |
0000 0000 |
按QD按鈕 |
DBUS上顯示35H |
||||
(R1)01H |
0000 0100 |
DBUS上顯示78H |
|||||
(R2)02H |
0000 1000 |
DBUS上顯示29H |
|||||
(R3)03H |
0000 1100 |
DBUS上顯示07H |
具體讀存儲器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
內存單元 |
SW7-SW0 |
執行 |
執行結果 |
|||
AR7-AR0顯示 |
DBUS7-DBUS0顯示 |
|||||
10H |
10H |
按QD按鈕 |
10H |
78H |
●用連續方式執行一遍程序
(1)由於上面的單拍執行程序,已破壞了寄存器R1、R2和存儲器10單元的內容(程序沒有破壞),因此需要重新設置寄存器R1、R2和存儲器10單元的值。初值:R0=35H,R1=43H,R2=10H,R3=07H。存儲器10H單元的內容為55H。
重新寫寄存器R1、R2的值的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
SW7-SW0 |
按QD將0FFH寫入AR |
||||
0 0 |
(0 1 1) |
0FFH |
|||||||
|
|||||||||
寄存器號 |
SW7-SW0 |
執行 |
結果 |
SW7-SW0 |
執行結果 |
||||
(R1)01H |
0000 0001 |
|
01H寫入IR |
43H |
將35H寫入IR指定的R1寄存器 |
||||
(R2)02H |
0000 0010 |
02H寫入IR |
10H |
將10H寫入IR指定的R2寄存器 |
重新寫存儲器10單元的值的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
|||
0 0 |
(0 0 1) |
|||||
|
||||||
(內存單元) |
(機器代碼)SW7-SW0 |
執行 |
執行結果 |
|||
(10H) |
10H |
按QD按鈕 |
將10H寫入左邊地址寄存器AR |
|||
|
55H |
將55H寫入存儲器10H單元,AR自動加1,變為11H |
(2)置SWC=0,SWB=0,SWA=0,DP=0,DB=0,使實驗系統處於連續運行狀態。置SW7—SW0=00H,使程序從地址00H開始執行。按CLR#按鈕,使實驗系統處於初始狀態,然后按一次QD按鈕,則程序自動連續運行到地址為07H的STP指令。
執行結果 R0=( 35 )H,R1=(78)H,R2=( 29 )H,R3=(07)H。存儲器10H單元的內容為( 78 )H。
最后的執行結果可通過控制台的讀寄存器操作和讀存儲器操作觀察到,在觀察最后結果之前,首先應按CLR#按鈕,使實驗系統處於初始狀態。
具體讀寄存器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
SW7-SW0 |
按QD將0FFH寫入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器號 |
SW7-SW0 |
執行 |
執行結果 |
||||
(R0)00H |
0000 0000 |
按QD按鈕 |
DBUS上顯示35H |
||||
(R1)01H |
0000 0100 |
DBUS上顯示78H |
|||||
(R2)02H |
0000 1000 |
DBUS上顯示29H |
|||||
(R3)03H |
0000 1100 |
DBUS上顯示07H |
具體讀存儲器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
內存單元 |
SW7-SW0 |
執行 |
執行結果 |
|||
AR7-AR0顯示 |
DBUS7-DBUS0顯示 |
|||||
10H |
10H |
按QD按鈕 |
10H |
78H |
(六)存程序代碼,(如果前面4.的存入程序代碼不被破壞,就不要重新輸入)
設置通用寄存器R0、R1、R2和R3的第二組值及存儲器相關單元的數據。
設本組寄存器數據:R0=86H,R1=88H,R2=10H,R3=07H。存儲器10H單元的內容為55H。選擇這組數據的目的是執行ADD R1,R0指令時產生進位C,從而在執行JC R3指令時產生跳轉,而不是順序執行。
設置通用寄存器R0、R1、R2和R3的值
在本操作中,設R0=86H,R1=88H,R2=10H,R3=07H,
具體寫寄存器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
SW7-SW0 |
按QD將0FFH寫入AR |
||||
0 0 |
(0 1 1) |
0FFH |
|||||||
|
|||||||||
寄存器號 |
SW7-SW0 |
執行 |
結果 |
SW7-SW0 |
執行結果 |
||||
(R0)00H |
0000 0000 |
按QD按鈕 |
00H寫入IR |
86H |
將86H寫入IR指定的R0寄存器 |
||||
(R1)01H |
0000 0001 |
01H寫入IR |
88H |
將88H寫入IR指定的R0寄存器 |
|||||
(R2)02H |
0000 0010 |
02H寫入IR |
10H |
將86H寫入IR指定的R0寄存器 |
|||||
(R3)03H |
0000 0011 |
03H寫入IR |
07H |
將86H寫入IR指定的R0寄存器 |
設置完R0-R3的值后,用讀寄存器控制台操作檢查一下寫入內容是否正確。
具體讀寄存器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
SW7-SW0 |
按QD將0FFH寫入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器號 |
SW7-SW0 |
執行 |
執行結果 |
||||
(R0)00H |
0000 0000 |
按QD按鈕 |
DBUS上顯示86H |
||||
(R1)01H |
0000 0100 |
DBUS上顯示88H |
|||||
(R2)02H |
0000 1000 |
DBUS上顯示10H |
|||||
(R3)03H |
0000 1100 |
DBUS上顯示07H |
向存儲器中輸入程序機器代碼和數據。
本操作中,我們從00地址開始存8個機器代碼:01H,5CH,39H,4AH,22H,1EH,78H,60H。在10H單元存入55H。
具體寫存儲器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
|||
0 0 |
(0 0 1) |
|||||
|
||||||
(內存單元) |
(機器代碼)SW7-SW0 |
執行 |
執行結果 |
|||
(00H) |
00H |
按QD按鈕 |
將00H寫入左邊地址寄存器AR |
|||
(00H) |
01H |
將01H寫入存儲器00H單元,AR自動加1,變為01H |
||||
(01H) |
5CH |
將5CH寫入存儲器01H單元,AR自動加1,變為02H |
||||
(02H) |
39H |
將39H寫入存儲器02H單元,AR自動加1,變為03H |
||||
(03H) |
4AH |
將4AH寫入存儲器03H單元,AR自動加1,變為04H |
||||
(04H) |
22H |
將22H寫入存儲器04H單元,AR自動加1,變為05H |
||||
(05H) |
1EH |
將1EH寫入存儲器05H單元,AR自動加1,變為06H |
||||
(06H) |
78H |
將78H寫入存儲器06H單元,AR自動加1,變為07H |
||||
(07H) |
60H |
將60H寫入存儲器07H單元,AR自動加1,變為08H |
||||
按CLR#使系統處於初始狀態 |
||||||
(內存單元) |
(機器代碼)SW7-SW0 |
執行 |
執行結果 |
|||
(10H) |
10H |
按QD按鈕 |
將10H寫入左邊地址寄存器AR |
|||
|
55H |
將55H寫入存儲器10H單元,AR自動加1,變為11H |
設置完存儲器的程序和數據后,用讀存儲器控制台操作檢查一下寫入內容是否正確。
具體讀存儲器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
內存單元 |
SW7-SW0 |
執行 |
執行結果 |
|||
AR7-AR0顯示 |
DBUS7-DBUS0顯示 |
|||||
00H |
00H |
按QD按鈕 |
00H |
01H |
||
01H |
- |
01H |
5CH |
|||
02H |
- |
02H |
39H |
|||
03H |
- |
03H |
4AH |
|||
04H |
- |
04H |
22H |
|||
05H |
- |
05H |
1EH |
|||
06H |
- |
06H |
78H |
|||
按CLR#使系統處於初始狀態 |
||||||
10H |
10H |
按QD按鈕 |
10H |
55H |
- 用單拍(DP)方式執行一遍程序。
置SWC=0,SWB=0,SWA=0,DP=1,DB=0,使實驗系統處於單拍運行狀態。置SW7—SW0=00H,使程序從地址00H開始執行。按CLR#按鈕,使實驗系統處於初始狀態,然后一次一次按QD按鈕,使程序一拍一拍的執行。
在單拍執行過程中,首先要隨時監測AR、PC、µA5—µA0和IR的值,以判定程序執行到何處,正在執行哪條指令和微指令。對照微程序流程圖,可以判斷出微指令的地址和正在進行的微操作。程序執行的結果如下:
初值:R0=86H,R1=88H,R2=10H,R3=07H。存儲器10H單元的內容為55H。
(1)ADD R1,R0
執行結果 R0=(86 )H,R1=(0E)H,R2=(10)H,R3=( 07 )H。存儲器10H單元的內容為(55)H。有進位C。
(2)JC R3
執行結果 R0=(86)H,R1=(0E)H,R2=(10)H,R3=(07)H。存儲器10H單元的內容為(55)H。PC為(07)H。進位C不變。
(3)STP
執行結果 R0=(86)H,R1=( 0E )H,R2=(10 )H,R3=(07)H。存儲器10H單元的內容為(55)H,進位C為1。
最后的執行結果可通過控制台的讀寄存器操作和讀存儲器操作觀察到,在觀察最后結果之前,首先應按CLR#按鈕,使實驗系統處於初始狀態。
具體讀寄存器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
SW7-SW0 |
按QD將0FFH寫入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器號 |
SW7-SW0 |
執行 |
執行結果 |
||||
(R0)00H |
0000 0000 |
按QD按鈕 |
DBUS上顯示86H |
||||
(R1)01H |
0000 0100 |
DBUS上顯示0EH |
|||||
(R2)02H |
0000 1000 |
DBUS上顯示10H |
|||||
(R3)03H |
0000 1100 |
DBUS上顯示07H |
讀存儲器:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
內存單元 |
SW7-SW0 |
執行 |
執行結果 |
|||
AR7-AR0顯示 |
DBUS7-DBUS0顯示 |
|||||
10H |
10H |
按QD按鈕 |
10H |
55H |
●用連續方式執行一遍程序。
(1)由於上面的單拍執行程序,已破壞了寄存器R1內容(程序沒有破壞),因此需要重新設置寄存器R1的值。初值:R0=86H,R1=88H,R2=10H,R3=07H。存儲器10H單元的內容為55H。
寫寄存器R1的值:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
SW7-SW0 |
按QD將0FFH寫入AR |
||||
0 0 |
(0 1 1) |
0FFH |
|||||||
|
|||||||||
寄存器號 |
SW7-SW0 |
執行 |
結果 |
SW7-SW0 |
執行結果 |
||||
(R1)01H |
0000 0001 |
按QD按鈕 |
01H寫入IR |
88H |
將88H寫入IR指定的R1寄存器 |
(2)置SWC=0,SWB=0,SWA=0,DP=0,DB=0,使實驗系統處於連續運行狀態。置SW7—SW0=00H,使程序從地址00H開始執行。按CLR#按鈕,使實驗系統處於初始狀態,然后按一次QD按鈕,則程序自動連續運行到地址為07H的STP指令。
執行結果 R0=(86)H,R1=( 0E )H,R2=(10 )H,R3=(07)H。存儲器10H單元的內容為( 55 )H。
最后的執行結果可通過控制台的讀寄存器操作和讀存儲器操作觀察到,在觀察最后結果之前,首先應按CLR#按鈕,使實驗系統處於初始狀態。
具體讀寄存器的操作如下表所示:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
SW7-SW0 |
按QD將0FFH寫入AR |
||
0 0 |
(1 0 0) |
0FFH |
|||||
|
|||||||
寄存器號 |
SW7-SW0 |
執行 |
執行結果 |
||||
(R0)00H |
0000 0000 |
按QD按鈕 |
DBUS上顯示86H |
||||
(R1)01H |
0000 0100 |
DBUS上顯示0EH |
|||||
(R2)02H |
0000 1000 |
DBUS上顯示10H |
|||||
(R3)03H |
0000 1100 |
DBUS上顯示07H |
讀存儲器:
DP DB |
使系統處於連續狀態 |
SWC SWB SWA |
按CLR#使系統處於初始狀態 |
|||
0 0 |
(0 1 0) |
|||||
|
||||||
內存單元 |
SW7-SW0 |
執行 |
執行結果 |
|||
AR7-AR0顯示 |
DBUS7-DBUS0顯示 |
|||||
10H |
10H |
按QD按鈕 |
10H |
55H |
五、實驗結果與討論
(一)第一組數據的實驗結果:
在存完寄存器和存儲器數據,並通過讀取數據及指令以確保數據及指令無誤后,用單拍方式和連續方式執行程序,查看寄存器R0、R1、R2、R3及(10H)單元的值,如下所示:
最終通用寄存器和內存單元數據表(實驗結果表)
寄存器號 |
R0 |
R1 |
R2 |
R3 |
(10H) |
理論值 |
35H |
78 H |
29H |
07 H |
78H |
實驗值 |
35H |
78 H |
29H |
07 H |
78H |
實驗數據與理論數據相符。
(二)第二組數據的實驗結果:
在存完寄存器和存儲器數據,並通過讀取數據及指令以確保數據及指令無誤后,用單拍方式和連續方式執行程序,查看寄存器R0、R1、R2、R3及(10H)單元的值,如下所示:
最終通用寄存器和內存單元數據表(實驗結果表)
寄存器號 |
R0 |
R1 |
R2 |
R3 |
(10H) |
理論值 |
86H |
0E H |
10H |
07 H |
55H |
實驗值 |
86H |
0E H |
10H |
07 H |
55H |
實驗數據與理論數據相符。
六、思考題
請簡述設計模型計算機的步驟。
答:模型機設計具體步驟下:
1、 確定指令系統;
2、 規划設計整機邏輯;
3、 設計數據通路;
4、 設計控制器(以常規型微程序控制器為例);
a.設計時序電路;
b.最后確定指令周期;
c.畫出微程序流程圖,同時檢查設計的數據通路和控制器是否滿足1、指令系統的要求。
d.根據微程序流程圖化簡、歸並微信號;
e.設計微指令格式;
f.設計地址轉移邏輯;
g.若不滿足,則進行修改,返回到C進行修改;
h.根據流程圖編寫微代碼;
i.寫微代碼到控制存儲器,並檢查寫入代碼的正確性;
5、將數據通路與控制器聯機,組成一台模型計算機;
6、通過運行一段簡單的程序(應包括該機的所有指令系統),便可知道設計的正確性。不過程序運行前須通過控制台為所用的寄存器、內存單元提供必要的數據以及向內存送程序的機器代碼。
七、總結
(一) 本次實驗按時按量完成。
(二) 通過本次實驗我將微程序控制器同執行部件(整個數據通路)聯機,組成了一台模型計算機。並用微程序控制器控制模型計算機的數據通路。最后通過TEC-5執行由8條機器指令組成的簡單程序,掌握機器指令與微指令的關系,牢固建立了計算機的整機概念。
(三) 本次實驗將前面幾個實驗中的所有電路,包括運算器、存儲器、通用寄存器堆、微程序控制器等模塊組合在一起,構成一台簡單的模型機。因此,本實驗與前面的實驗相比,雖然會比較復雜些,但也是收獲最多的一個實驗。
(四) 在前面的實驗中,我們學生本身作為“控制器”,完成了對數據通路的控制。而在這次實驗中,數據通路的控制將交由微程序控制器來完成。TEC-5從內存中取出一條機器指令到執行指令結束的一個指令周期,是由微程序完成的,即一條機器指令對應一個微程序序列。
(五) 本次實驗起初多次出現存入寄存器的數據無法正確讀出的問題,經過反復排查與請教老師,發現是因為接線接觸不良的問題,接下來的幾次獨立試驗則十分注意接線的接觸問題,情況得到很好改善。
(六) 開始執行程序的時候,如果指令沒有按照應該有的順序執行,而是跳到下一條或者是其他條,則應該排查接線IR7-IR4的接觸是否良好。
(七) 若74LS181運算結果有的對,有的錯,可能是S3-S0中有的連線接觸不良。