宗德才 王康康
1(常熟理工學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院 江蘇 常熟 215500)2(江蘇科技大學(xué)數(shù)理學(xué)院 江蘇 鎮(zhèn)江 212003)
“計(jì)算機(jī)組成原理”課程是計(jì)算機(jī)相關(guān)專業(yè)的核心課程之一,學(xué)好該課程對(duì)于學(xué)生建立計(jì)算機(jī)系統(tǒng)整機(jī)概念和培養(yǎng)學(xué)生分析、設(shè)計(jì)計(jì)算機(jī)系統(tǒng)的能力至關(guān)重要[1]?!坝?jì)算機(jī)組成原理”是理論性和實(shí)踐性都很強(qiáng)的一門(mén)課程,其中的實(shí)踐實(shí)驗(yàn)環(huán)節(jié),是學(xué)好“計(jì)算機(jī)組成原理”課程的關(guān)鍵[2]。
文獻(xiàn)[3]設(shè)計(jì)了4位乘法指令與8位除4位的除法指令,文獻(xiàn)[4]設(shè)計(jì)了基于TEC-XP指令級(jí)、微體系級(jí)的仿真系統(tǒng)以及脫機(jī)運(yùn)算器、中斷嵌套和I/O通信三大部件實(shí)驗(yàn)的仿真軟件,文獻(xiàn)[5]、文獻(xiàn)[6]將EDA軟件Proteus應(yīng)用于教學(xué)實(shí)驗(yàn)中,文獻(xiàn)[4]、文獻(xiàn)[5]、文獻(xiàn)[6]方式的缺點(diǎn)是學(xué)生無(wú)法動(dòng)手操作,很難形成對(duì)計(jì)算機(jī)硬件的直觀理解,并且都未涉及乘除指令的實(shí)現(xiàn)。文獻(xiàn)[7]設(shè)計(jì)了一個(gè)8位模型機(jī),控制器包含了14條指令,但未包含乘法、除法等指令。文獻(xiàn)[8]設(shè)計(jì)了加法、取數(shù)、轉(zhuǎn)移等指令,但并未設(shè)計(jì)乘除指令。文獻(xiàn)[9]要求學(xué)生至少設(shè)計(jì)實(shí)現(xiàn)7條指令,但并未要求設(shè)計(jì)乘除指令。
目前,我校計(jì)算機(jī)組成原理實(shí)驗(yàn)教學(xué)內(nèi)容主要是基于清華大學(xué)計(jì)算機(jī)系研制的TEC-XP16計(jì)算機(jī)組成原理實(shí)驗(yàn)系統(tǒng)而開(kāi)展進(jìn)行的。與大多數(shù)高校一樣,該課程的實(shí)驗(yàn)內(nèi)容,還是停留在驗(yàn)證性實(shí)驗(yàn)階段,為了使學(xué)生更好掌握計(jì)算機(jī)的各個(gè)組成部件的工作原理,理解指令的執(zhí)行流程,系統(tǒng)地建立計(jì)算機(jī)整機(jī)概念,培養(yǎng)學(xué)生的設(shè)計(jì)、創(chuàng)新能力,需要開(kāi)發(fā)一些設(shè)計(jì)性實(shí)驗(yàn),如在CPU的控制器中擴(kuò)展一些新指令。
文獻(xiàn)[10]介紹了TH-union教學(xué)機(jī)微程序控制器部件實(shí)驗(yàn)的原理及實(shí)驗(yàn)步驟,屬于驗(yàn)證性實(shí)驗(yàn),沒(méi)有擴(kuò)展新指令。文獻(xiàn)[11]在TEC-2000教學(xué)機(jī)微程序控制器中設(shè)計(jì)實(shí)現(xiàn)了四條擴(kuò)展指令,NXOR DR,SR、SWRM DR,[SR]、ADTW DR與ADRM DR,[SR],并將擴(kuò)展的新指令用程序進(jìn)行了驗(yàn)證。文獻(xiàn)[12]在TEC-2000教學(xué)機(jī)微程序控制器中設(shè)計(jì)實(shí)現(xiàn)了兩條擴(kuò)展指令,NXOR DR,SR與SWRM DR,[SR],并將擴(kuò)展的新指令用程序進(jìn)行了驗(yàn)證。文獻(xiàn)[11]和文獻(xiàn)[12]在TEC-2000教學(xué)機(jī)微程序控制器中擴(kuò)展的指令都比較簡(jiǎn)單,每條擴(kuò)展指令只需要1~4條微指令即可實(shí)現(xiàn)。目前,國(guó)內(nèi)外還沒(méi)有研究在TEC-XP16教學(xué)機(jī)微程序控制器中擴(kuò)展較復(fù)雜指令,如乘法指令、除法指令的文獻(xiàn)。本文提出了一種在TEC-XP16教學(xué)機(jī)微程序控制器中設(shè)計(jì)MUL乘法指令與DIV除法指令的方法,所設(shè)計(jì)的MUL指令與DIV指令分別需要25條微指令和29條微指令組成的微程序來(lái)實(shí)現(xiàn)。然后,以擴(kuò)展MUL指令為例,詳細(xì)介紹了如何在控制器的源文件中添加擴(kuò)展指令的控制信號(hào)的邏輯表達(dá)式、編譯控制器的源文件、對(duì)MACH器件進(jìn)行編程、編寫(xiě)程序驗(yàn)證擴(kuò)展指令是否正確的整個(gè)過(guò)程。最后,我們以實(shí)驗(yàn)方式驗(yàn)證了所設(shè)計(jì)和實(shí)現(xiàn)的乘法指令與除法指令的功能。
微程序控制器的核心部件是控制存儲(chǔ)器,控制存儲(chǔ)器用于存放全部微程序。每一條機(jī)器指令對(duì)應(yīng)一個(gè)微程序,每個(gè)微程序由若干條微指令組成,每條微指令對(duì)應(yīng)一個(gè)或多個(gè)控制信號(hào)。微指令是以二進(jìn)制代碼形式表示的,每一位代表一個(gè)控制信號(hào),若某位為1,表示對(duì)應(yīng)的控制信號(hào)有效,若某位為0,表示對(duì)應(yīng)的控制信號(hào)無(wú)效。在程序執(zhí)行過(guò)程中,將逐條執(zhí)行每條指令對(duì)應(yīng)的每一條微指令,用微指令中的控制命令字段控制計(jì)算機(jī)各功能部件的運(yùn)行,并用微指令中的下地址字段形成后續(xù)微指令的地址[13]。
在TEC-XP16教學(xué)計(jì)算機(jī)中,微程序控制器與組合邏輯控制器的主要邏輯電路都是由一片MACH芯片實(shí)現(xiàn)的。微程序控制器由控制存儲(chǔ)器、微指令寄存器、映射指令操作碼為微指令地址的MAPROM、產(chǎn)生微指令是否轉(zhuǎn)移信號(hào)CC的條件判斷線路SCC GAL、實(shí)現(xiàn)微指令字中的下條微指令地址和MAPROM輸出的下條微指令地址二選一功能的線路、確定微指令執(zhí)行次序的Am2910芯片等部分組成[14]。
在TEC-XP16教學(xué)計(jì)算機(jī)中擴(kuò)展新指令時(shí),首先,要設(shè)計(jì)好新指令對(duì)應(yīng)的微程序,然后將設(shè)計(jì)好的組成微程序的所有微指令寫(xiě)入控制存儲(chǔ)器中。
在以前的教學(xué)機(jī)產(chǎn)品中,如TEC-2000教學(xué)機(jī)中,控制存儲(chǔ)器中的內(nèi)容是保存在ROM芯片中的,而在TEC-XP16教學(xué)計(jì)算機(jī)中,控制存儲(chǔ)器的內(nèi)容不是保存在ROM芯片中的,控制存儲(chǔ)器的內(nèi)容是用組合邏輯表達(dá)式表示的[14]。
在TEC-XP16教學(xué)機(jī)中擴(kuò)展指令過(guò)程中,首先,根據(jù)設(shè)計(jì)好的新指令對(duì)應(yīng)的微程序修改描述MACH芯片功能的ABEL語(yǔ)言源程序;然后將修改后的ABEL語(yǔ)言程序用ISP LEVER軟件編譯成.jed文件,接著將.jed文件下載到MACH芯片中;最后,在教學(xué)機(jī)上調(diào)試運(yùn)行包含擴(kuò)展指令的教學(xué)機(jī)程序。
在現(xiàn)有的TEC-XP16教學(xué)機(jī)中,描述MACH芯片功能的ABEL語(yǔ)言源程序同時(shí)實(shí)現(xiàn)了組合邏輯控制器與微程序控制器,但兩種控制器都只能執(zhí)行29條基本指令。本文在TEC-XP16教學(xué)機(jī)微程序控制器中設(shè)計(jì)實(shí)現(xiàn)了兩條擴(kuò)展指令:乘法指令MUL DR,SR與除法指令DIV DR,SR。
(1) 硬件:TEC-XP16教學(xué)機(jī),PC機(jī),Lattice USB下載電纜HW-USB-2A。
(2) 軟件:Lattice ispLEVER Classic 2.0軟件、WinPcec軟件。
在TEC-XP16教學(xué)機(jī)的微程序控制器中擴(kuò)展指令的主要過(guò)程如下:
(1) 確定乘法指令與除法指令的格式和功能,如表1所示。
表1 MUL指令與DIV指令的指令格式與功能
(2) 按乘法指令與除法指令的功能和格式,設(shè)計(jì)8位無(wú)符號(hào)數(shù)乘法算法,8位無(wú)符號(hào)數(shù)除法算法,如算法1,算法2所示。
算法1(8位無(wú)符號(hào)數(shù)乘法算法) 被乘數(shù)與乘數(shù)都用8位無(wú)符號(hào)數(shù)表示,被乘數(shù)與乘數(shù)分別放在DR、SR寄存器,乘積為16位無(wú)符號(hào)數(shù),乘積16位放R6寄存器。
(1) 保存R3、R8寄存器內(nèi)容到堆棧;
(2) 初始化,部分積R6初始化為0,R3、R8寄存器初始化為8;
(3) 將DR寄存器內(nèi)容左移8位;
(4) 將SR寄存器內(nèi)容右移1位,最低位移入C觸發(fā)器;
(5) 如果C為1,則轉(zhuǎn)(6),如果C為0,轉(zhuǎn)(7);
(6) (R6)+(DR)→R6;
(7) R6寄存器內(nèi)容右移一位,最低位移入C觸發(fā)器;
(8) R8減1,結(jié)果不為0,則轉(zhuǎn)(4),結(jié)果為0,結(jié)束;
(9) 出?;謴?fù)R3、R8寄存器內(nèi)容。
算法2(8位無(wú)符號(hào)數(shù)除法算法) 被除數(shù)與除數(shù)都用8位無(wú)符號(hào)數(shù)表示,被除數(shù)與除數(shù)分別放在DR、SR寄存器,R9寄存器放8位商。
(1) 保存R3寄存器內(nèi)容到堆棧;
(2) 初始化,R3初始化為9(上商9次),R9初始化為0;
(3) (DR)-(SR)→DR;
(4) 如果S為0,則轉(zhuǎn)(5),如果S為1,轉(zhuǎn)(9);
(5) R3減1,結(jié)果不為0,則轉(zhuǎn)(6),結(jié)果為0,則轉(zhuǎn)(12);
(6) 將R9寄存器內(nèi)容增1,轉(zhuǎn)(4);
(7) 將R9寄存器內(nèi)容左移一位,將DR寄存器內(nèi)容左移一位;
(8) (DR)-(SR)→DR,轉(zhuǎn)(4);
(9) R3減1,結(jié)果不為0,則轉(zhuǎn)(10),結(jié)果為0,則轉(zhuǎn)(13);
(10) 將R9寄存器內(nèi)容左移一位,將DR寄存器內(nèi)容左移一位;
(11) (DR)+(SR)→DR,轉(zhuǎn)(4);
(12) 將R9寄存器內(nèi)容增1;
(13) 出?;謴?fù)R3寄存器內(nèi)容。
(3) 根據(jù)乘除指令的算法,劃分指令執(zhí)行步驟并設(shè)計(jì)每一步的執(zhí)行功能,MUL指令的執(zhí)行步驟表如表2所示。DIV指令的指令執(zhí)行步驟表由于論文篇幅關(guān)系省略。
表2 MUL指令的執(zhí)行步驟表
(4) 根據(jù)指令執(zhí)行步驟表,設(shè)計(jì)微指令地址和下地址字段的取值,并設(shè)計(jì)每一個(gè)控制信號(hào)的狀態(tài)值,如表3、表4所示。乘法指令的操作碼為E8H,微程序入口地址為6AH,除法指令的操作碼為E9H,微程序入口地址為87H。
表3 MUL指令的微程序表
續(xù)表3
表4 DIV指令的微程序表
續(xù)表4
如圖1所示,一條微指令由16位的下地址字段和32位的控制命令字段共同組成,下地址字段用于正確給出下一條微指令的地址,控制命令字段給出的32位控制信號(hào)用于控制教學(xué)機(jī)各功能部件的運(yùn)行[13]。
微下地址命令碼微轉(zhuǎn)移條件MRWI2-I0I8-I6I5-I3B口地址A口地址SSTSSHSCIDC2DC116位下地址字段32位控制命令字段
圖1 TEC-XP16教學(xué)機(jī)的微指令格式
圖1中,命令碼CI3~CI0為0010時(shí),根據(jù)指令的操作碼從MAPROM找到該指令對(duì)應(yīng)的微程序的入口地址,從而開(kāi)始該條指令的執(zhí)行。命令碼CI3~CI0為1110時(shí),順序執(zhí)行,即執(zhí)行緊跟在本條微指令后面的那條微指令,(μPC)+1→μPC。
如表5所示,命令碼CI3~CI0為0011時(shí),用于條件微轉(zhuǎn)移控制,微轉(zhuǎn)移條件SCC3~SCC0用于條件微轉(zhuǎn)移時(shí)給出轉(zhuǎn)移依據(jù)的條件,條件滿足時(shí)發(fā)生轉(zhuǎn)移,下一條微指令的地址為當(dāng)前微指令中微下地址字段的內(nèi)容;條件不滿足,順序執(zhí)行[14]。
表5 條件微指令轉(zhuǎn)移所依據(jù)的判斷條件表
(5) 根據(jù)表3和表4,修改描述MACH芯片功能的ABEL語(yǔ)言源程序,編譯適配后下載到MACH芯片中。
(6) 寫(xiě)一個(gè)包含所設(shè)計(jì)的乘法指令與除法指令的教學(xué)機(jī)程序,通過(guò)運(yùn)行該程序檢查執(zhí)行結(jié)果的正確性,驗(yàn)證設(shè)計(jì)的乘除指令是否正確。
下面將以MUL指令為例,介紹在微程序控制器的ABEL源文件中添加擴(kuò)展指令的控制信號(hào)的邏輯表達(dá)式,編譯控制器的ABEL源文件,對(duì)MACH器件編程,編寫(xiě)程序驗(yàn)證擴(kuò)展指令是否正確的整個(gè)過(guò)程。
(1) 啟動(dòng)Lattice ispLEVER Classic 2.0中的ispLEVER Classic Project Navigator軟件,新建一個(gè)項(xiàng)目,項(xiàng)目名稱必須是lc4256。
(2) 選擇器件類型,如圖2所示。
圖2 選擇器件類型
(3) 單擊“Add Source”按鈕,添加控制器源文件m256c.abl。然后,單擊“完成”按鈕。
(4) 右鍵單擊m256c.abl文件,選擇“Open”命令。在文本編輯器中打開(kāi)m256c.abl文件。
(5) 在文本編輯器中修改m256c.abl控制器源文件(文中字體加粗的代碼是添加的代碼)。
我們?cè)O(shè)計(jì)的MUL指令的操作碼為E8H,因此,在RET=(IR==[1,0,0,0,1,1,1,1]);后面加一行代碼:
MUL=(IR==[1,1,1,0,1,0,0,0]);
依據(jù)表3 MUL指令的微程序表修改CC信號(hào)的邏輯表達(dá)式,當(dāng)CC信號(hào)為低電平時(shí)微程序執(zhí)行轉(zhuǎn)移,為高電平時(shí)則順序執(zhí)行。當(dāng)SCC3~SCC0為0100,NADR為01110101并且Z為0時(shí),CC為低電平,即當(dāng)Z為0執(zhí)行地址為77H的JRNZ 75微指令后將轉(zhuǎn)移到75H地址執(zhí)行微指令。當(dāng)SCC3~SCC0為0100,NADR為01111011并且C為0時(shí),CC為低電平,即當(dāng)C為0執(zhí)行地址為79H的JRNC 7B微指令后將轉(zhuǎn)移到7BH地址執(zhí)行微指令。當(dāng)SCC3~SCC0為0100,NADR為00110000并且Z為1時(shí),CC為低電平,即當(dāng)Z為1執(zhí)行地址為7DH的JRZ 7F微指令后將轉(zhuǎn)移到30H地址執(zhí)行微指令。修改后的CC0表達(dá)式如下:
CC0=!SCC3&!SCC2&!SCC1&!SCC0
#!SCC3& SCC2& SCC1&!SCC0&(IN_)
#!SCC3& SCC2&!SCC1&!SCC0&(JRC)&!C
#!SCC3& SCC2&!SCC1&!SCC0&(JRNC)&C
#!SCC3& SCC2&!SCC1&!SCC0&(JRZ)&!Z
#!SCC3&SCC2&!SCC1&!SCC0&(JRNZ)&Z
#!SCC3&SCC2&!SCC1&!SCC0&(MUL)&
(NADR==[0,1,1,1,0,1,0,1])&(Z==0)
#!SCC3& SCC2&!SCC1&!SCC0&(MUL)&
(NADR==[0,1,1,1,1,0,1,1])&(C==0)
#!SCC3& SCC2&!SCC1&!SCC0&(MUL)&
(NADR==[0,1,1,1,1,1,1,1])&(Z==1)
# CCM;
CCM=!SCC3& SCC2& SCC1& SCC0&(PUSH)
#!SCC3& SCC2& SCC1& SCC0&(POP)
#!SCC3& SCC2&!SCC1& SCC0&(JRS)&!S
#!SCC3& SCC2&!SCC1& SCC0&(JRNS)&S
#!SCC3&!SCC2& SCC1&!SCC0&!INT;
!CC=CC0;
如圖3所示,MACH芯片向AM2910器件提供8位下地址信息D7~D0,該地址有2個(gè)來(lái)源[15],通過(guò)AM2910產(chǎn)生的_PL和_MAP信號(hào)進(jìn)行選擇,當(dāng)_PL為低時(shí),該地址來(lái)自微指令中的8位下地址字段NADR7~NADR0;當(dāng)_MAP為低時(shí),該地址來(lái)自MAPROM的輸出,MAPROM是通過(guò)組合邏輯表達(dá)式來(lái)實(shí)現(xiàn)的。
圖3 TEC-XP16教學(xué)機(jī)控制器的總體組成
我們?cè)O(shè)計(jì)的MUL 指令的微程序入口地址為6AH,因此,D0、D2、D4、D7表達(dá)式不需要修改,在D6、D5、D3、D1的邏輯表達(dá)式中需增加MUL匯編指令。修改后的D1、D3、D5、D6的邏輯表達(dá)式如下:
D1=!C_M&(!_MAP&(AND#OR#TEST#MVRR#SHL#SHR#IN_#OUT#POP#POPF#LDRR#JMPA#CALA#RET#IRET#NOT#ASR#CLC#STC#JMPR#LDRA#STRA#SWRR#MUL)#NADR1&!_PL);
D3=!C_M&(!_MAP&(XOR_#CMP#TEST#MVRR#INC#DEC#SHR#SHL#STRR#LDRR#MVRD#JMPA#CALA#EI#DI#JMPR#JRS#JRNS#LDRA#LDRX#STRA#SWRR#MUL)#NADR3&!_PL);
D5=!C_M&(!_MAP&(RET#IRET#JRS#JRNS#CALR#STRX#SWRR#MUL)#NADR5&!_PL);
D6=!C_M&(!_MAP&(EI#DI#IRET#ADC#SBB#NOT#ASR#RCL#RCR#CLC#STC#JMPR#JRS#JRNS#LDRA#LDRX#STRA#STRX#CALR#SWRR#MUL)#NADR6&!_PL);
按照所設(shè)計(jì)的乘法指令和除法指令的微程序表中的內(nèi)容修改描述 MACH 芯片功能的 ABEL語(yǔ)言源程序,即分別寫(xiě)出微指令每一位信號(hào)的完整的邏輯表達(dá)式,即把在微程序表中該位信號(hào)取值為1或0時(shí)所對(duì)應(yīng)的微指令地址或在一起。
依據(jù)表3 MUL指令微程序表的內(nèi)容修改微程序控制器16位下地址字段的邏輯表達(dá)式,即微下地址NADR7~ NADR0、命令碼CI3~CI0、微轉(zhuǎn)移條件SCC3~SCC0的邏輯表達(dá)式。由于論文篇幅關(guān)系代碼省略。
依據(jù)表3 MUL指令微程序表的內(nèi)容修改微程序控制器32位控制命令字段的邏輯表達(dá)式。其中,DC2_200、DC2_100、DC2_000、DC1_200、DC1_100、DC1_000表達(dá)式不需要修改。由于論文篇幅關(guān)系代碼省略。
(6) 保存m256c.abl文件。
(7) 在左側(cè)源文件窗口中單擊m256c.abl文件,雙擊Compile Logic任務(wù)項(xiàng),即對(duì)源文件m256c.abl進(jìn)行編譯。
(8) 在左側(cè)源文件窗口中點(diǎn)擊器件圖標(biāo),在右側(cè)窗口中雙擊JEDEC File任務(wù)項(xiàng)生成lc4256.jed文件。完成后以綠色的“√”標(biāo)記。若有警告信息,則以黃色的“!”標(biāo)記,警告信息一般并不影響JEDEC文件的使用。
(9) 啟動(dòng)Lattice ispLEVER Classic 2.0中的ispVM System軟件,彈出主界面。
(10) 將教學(xué)機(jī)左下方五個(gè)黑色的控制開(kāi)關(guān)撥為10100(1表示往上撥,0表示往下?lián)?。
(11) 通過(guò)Lattice USB 下載電纜HW-USB-2A連接PC機(jī)與教學(xué)計(jì)算機(jī)上MACH芯片,打開(kāi)教學(xué)計(jì)算機(jī)電源。
(12) 執(zhí)行Options、Cable and I/O Port Setup…命令,設(shè)置Cable為USB接口,因?yàn)槲覀冇玫氖荱SB ispDOWNLOAD Cables。
(13) 通過(guò)ispVM System軟件主界面的SCAN按鈕找到在線編程器件。
(14) 右擊所找到的編程器件LC4256V,選擇“Edit Device”,在“Device Information”窗口中選擇Device為 LC4256V(B),通過(guò)Browse按鈕選擇已編譯好的JED文件(lc4256.jed),單擊OK按鈕。
(15) 重新回到ispVM System軟件主界面,點(diǎn)擊GO命令進(jìn)行下載編程。如圖4所示,在Status窗口中顯示信息“Operation Done:No errors.Operation:Successful”,表示對(duì)LC4256V器件的編程已經(jīng)成功。
圖4 編程成功
(16) 關(guān)閉教學(xué)計(jì)算機(jī)電源,拔下下載編程電纜。
(17) 將教學(xué)機(jī)左下方五個(gè)黑色的控制開(kāi)關(guān)撥為00010(1表示往上撥,0表示往下?lián)?,啟動(dòng)WinPcec16軟件,然后打開(kāi)教學(xué)機(jī)電源,先按RESET鍵,后按START鍵,啟動(dòng)教學(xué)機(jī)監(jiān)控程序。
(18) 在WinPcec16中編寫(xiě)一個(gè)包含擴(kuò)展指令MUL的教學(xué)機(jī)程序,如圖5所示。其中,MUL指令為我們?cè)O(shè)計(jì)的擴(kuò)展指令,教學(xué)機(jī)中規(guī)定擴(kuò)展指令必須用E命令將二進(jìn)制形式的擴(kuò)展指令寫(xiě)入教學(xué)機(jī)內(nèi)存。程序中MUL指令的二進(jìn)制代碼為E812(十六進(jìn)制形式),E8為MUL指令的操作碼,1、2分別表示R1、R2寄存器編號(hào)。該程序?qū)1寄存器內(nèi)容與R2寄存器內(nèi)容相乘,乘積存放在R6寄存器,即10010001×10110101=01100110 10000101(十六進(jìn)制數(shù)6685),程序運(yùn)行結(jié)果表明所設(shè)計(jì)的擴(kuò)展指令MUL是正確的。
圖5 包含擴(kuò)展指令MUL的教學(xué)機(jī)程序的運(yùn)行結(jié)果
(19) 在WinPcec16軟件中編寫(xiě)一個(gè)包含擴(kuò)展指令DIV的教學(xué)機(jī)程序,該程序?qū)1寄存器內(nèi)容與R2寄存器內(nèi)容相除,商存放在R9寄存器,即10111100÷11011110=0.11011000(十六進(jìn)制數(shù)00D8),余數(shù)存放在R1寄存器,余數(shù)補(bǔ)碼為1111111111010010(十六進(jìn)制數(shù)FFD2),余數(shù)為負(fù),則需通過(guò)余數(shù)補(bǔ)碼+除數(shù)補(bǔ)碼恢復(fù)余數(shù),1111111111010010+.0000000011011110=0000000010110000,即余數(shù)為+0.10110000,程序運(yùn)行結(jié)果表明所設(shè)計(jì)的擴(kuò)展指令DIV是正確的,如圖6所示。擴(kuò)展指令必須用E命令輸入。
圖6 包含擴(kuò)展指令DIV的教學(xué)機(jī)程序的運(yùn)行結(jié)果
目前,國(guó)內(nèi)外還沒(méi)有研究在TEC-XP16教學(xué)機(jī)微程序控制器中擴(kuò)展較復(fù)雜指令,如乘法指令、除法指令的文獻(xiàn)。為解決TEC-XP16教學(xué)機(jī)缺少乘法指令和除法指令的問(wèn)題,本文對(duì)TEC-XP16教學(xué)機(jī)微程序控制器中擴(kuò)展乘法指令與除法指令進(jìn)行了嘗試,設(shè)計(jì)了一種8位無(wú)符號(hào)數(shù)乘法指令與一種8位無(wú)符號(hào)數(shù)除法指令。對(duì)所設(shè)計(jì)和實(shí)現(xiàn)的乘法指令與除法指令進(jìn)行了實(shí)驗(yàn)測(cè)試,測(cè)試結(jié)果驗(yàn)證了我們所設(shè)計(jì)和實(shí)現(xiàn)的乘法指令與除法指令的功能是正確的。目前,已在我校計(jì)算機(jī)科學(xué)與技術(shù)15級(jí)學(xué)生計(jì)算機(jī)組成原理課中開(kāi)設(shè)了一些設(shè)計(jì)性實(shí)驗(yàn),如本文提到的在微程序控制器中擴(kuò)展一些新指令。從學(xué)生的反饋來(lái)看,多開(kāi)設(shè)這種設(shè)計(jì)性的實(shí)驗(yàn),可以使學(xué)生從根本上理解計(jì)算機(jī)各組成部件的工作原理以及各個(gè)組成部件之間的聯(lián)系,使學(xué)生更易形成一個(gè)完整的計(jì)算機(jī)整機(jī)概念,有益于提高學(xué)生的設(shè)計(jì)能力和創(chuàng)新能力,培養(yǎng)學(xué)生分析問(wèn)題和解決問(wèn)題的能力,激發(fā)學(xué)生學(xué)習(xí)的主動(dòng)性和積極性。下一步將嘗試?yán)媒虒W(xué)機(jī)AM2901運(yùn)算器芯片中的乘商寄存器實(shí)現(xiàn)16位乘法指令與16位除法指令,以及在微程序控制器中擴(kuò)展補(bǔ)碼乘法與補(bǔ)碼除法等指令。