计算机组成原理——课程设计
《計算機組成原理》
課程設(shè)計
?
一、目的和要求
深入了解計算機各種指令的執(zhí)行過程,以及控制器的組成,指令系統(tǒng)微程序設(shè)計的具體知識,進一步理解和掌握動態(tài)微程序設(shè)計的概念;完成微程序控制的特定功能計算機的指令系統(tǒng)設(shè)計和調(diào)試。
二、實驗環(huán)境
1.??? TEC-2機一臺
2.??? 電腦一臺
3.??? TEC-2模擬軟件一套
三、具體內(nèi)容
1.分析TEC-2機的功能部件組成,分析TEC-2機支持的指令格式等。
(一)AM2901芯片的內(nèi)部結(jié)構(gòu)和芯片的引腳信號
AM2901是位片結(jié)構(gòu),每片內(nèi)僅有4位線路,內(nèi)部組成包括:
1.4位的ALU,可以實現(xiàn)8種運算功能,每一位上的2個輸入端數(shù)據(jù)分別用R和S表示,8種功能分別是R+S,S-R,R-S 3種算術(shù)運算,R∧S,R∨S,/R∧S,R⊕S,R⊙S 5種邏輯運算。這8種功能的選擇控制,用外部送入的3位編碼值I5~3實現(xiàn)的。ALU還有Cn+4、F、OVR、和F=0000 4位狀態(tài)信息,并能接收最低位的一個進位輸入信號Cn,ALU還給出了超前進位信號/G和/P。
2.16個4位的通用寄存器組,用R0-R15表示,和一個4位的Q寄存器。通用寄存器組為雙端口讀出和單端口控制寫入的運行方式,而且運算后的結(jié)果經(jīng)一個移位器實現(xiàn)寫入。Q寄存器本身具有左、右移位功能且能接收ALU的運算結(jié)果。左右移位時,就有移出、移入信號RAM3、RAM0、Q3、Q0 4個信號。
3.該信片能接收外部送入的4位數(shù)據(jù)D3-0,并輸出4位的數(shù)據(jù)Y3-0。Y3-0可以是通用寄存器A端口上的輸出或ALU的運算結(jié)果F,并且輸出允許控制信號/OE的控制,盡在/OE為低時,Y3-0才有輸出。
4.ALU的兩個輸入端R和S分別可以接收D輸入、A端口或邏輯0數(shù)據(jù),和A端口、B端口、Q寄存器或邏輯0數(shù)據(jù)。AM2901器件選用了12種組合的8種,即A_Q,A_B,O_Q,0_B,0_A,D_A,D_Q和D_0 8種組合,并用外部送來的3位控制碼I2-0選擇。
5.AM2901采用另外3位外部送來的控制信號I8-6,一是選擇向外部送出的數(shù)據(jù)的來源,二是選擇內(nèi)部的通用寄存器組和Q寄存器是否接收和如何接收數(shù)據(jù)寫入。
6.在AM2901芯片內(nèi)有16個通用寄存器R0-R15,R0-R3、R7-R15共13個寄存器作為通用寄存器供用戶使用,R4-R63個寄存器分別作為SP、PC、IP。正常情況下,不能把這3個寄存器當作通用寄存器使用。
?
?
(二)AM2901芯片引腳信號
1.D3-D0:外部送給AM2901的數(shù)據(jù)信號
2.Y3-Y0:AM2901向外送出的數(shù)據(jù)信號
3.A、B地址:選擇通用寄存器組種的源與目的寄存器,當A和B同值時,被選中的同一個寄存器中的內(nèi)容將被同時送到A、B兩個數(shù)據(jù)輸出端口。
4.I8-I0:外部送來的3組3位控制信號,分別選擇AM2901對數(shù)據(jù)結(jié)果的處理方案、ALU執(zhí)行的運算功能、ALU接收的操作數(shù)來源。
?
?
(三)TEC-2機的控制器組成
指令寄存器IR:用于存放當前正在執(zhí)行的指令內(nèi)容。
程序計數(shù)器PC:PC是用運算器通用寄存器組中的寄存器R5實現(xiàn)的,程序計數(shù)器PC用于存放內(nèi)存單元地址,
指令指針寄存器IP:IP是用運算器通用寄存器組中的寄存器R6實現(xiàn)的,IP用于存放當前正在執(zhí)行的機器指令其指令代碼所在的內(nèi)存單元地址。
7片LS6116隨機讀寫的存儲器芯片組成的56位字長的微程序控制存儲器,用于存放TEC-2機的微程序。其內(nèi)容在剛加電時不定,加電后將首先從2片ROM中讀出固化的、用于實現(xiàn)53條機器指令的微程序,稍加組織后寫入這一控制存儲器,這一過程稱為裝入微碼。裝入完成后,將從監(jiān)控程序的零地址執(zhí)行指令,完成TEC-2機的啟動過程。之后,可以用LDMC指令向控制存儲器寫入新的微程序,實現(xiàn)新的機器指令。
微指令寄存器PLR由7片8位的寄存器芯片(6片LS374和1片LS273)組成,用于存放當前微指令的內(nèi)容。
?
(四)為AM2910提供輸入地址信號的配套線路
由兩片LS2716ROM芯片組成的MAPROM,它可以將指令寄存器中的操作碼變?yōu)橐欢挝⒊绦虻娜肟诘刂贰?/p>
由1片LS125和LS244組成的接受內(nèi)部總線的IB9-0信號的選擇門電路,把由水平板上的開關(guān)提供的微指令地址送入AM2910的地址輸入端。
由1片LS125和微指令寄存器的PLR55-48組成的一組地址輸入,把當前微指令中的后續(xù)地址B55-46送入AM2910的地址輸入端。
這三組信號均為10位寬,且為互斥關(guān)系,分別由/MAP、/VECT和/PL加以選通。
?
(五)AM2910芯片
1.功能:正確形成下一條微指令的地址,以保證微程序正確、高效地執(zhí)行。
2.組成:AM291包括一個四輸入的多路地址選擇器,用來選擇寄存器/計數(shù)器(R),直接輸入(D),微程序計數(shù)器(μPC)或微堆棧(F)中的一個作為下一條微指令的地址。
3.寄存器/計數(shù)器由12個D型觸發(fā)器組成。當它用作寄存器時,主要用于保存一個微地址,用以實現(xiàn)微程序分支;當它用作計數(shù)器時,具有減一功能,主要用于控制微程序的循環(huán)次數(shù),若裝入的初值為N,則可執(zhí)行N+1次。
4.微程序計數(shù)器由12位增量器和12位寄存器組成。 當增量器的進位輸入C1為高電平時,多路器的輸出Y加1后裝入μPC,用于實現(xiàn)微程序的順序執(zhí)行;當C1為低電平時,多路器的輸出Y直接裝入μPC,用于實現(xiàn)同一條微指令的多次執(zhí)行。
5.微堆棧是由5字×12位的寄存器堆和微堆棧指針μSP組成,主要用于保存微子程序調(diào)用的返回地址和微程序循環(huán)的首地址。微堆棧指針μSP總是指向最后一次壓入的數(shù)據(jù)。因此,執(zhí)行微程序循環(huán)時,允許不執(zhí)行彈出操作而直接訪問微堆棧的棧頂。當堆棧中的數(shù)據(jù)達到5個時,發(fā)出堆棧已滿信號(/FULL=0)。這時,任何壓入操作都將覆蓋掉棧頂?shù)臄?shù)據(jù)。
?
?
(六)微指令格式
每條微指令由56位組成,從高到低各位標記為B55-B0,分為13個字段。
?
B55-B46的10位微碼是下地址字段;
B55,B44備用;
B43-B40位CI3-1,用于給出AM2910芯片的16中命令碼的編號;
B39-37、36分別為3位的SCC和1位的SC,給出AM2910芯片的條件判斷信號/CC的選擇碼,用于保證微指令的條件轉(zhuǎn)移等;
B35位備用;
B34-32位SST,控制標志寄存器的寫入;
B31、B27、B23位為/MI0,REQ和/WE,用于控制內(nèi)存的讀寫、外設(shè)接口的讀寫,以及微碼的裝入。
B30-B28位為MI8-6,用于選擇運算結(jié)果存入的寄存器,以及Y輸出的選擇;
B26-B24位為MI5-3,用于選擇進行何種算術(shù)或邏輯運算;
B22-B20位為MI2-0,用于選擇R和S端的數(shù)據(jù)輸入;
B19-B16位為A口地址;
B15-B12位為B口地址;
B11-B10位為SCi,控制最低位進位;
B9-B8位為SSH,形成移位信號;
B7位為A口地址選通信號;
B6-B4位為DC1,控制向IB總線的發(fā)送內(nèi)容;
B3位為B口選通地址;
B2-B0位為DC2,選擇接收的寄存器。
?
?
(七)自行設(shè)計新指令的微程序段
MEM的內(nèi)容是當前地址寄存器AR所存的地址單元的內(nèi)容。
寄存器Q的內(nèi)容可以是立即數(shù),也可以是地址。
11條未定義的機器指令的6位操作碼已定,最低兩位可用于選擇C、Z、V、S四個標志位作為判別條件。
11條未定義的機器指令具有對應(yīng)的微程序段的入口地址,如D4對應(yīng)的是100H,D8對應(yīng)的是110H。
裝入新指令的微碼有兩種方法,一是通過水平板上的開關(guān)與按鍵直接撥入,二是在程序中用LDMC指令實現(xiàn)自動裝入。
新指令在每次TEC-2機重新加電后,至少得重新裝入一次對應(yīng)的微碼;僅在裝入相應(yīng)微碼后,新指令才能執(zhí)行。
?
2.使用TEC-2仿真軟件進行微指令級的設(shè)計和調(diào)試,完成微程序控制的特定功能計算機的指令設(shè)計。
?
選定指令格式、操作碼,設(shè)計如下指令:
?
基于上圖進行下列指令說明:
例:
?
2.1
指令格式:D8××,ADDR1,ADDR2,?? 三字指令(控存入口110H)
功能:??? [ADDR1]=[ADDR2] -[ADDR1]
?
畫出微指令流程圖
?
微指令詳細設(shè)計:
PC->AR,PC+1->PC:???? 0000 0E00 A0B5 5402?? 為讀取第1個操作數(shù)的地址做準備
MEM -> AR, MEM->R7:? 0000 0E00 30F0 7002?? 將指令地址送AR(ADDR1),R7寄存器
MEM->Q:????????????? 0000 0E00 00F0 0000?? 將內(nèi)存單元中的數(shù)據(jù)送入Q寄存器
PC->AR,PC+1->PC:???? 0000 0E00 A0B5 5402?? 為讀取第2個操作數(shù)的地址做準備
MEM->AR:???????????? 0000 0E00 10F0 0002?? 將指令地址送AR(ADDR2)
MEM-Q->Q: ?????????? ?0000 0E01 02E0 0000?? ADDR2-ADDR1=ADDDR1
R7->AR:????????????? 0000 0E00 9047 0002?? 把ADDR1的地址R7送入AR中
Q→MEM,CC#=0,3#,A4H:? 0029 0300 1020 0010?? 將結(jié)果送入ADDR1中
?
?
pc指向addr2之后,如何把計算的結(jié)果值重新送回addr1。先把addr1的地址保存在R7寄存器中。要存入結(jié)果的時候,把R7中的內(nèi)容送到AR中。
?
?
?
0?? 0??? 0??? E??? 0??? 0??? A???? 0??? B??? 5??? 5??? 4???? 0??? 2
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 000 | 1 010 | 0 000 | 1 011 | 0101 | 0101 | 01 00 | 0 000 | 0 010 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? F->B??? +S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不操作?
?
DC2 :在本條微碼中,地址寄存器接收,故 DC2 為 010
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:使用了寄存器 R5 ,即程序計數(shù)器 PC
A 口:使用了寄存器 R5 ,即程序計數(shù)器 PC
MI2-0 :此時 ALU 的 R 端輸入為 0 , S 端輸入為 B
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 +1 功能
BI8-6 :有返回值,且返回值返回至 B ,而 Y 的輸出選擇為 A
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處不操作,故取 10X
SST :未用狀態(tài),故為 000
備用位為 0
SC? ????未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
(2) ?MEM -> AR, MEM->R7:0000 0E00 30F0 7002
?
0?? 0??? 0??? E??? 0??? 0??? 3???? 0??? F??? 0??? 7??? 0???? 0??? 2
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 000 | 0 011 | 0 000 | 1 111 | 0000 | 0111 | 00 00 | 0 000 | 0 010 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? F->B??? +S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?存儲器讀
?
DC2 :在本條微碼中,地址寄存器接收,故 DC2 為 010
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:使用了寄存器 R7 ,即程序計數(shù)器 PC
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 D (外部數(shù)據(jù)), S 端輸入為 0
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 D+0
BI8-6 :有返回值,且返回值返回至 B ,而 Y 的輸出選擇為 F
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處不操作,故取 10X
SST :未用狀態(tài),故為 000
備用位為 0
SC? ????未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
?
(3) ?MEM→Q:0000?0E00 00F0 0000
?
0?? 0??? 0??? E??? 0??? 0??? 0???? 0??? F??? 0??? 0??? 0???? 0??? 0
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 000 | 0 000 | 0 000 | 1 111 | 0000 | 0000 | 00 00 | 0 000 | 0 000 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? F->B ???+S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,寄存器未接收,故 DC2 為 000
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:未使用寄存器,故為 0
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 D (外部數(shù)據(jù)), S 端輸入為 0
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 D+0
BI8-6 :有返回值 0 ,而 Y 的輸出選擇為 F?? ,故此處為 000
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處為讀出內(nèi)存單元內(nèi)容,并將其送入 Q 寄存器,故取 001
SST :未用狀態(tài),故為 000
備用位為 0
SC???? 未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
(4) ?PC→AR,PC+1→PC:0000?0E00 A0B5 5402
?
與第一條指令相同
?
(5) ?MEM→AR:0000?0E00 10F0 0002
?
0?? 0??? 0??? E??? 0??? 0??? 1???? 0??? F??? 0??? 0??? 0???? 0??? 2
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 000 | 0 001 | 0 000 | 1 111 | 0000 | 0000 | 00 00 | 0 000 | 0 010 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? 無 ??????+S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,地址寄存器接收,故 DC2 為 010
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:未使用寄存器,故為 0
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 D (外部數(shù)據(jù)), S 端輸入為 0
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 D+0
BI8-6 :沒有返回值,? Y 的輸出選擇為 F
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處為存儲器讀,故取 001
SST :未用狀態(tài),故為 000
備用位為 0
SC??? 未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
(6) ?MEM-Q->Q: ? 0000 0E01 02E0 0000
?
?
0?? 0??? 0??? E??? 0??? 1??? 0???? 2??? E??? 0??? 0??? 0???? 0??? 0
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 001 | 0 000 | 0 010 | 1 111 | 0000 | 0000 | 00 00 | 0 000 | 0 000 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? F->B ???S-R? ???MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,寄存器未接收,故 DC2 為 000
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:未使用寄存器,故為 0
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 D (外部數(shù)據(jù)), S 端輸入為 Q
MI5-3 :運算功能選擇為“ S-R ”,即執(zhí)行 Q-D
BI8-6 :有返回值 0 ,而 Y 的輸出選擇為 F?? ,故此處為 000
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處為讀出內(nèi)存單元內(nèi)容,將其與 Q 寄存器中內(nèi)容相加,故取 001
SST :狀態(tài)保存,故為 001
備用位為 0
SC????? 未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
(7) ??R7->AR: 0000 0E00 9047 0002
?
0?? 0??? 0??? E??? 0??? 0??? 9???? 0??? 4??? 7??? 0??? 0???? 0??? 2
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 000 | 1 001 | 0 000 | 0 100 | 0111 | 0000 | 00 00 | 0 000 | 0 010 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? 無 ??????+S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,地址寄存器接收,故 DC2 為 010
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:使用了寄存器 R7 ,即程序計數(shù)器 PC
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 0 , S 端輸入為 A
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 +1 功能
BI8-6 :有返回值,且返回值返回至 B ,而 Y 的輸出選擇為 F
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處不操作,故取 10X
SST :未用狀態(tài),故為 000
備用位為 0
SC????? 未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
?
(8) ?Q→MEM,CC#=0, 3#, A4H:0029?0300 1020 0010
?
2?? 9??? 0??? 3??? 0? ??0??? 1???? 0??? 2??? 0??? 0??? 0???? 1??? 0
| 0010 | 1001 | 0000 | 0011 | 000 0 | 0 000 | 0 001 | 0 000 | 0 010 | 0000 | 0000 | 00 00 | 0 001 | 0 000 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? 無 ??????+S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,,寄存器未接收,故 DC2 為 000
DC1 :向 IB 總線發(fā)送運算器的指令,故 DC1 為 001
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:未使用寄存器,故為 0
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 0 , S 端輸入為 Q
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 0+Q
BI8-6 :沒有返回值, Y 的輸出選擇為 F
MI0# , REQ , WE# :用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處為將 Q 寄存器中值寫入內(nèi)存單元,故取 000
SST :未用狀態(tài),故為 000
備用位為 0
SC? ??此處低電平有效,故取 SCC 為 000 , SC 為 0
SCC
Am2901 命令: 3# 命令,即為條件轉(zhuǎn)移,低電平有效,有效時,轉(zhuǎn)入下地址
下地址:此命令為最后一條命令,若指令跳轉(zhuǎn),將轉(zhuǎn)入 A4H ,即下地址為 29
?
2.2
(2)把用絕對地址表示的內(nèi)存單元ADDR2中的內(nèi)容傳送至地址為ADDR1的內(nèi)存單元中保存。
指令格式:E0××,ADDR1,ADDR2,三字指令(控存入口130H)
功能:??? [ADDR1]←[ADDR2]
?
?
畫出微指令流程圖
?
微指令詳細設(shè)計:
PC->AR,PC+1->PC:???? 0000 0E00 A0B5 5402?? 為讀取第1個操作數(shù)的地址做準備
MEM -> AR, MEM->R7:? 0000 0E00 30F0 7002?? 將指令地址送AR(ADDR1),R7寄存器
PC->AR,PC+1->PC:???? 0000 0E00 A0B5 5402?? 為讀取第2個操作數(shù)的地址做準備
MEM->AR:???????????? 0000 0E00 10F0 0002?? 將指令地址送AR(ADDR2)
MEM->Q: ???????????? ?0000 0E00 00F0 0000?? 將內(nèi)存單元中的數(shù)據(jù)送入Q寄存器
R7->AR:????????????? 0000 0E00 9047 0002?? 把ADDR1的地址R7送入AR中
Q→MEM,CC#=0,3#,A4H:? 0029 0300 1020 0010?? 將結(jié)果送入ADDR1中
?
(1) ?PC→AR,PC+1→PC:0000? 0E00? A0B5 ?5402
?
0?? 0??? 0??? E??? 0??? 0??? A???? 0??? B??? 5??? 5??? 4???? 0??? 2
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 000 | 1 010 | 0 000 | 1 011 | 0101 | 0101 | 01 00 | 0 000 | 0 010 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? F->B??? +S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????不操作?
?
DC2 :在本條微碼中,地址寄存器接收,故 DC2 為 010
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:使用了寄存器 R5 ,即程序計數(shù)器 PC
A 口:使用了寄存器 R5 ,即程序計數(shù)器 PC
MI2-0 :此時 ALU 的 R 端輸入為 0 , S 端輸入為 B
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 +1 功能
BI8-6 :有返回值,且返回值返回至 B ,而 Y 的輸出選擇為 A
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處不操作,故取 10X
SST :未用狀態(tài),故為 000
備用位為 0
SC? ????未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
(2) ?MEM -> AR, MEM->R7:0000 0E00 30F0 7002
?
0?? 0??? 0??? E??? 0??? 0??? 3???? 0??? F??? 0??? 7??? 0???? 0??? 2
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 000 | 0 011 | 0 000 | 1 111 | 0000 | 0111 | 00 00 | 0 000 | 0 010 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? F->B??? +S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ?????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,地址寄存器接收,故 DC2 為 010
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:使用了寄存器 R7 ,即程序計數(shù)器 PC
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 D (外部數(shù)據(jù)), S 端輸入為 0
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 D+0
BI8-6 :有返回值,且返回值返回至 B ,而 Y 的輸出選擇為 F
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處不操作,故取 10X
SST :未用狀態(tài),故為 000
備用位為 0
SC? ????未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
?
(3) ?PC→AR,PC+1→PC:0000?0E00 A0B5 5402
與第一條指令相同
(4) ?MEM→AR:0000?0E00 10F0 0002
?
0?? 0??? 0??? E??? 0??? 0??? 1???? 0??? F??? 0??? 0??? 0???? 0??? 2
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 000 | 0 001 | 0 000 | 1 111 | 0000 | 0000 | 00 00 | 0 000 | 0 010 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? 無 ??????+S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,地址寄存器接收,故 DC2 為 010
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:未使用寄存器,故為 0
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 D (外部數(shù)據(jù)), S 端輸入為 0
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 D+0
BI8-6 :沒有返回值,? Y 的輸出選擇為 F
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處為存儲器讀,故取 001
SST :未用狀態(tài),故為 000
備用位為 0
SC??? 未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
(5) ?MEM→Q:0000?0E00 00F0 0000
?
0?? 0??? 0??? E??? 0??? 0??? 0???? 0??? F??? 0??? 0??? 0???? 0??? 0
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 000 | 0 000 | 0 000 | 1 111 | 0000 | 0000 | 00 00 | 0 000 | 0 000 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? F->B ???+S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,寄存器未接收,故 DC2 為 000
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:未使用寄存器,故為 0
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 D (外部數(shù)據(jù)), S 端輸入為 0
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 D+0
BI8-6 :有返回值 0 ,而 Y 的輸出選擇為 F?? ,故此處為 000
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處為讀出內(nèi)存單元內(nèi)容,并將其送入 Q 寄存器,故取 001
SST :未用狀態(tài),故為 000
備用位為 0
SC???? 未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
(6) ??R7->AR: 0000 0E00 9047 0002
?
0?? 0??? 0??? E??? 0??? 0??? 9?? ??0??? 4??? 7??? 0??? 0???? 0??? 2
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 000 | 1 001 | 0 000 | 0 100 | 0111 | 0000 | 00 00 | 0 000 | 0 010 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? 無 ??????+S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,地址寄存器接收,故 DC2 為 010
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:使用了寄存器 R7 ,即程序計數(shù)器 PC
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 0 , S 端輸入為 A
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 +1 功能
BI8-6 :有返回值,且返回值返回至 B ,而 Y 的輸出選擇為 F
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處不操作,故取 10X
SST :未用狀態(tài),故為 000
備用位為 0
SC????? 未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
?
(7) ?Q→MEM,CC#=0, 3#, A4H:0029?0300 1020 0010
?
2?? 9??? 0??? 3??? 0??? 0??? 1???? 0??? 2? ??0??? 0??? 0???? 1??? 0
| 0010 | 1001 | 0000 | 0011 | 000 0 | 0 000 | 0 001 | 0 000 | 0 010 | 0000 | 0000 | 00 00 | 0 001 | 0 000 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? 無 ??????+S?? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,,寄存器未接收,故 DC2 為 000
DC1 :向 IB 總線發(fā)送運算器的指令,故 DC1 為 001
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:未使用寄存器,故為 0
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 0 , S 端輸入為 Q
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 0+Q
BI8-6 :沒有返回值, Y 的輸出選擇為 F
MI0# , REQ , WE# :用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處為將 Q 寄存器中值寫入內(nèi)存單元,故取 000
SST :未用狀態(tài),故為 000
備用位為 0
SC??? 此處低電平有效,故取 SCC 為 000 , SC 為 0
SCC
Am2901 命令: 3# 命令,即為條件轉(zhuǎn)移,低電平有效,有效時,轉(zhuǎn)入下地址
下地址:此命令為最后一條命令,若指令跳轉(zhuǎn),將轉(zhuǎn)入 A4H ,即下地址為 29
?
2.3
(3)轉(zhuǎn)移指令。判斷兩個通用寄存器內(nèi)容是否相等,若相等則轉(zhuǎn)移到指定目的地址,否則順序執(zhí)行。
指令格式:E5 DR SR,DISP 雙字指令(控存入口140H,? DISP為相對轉(zhuǎn)移地址偏移量)
功能:??? if? DR=SR goto? IP+DISP? else 順序執(zhí)行。
?
畫出微指令流程圖
?
?
?
?
微指令詳細設(shè)計:
?
?
SR-DR: ???0000 0E01 9190 0088?? 兩者相減,若相等CC#=Z=1
PC→AR,PC+1→PC,CC#=CND:???? 0029 03E0 A0B5 5402? 判斷相等,相等跳轉(zhuǎn)IP+DISP,否則順序執(zhí)行。
MEM+R6→PC:?? ?0029 03E0 20D6 5000? :把一個內(nèi)存賦值
?
?
(1) ?SR-DR: ???0000 0E01 9190 0088
?
0?? 0??? 0??? E??? 0??? 1??? 9???? 1??? 9??? 0??? 0??? 0???? 8??? 8
| 0000 | 0000 | 0000 | 1110 | 000 0 | 0 001 | 1 001 | 0 001 | 1 001 | 0000 | 0000 | 00 00 | 1 000 | 1 000 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? 無 ??????S-R? ??MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,寄存器未接收,故 DC2 為 000
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :用指令給 ALU 的 R 端賦值,故為 1
SB :用指令給 ALU 的 S 端賦值,故為 1
SSH :未移位
SCI :未進位
B 口:未使用寄存器,故為 0
A 口:未使用寄存器,故為 0
MI2-0 :此時 ALU 的 R 端輸入為 A , S 端輸入為 B
MI5-3 :運算功能選擇為“ S-R ”,即執(zhí)行 SR-DR
BI8-6 :沒有返回值, Y 的輸出選擇為 F
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處不進行任何操作,故取 10X
SST :狀態(tài)保存,故為 001
備用位為 0
?SC? ??未用條件碼,故為 0
SCC
Am2901 命令: 14# 命令,即為順序執(zhí)行
下地址:由于順序執(zhí)行,并未使用下地址,故下地址為 0
?
(2) ?PC→AR,PC+1→PC,CC#=CND:???? 0029 03E0 A0B5 5402
?
2?? 9??? 0??? 3??? E??? 0??? A???? 0??? B??? 5??? 5??? 4???? 0??? 2
| 0010 | 1001 | 0000 | 0011 | 111 0 | 0 000 | 1 010 | 0 000 | 1 011 | 0101 | 0101 | 01 00 | 0 000 | 0 010 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? F->B ????+S ????MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ???????????????????????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,地址寄存器接收,故 DC2 為 010
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:使用了寄存器 R5 ,即程序計數(shù)器 PC
A 口:使用了寄存器 R5 ,即程序計數(shù)器 PC
MI2-0 :此時 ALU 的 R 端輸入為 0 , S 端輸入為 B
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 +1 功能
BI8-6 :有返回值,且返回值返回至 B ,而 Y 的輸出選擇為 A
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處不操作,故取 10X
SST :未用狀態(tài),故為 000
備用位為 0
SC? ??此處根據(jù) SR-DR 數(shù)值是否為 0 判斷 SR 與 DR 是否相等,條件是由指令給出的,所以這里 SCC
SCC? ?為 111 ,而 CC 低電平有效,故 SC 為 0,
Am2901 命令: 3# 命令,即為條件轉(zhuǎn)移,低電平有效,有效時,轉(zhuǎn)入下地址
下地址:此命令為最后一條命令,若指令跳轉(zhuǎn),將轉(zhuǎn)入 A4H ,即下地址為 29
?
(3) ?MEM+R6→PC:??? 0029 03E0 20D6 5000
?
2?? 9??? 0??? 3??? E??? 0??? 2???? 0??? D??? 6??? 5??? 0???? 0??? 0
| 0010 | 1001 | 0000 | 0011 | 111 0 | 0 000 | 0 010 | 0 000 | 1 101 | 0110 | 0101 | 00 00 | 0 000 | 0 000 |
下地址????? ???順序執(zhí)行 SCC SC ?備用SST? F->B ????+S ????MI2-0 ?A口?? ?B口 ?SCI SSH ?SA DC1 SB DC2
? ?????????????????????? ??????????????????????存儲器讀
?
DC2 :在本條微碼中,,寄存器未接收,故 DC2 為 000
DC1 :未向 IB 總線發(fā)送控制,故 DC1 為 000
SA :作 Am2901
SB :作 Am2901
SSH :未移位
SCI :未進位
B 口:使用了寄存器 R5 ,即程序計數(shù)器 PC ,故為 0101
A 口:使用了寄存器 R6 ,即程序計數(shù)器 PC
MI2-0 :此時 ALU 的 R 端輸入為 D( 外部數(shù)據(jù) ) , S 端輸入為 Q
MI5-3 :運算功能選擇為“ +S ”,即執(zhí)行 D+0
BI8-6 :有返回值,且返回值返回至 Q ,而 Y 的輸出選擇為 F
MI0# , REQ , WE# :三位用于控制內(nèi)外數(shù)據(jù)總線的讀和寫,此處不操作,故取 10X
SST :未用狀態(tài),故為 000
備用位為 0
SC? ??此處根據(jù) SR-DR 數(shù)值是否為 0 判斷 SR 與 DR 是否相等,條件是由指令給出的,所以這里 SCC
SCC? ?為 111 ,而 CC 低電平有效,故 SC 為 0,
Am2901 命令: 3# 命令,即為條件轉(zhuǎn)移,低電平有效,有效時,轉(zhuǎn)入下地址
下地址:此命令為最后一條命令,若指令跳轉(zhuǎn),將轉(zhuǎn)入 A4H ,即下地址為 29
?
3.測試程序設(shè)計及調(diào)試。
3.1
選定指令操作碼,指令格式,設(shè)計一條指令,其功能是把用絕對地址表示的內(nèi)存單元B中的內(nèi)容減去內(nèi)存單元A中的內(nèi)容相加,結(jié)果存放在A單元中。
?
把用絕對地址表示的內(nèi)存單元ADDR2中的內(nèi)容與內(nèi)存單元ADDR1中的內(nèi)容相減,結(jié)果存于內(nèi)存單元ADDR1中。
指令格式:D8××,ADDR1,ADDR2,?? 三字指令(控存入口110H)
功能:??? [ADDR1]=[ADDR2] -[ADDR1]
?
(1)用“E”命令輸入微碼
在命令行提示符狀態(tài)下輸入:
E900
?
屏幕上將顯示:
0900:
?
之后繼續(xù)輸入:
0000 0E00 A0B5 5402
0000 0E00 30F0 7002
0000 0E00 00F0 0000
0000 0E00 A0B5 5402
0000 0E00 10F0 0002
0000 0E01 02E0 0000
0000 0E00 9047 0002
0029 0300 1020 0010
?
(2)用“A”命令輸入加載微碼的程序
在命令行提示符狀態(tài)下輸入:
A800
屏幕將顯示:
0800:
?
之后繼續(xù)輸入:
MOV R1,900?? ;微碼在內(nèi)存中的首地址
MOV R2,8????? ;共8條指令
MOV R3,110?? ;微碼在微控存中的首地址
LDMC???????? ;加載微碼指令
RET
?
(3)用“G”命令運行加載微碼的程序
在命令行提示符狀態(tài)下輸入:
G800
?
(4)用“A”命令輸入程序
在命令行提示符狀態(tài)下輸入:
A820
?
屏幕將顯示:
0820
?
之后繼續(xù)輸入:
MOV R0,0015
MOV [A00],R0
MOV R0,0046
MOV [A01],R0
NOP
NOP
NOP
RET
?
(5)用“E”命令輸入新指令
在命令行提示符狀態(tài)下輸入:
E828
?
屏幕將顯示:
0828
?
之后繼續(xù)輸入:
D800 0A00 0A01
?
(6)用“G”命令運行程序
在命令行提示符狀態(tài)下輸入:
G820
?
(7)用“D”命令察看運行結(jié)果
在命令行提示符狀態(tài)下輸入:
DA00
?
以下為檢驗過后的截圖:
?
?
?
分析:將立即數(shù)0015存入內(nèi)存單元0A00(ADDR1),將立即數(shù)0046存入內(nèi)存單元0A01(ADDR2);0046-0015=0031即(ADDR2-ADDR1),利用R7所存內(nèi)存單元地址0A00,使結(jié)果存入了0A00,即(ADDR2-ADDR1=ADDR1)。驗證所寫微程序正確。
?
?
3.2
選定指令操作碼,指令格式,設(shè)計一條指令,其功能是把用絕對地址表示的內(nèi)存單元B中的內(nèi)容存放在A單元中。
?
?
把用絕對地址表示的內(nèi)存單元ADDR2中的內(nèi)容傳送至地址為ADDR1的內(nèi)存單元中保存。
指令格式:E0××,ADDR1,ADDR2,三字指令(控存入口130H)
功能:??? [ADDR1]←[ADDR2]
?
?
(1)用“E”命令輸入微碼
在命令行提示符狀態(tài)下輸入:
E900
屏幕上將顯示:
0900:
之后繼續(xù)輸入:
?
0000 0E00 A0B5 5402
0000 0E00 30F0 7002
0000 0E00 A0B5 5402
0000 0E00 10F0 0002
0000 0E00 00F0 0000
0000 0E00 9047 0002
0029 0300 1020 0010
?
(2)用“A”命令輸入加載微碼的程序
在命令行提示符狀態(tài)下輸入:
A800
?
屏幕將顯示:
0800:
?
之后繼續(xù)輸入:
MOV R1,900?? ;微碼在內(nèi)存中的首地址
MOV R2,7????? ;共7條指令
MOV R3,130?? ;微碼在微控存中的首地址
LDMC???????? ;加載微碼指令
RET
?
(3)用“G”命令運行加載微碼的程序
在命令行提示符狀態(tài)下輸入:
G800
?
(4)用“A”命令輸入程序
在命令行提示符狀態(tài)下輸入:
A820
?
屏幕將顯示:
0820
?
之后繼續(xù)輸入:
MOV R0,0015
MOV [A00],R0
MOV R0,0046
MOV [A01],R0
NOP
NOP
NOP
RET
?
(5)用“E”命令輸入新指令
在命令行提示符狀態(tài)下輸入:
E828
?
屏幕將顯示:
0828
?
之后繼續(xù)輸入:
E010 0A00 0A01
?
(6)用“G”命令運行程序
在命令行提示符狀態(tài)下輸入:
G820
?
(7)用“D”命令察看運行結(jié)果
在命令行提示符狀態(tài)下輸入:
DA00
?
?
?
?
?
分析:與上題相似,將立即數(shù)0015存入內(nèi)存單元0A00(ADDR1),將立即數(shù)0046存入內(nèi)存單元0A01(ADDR2);利用R7所存內(nèi)存單元地址0A00,將0A01的內(nèi)容存入了0A00,即(ADDR2-)ADDR1)。驗證所寫微程序正確。
?
?
?
3.3
(3)轉(zhuǎn)移指令。判斷兩個通用寄存器內(nèi)容是否相等,若相等則轉(zhuǎn)移到指定目的地址,否則順序執(zhí)行。
指令格式:E5 DR SR,DISP 雙字指令(控存入口140H,? DISP為相對轉(zhuǎn)移地址偏移量)
功能:?? ?if? DR=SR goto? IP+DISP? else 順序執(zhí)行。
?
DR!=SR不相等情況時:
用“E”命令輸入微碼
在命令行提示符狀態(tài)下輸入:
E900
?
屏幕上將顯示:
0900:
?
之后繼續(xù)輸入:
?
0000 0E01 9190 0088
0029 03E0 A0B5 5402
0029 03E0 20D6 5000
在命令行提示符狀態(tài)下輸入:
A800
?
屏幕將顯示:
0800:
?
之后繼續(xù)輸入:
MOV R1,900?? ;微碼在內(nèi)存中的首地址
MOV R2,3????? ;共7條指令
MOV R3,140?? ;微碼在微控存中的首地址
LDMC???????? ;加載微碼指令
RET
?
?
(3)用“G”命令運行加載微碼的程序
在命令行提示符狀態(tài)下輸入:
G800
?
(4)用“A”命令輸入程序
在命令行提示符狀態(tài)下輸入:
A820
?
屏幕將顯示:
0820
?
之后繼續(xù)輸入:
MOV R1,0023
MOV R2,0026
NOP
NOP
MOV R1,0026
RET
?
(5)用“E”命令輸入新指令
在命令行提示符狀態(tài)下輸入:
E824
?
屏幕將顯示:
0824
?
之后繼續(xù)輸入:
E512 ?0828
?
(6)用“G”命令運行程序
在命令行提示符狀態(tài)下輸入:
G820
?
(7)用“R”命令察看運行結(jié)果
在命令行提示符狀態(tài)下輸入:
R
?
?
?
?
分析:DR=SR不相等時,順序執(zhí)行。立即數(shù)R1=0023與R2=0026不相等,則順序執(zhí)行R1=0026
?
DR=SR相等情況時:
?
用“E”命令輸入微碼
在命令行提示符狀態(tài)下輸入:
E900
?
屏幕上將顯示:
0900:
?
之后繼續(xù)輸入:
?
0000 0E01 9190 0088
0029 03E0 A0B5 5402
0029 03E0 20D6 5000
在命令行提示符狀態(tài)下輸入:
A800
?
屏幕將顯示:
0800:
?
之后繼續(xù)輸入:
MOV R1,900?? ;微碼在內(nèi)存中的首地址
MOV R2,3????? ;共7條指令
MOV R3,140?? ;微碼在微控存中的首地址
LDMC???????? ;加載微碼指令
RET
?
?
(3)用“G”命令運行加載微碼的程序
在命令行提示符狀態(tài)下輸入:
G800
?
(4)用“A”命令輸入程序
在命令行提示符狀態(tài)下輸入:
A820
?
屏幕將顯示:
0820
?
之后繼續(xù)輸入:
MOV R1,0023
MOV R2,0023
NOP
NOP
MOV R1,0026
RET
?
(5)用“E”命令輸入新指令
在命令行提示符狀態(tài)下輸入:
E824
?
屏幕將顯示:
0824
?
之后繼續(xù)輸入:
E512 ?0828
?
(6)用“G”命令運行程序
在命令行提示符狀態(tài)下輸入:
G820
?
(7)用“R”命令察看運行結(jié)果
在命令行提示符狀態(tài)下輸入:
R
?
?
?
?
分析:當R1(SR)存儲0023H、R2(DR)存儲0023H時,即DR=SR時,程序跳轉(zhuǎn)至828H(ADDR),所以未運行MOV R1,0026,所以程序運行后R1仍為0023H。而PC=IP+DISP.
?
4.寫出自己在小組中承擔的任務(wù)及發(fā)揮的作用。
一人獨立完成
四.實驗心得
?? ?本次課程設(shè)計,前面雖然不清楚微程序編寫,但是根據(jù)實驗三微程序的加法以及網(wǎng)上資料和書中的知識,才了解怎樣設(shè)計指令。
?? ?此次課程設(shè)計,通過對TEC-2仿真模擬機進行測試,通過3個微指令編寫,更加深入了解了各種指令的執(zhí)行過程。同時在編寫微指令時,也需要了解計算機的匯編語言,所以本次課設(shè),與匯編語言和計算機組成原理相互聯(lián)系,進而進行更深層次的學習。
?? ?實驗相對麻煩,在設(shè)計過程中,同學之間進行交流,遇到困難相互解決,有各自的想法。所以本次課設(shè)不僅鞏固了微程序設(shè)計的方法與思想,同時也學習了同學之間的交流以及互相幫助。
?
參考資料:
百度文庫-信息提示
《計算機組成原理》課程設(shè)計---微程序設(shè)計_山海一念的博客-CSDN博客_計算機組成原理微程序設(shè)計
《計算機組成原理》課程設(shè)計報告——TEC-2實驗系統(tǒng)——微程序設(shè)計_無限迭代中......-CSDN博客
臭咸魚的缺氧瓶
[計算機組成] TEC-2 課程設(shè)計 微碼說明_ckxkexing的博客-CSDN博客
?
總結(jié)
以上是生活随笔為你收集整理的计算机组成原理——课程设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欧拉函数模板
- 下一篇: 题目1362:左旋转字符串(Move!M