COMET虛擬機(jī)的設(shè)計(jì)與實(shí)現(xiàn)
摘 要 COMET虛擬機(jī)是一種為了教學(xué)目的而定義的虛擬機(jī),其結(jié)構(gòu)雖然簡單,但功能完備,可作為一種教學(xué)輔助工具,幫助大學(xué)本科學(xué)習(xí)計(jì)算機(jī)課程的學(xué)生更好地理解現(xiàn)在計(jì)算機(jī)的結(jié)構(gòu)和工作原理。作者基于原有COMET虛擬機(jī)定義,改進(jìn)并實(shí)現(xiàn)了一個(gè)功能相對完備的虛擬機(jī)。COMET虛擬機(jī) 的開發(fā)主要突出兩個(gè)原則:簡單性和可移植性。本文將對COMET虛擬機(jī)的開發(fā)細(xì)節(jié)做一個(gè)完整的描述。
本文引用地址:http://cafeforensic.com/article/202257.htm關(guān)鍵詞 COMET虛擬機(jī); 設(shè)計(jì); 實(shí)現(xiàn)
1 引言
虛擬機(jī)就是一臺(tái)假想的機(jī)器。一臺(tái)虛擬機(jī)與一臺(tái)真實(shí)存在的計(jì)算機(jī)不同之處在于前者只是一個(gè)技術(shù)規(guī)范。虛擬機(jī)技術(shù)從很早就開始研究,并且在軟件技術(shù)中廣為應(yīng)用。目前,高度可移植的JAVA編程語言采用的就是虛擬機(jī)技術(shù)。虛擬機(jī)不僅有廣泛的商業(yè)應(yīng)用價(jià)值,同時(shí)也可作為一種很好的教學(xué)輔助工具。通過虛擬機(jī),學(xué)生可以很好地學(xué)習(xí)理解計(jì)算機(jī)的結(jié)構(gòu)和工作原理。因此,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡單的虛擬機(jī)有很好的教學(xué)意義[4,5]。
COMET虛擬機(jī)開始只是作為CASL匯編語言的運(yùn)行平臺(tái)而設(shè)計(jì),并由中國計(jì)算機(jī)軟件專業(yè)技術(shù)資格和水平考試大綱中給出的CASL匯編語言文本定義(下文將簡稱為文本)。作者在文本的基礎(chǔ)上,對COMET虛擬機(jī)的功能進(jìn)行了一定的改進(jìn)和擴(kuò)充,并實(shí)現(xiàn)了一個(gè)功能完善的虛擬機(jī)實(shí)例[1]。
2 COMET虛擬機(jī)設(shè)計(jì) 2.1 邏輯結(jié)構(gòu)
圖1 COMET虛擬機(jī)結(jié)構(gòu)
COMET虛擬機(jī)是一臺(tái)基于寄存器模型結(jié)構(gòu)的計(jì)算機(jī)。COMET虛擬機(jī)系統(tǒng)主要包括三個(gè)部分:中央處理器(CPU)、存儲(chǔ)器和出入輸出設(shè)備。COMET計(jì)算機(jī)的邏輯結(jié)構(gòu)如圖1所示。
CPU是由寄存器、算術(shù)邏輯部件和控制邏輯組成。寄存器在程序運(yùn)行時(shí)存儲(chǔ)計(jì)算過程的各種信息;算術(shù)邏輯部件的功能是進(jìn)行所有的算術(shù)和邏輯運(yùn)算。由于COMET計(jì)算機(jī)是虛擬的計(jì)算機(jī),因此,它的控制邏輯對于我們是透明的[1,4,5]。
2.2 寄存器
COMET虛擬機(jī)有5個(gè)通用寄存器GR(16位),一個(gè)指令計(jì)數(shù)器PC(16位)和一個(gè)標(biāo)志寄存器FR(2位)。
GR(通用寄存器) 5個(gè)通用寄存器的編號為0、1、2、3、4,分別記為GR0、GR1、GR2、GR3、GR4。這些通用寄存器用于算術(shù)、邏輯、移位等運(yùn)算,其中GR1、GR2、GR3、GR4通用寄存器兼做變址寄存器。另外,GR4還兼做棧指針(SP)用,棧指針是存放棧頂?shù)刂酚玫募拇嫫鳌?/p>
PC(指令計(jì)數(shù)器) 在執(zhí)行指令的過程中,PC中存放著正在執(zhí)行的指令的第一個(gè)字的地址。當(dāng)指令執(zhí)行結(jié)束時(shí),一般是把PC的內(nèi)容加上當(dāng)前指令的長度(不同指令的長度不同),只有在執(zhí)行轉(zhuǎn)移指令且條件成立時(shí),才將轉(zhuǎn)移指令地址置入PC中。
FR(標(biāo)志寄存器) 在ADD、SUB、MUL、DIV、MOD、AND、OR、EOR、CPA、CPL、SLA、SRA、SLL、SRL、LEA等指令執(zhí)行結(jié)束時(shí),根據(jù)執(zhí)行的結(jié)果,將FR設(shè)置成00、01或10(大于、等于、小于或負(fù)數(shù)、零、正數(shù))。它們不會(huì)因其他指令的執(zhí)行而改變。
2.3 存儲(chǔ)器
COMET虛擬機(jī)是一臺(tái)16位的定點(diǎn)計(jì)算機(jī),主存儲(chǔ)器的基本存儲(chǔ)單位是字,總?cè)萘繛?5536(216=16k)字,各個(gè)字的地址按照0000-FFFF(十六進(jìn)制)編號。一個(gè)字的16位二進(jìn)制采用從左到右次序編號,如圖2所示。
圖2 字節(jié)順序
COMET虛擬機(jī)可以處理三種數(shù)據(jù),即字符數(shù)據(jù)、帶符號整數(shù)、地址數(shù)據(jù)。字符數(shù)據(jù)采用16位的Unicode字符;帶符號整數(shù)采用二進(jìn)制補(bǔ)碼表示,可表示的數(shù)值范圍為[-215,215-1];地址數(shù)據(jù)為無符號的整數(shù),范圍是[0,216-1]。
在實(shí)現(xiàn)的COMET虛擬機(jī)中,內(nèi)存的高1k字保留用于各種專用的外設(shè)寄存器[1,3]。
2.4 指令系統(tǒng)
COMET虛擬機(jī)和文本相比,新增加了HALT、MUL、SUB、MOD四條指令。下面只給出HALT、MUL、SUB、MOD四條指令的說明,其他的指令可以參考文本。
HALT指令執(zhí)行停機(jī)操作,占一個(gè)字長。MUL指令執(zhí)行乘法操作,操作規(guī)則和ADD等指令相似,占2個(gè)字長。SUB指令執(zhí)行除法操作,操作規(guī)則和ADD指令相似,占2個(gè)字長。MOD指令執(zhí)行取模操作,操作規(guī)則和ADD指令相似,占2個(gè)字長。
2.5 指令格式
COMET虛擬機(jī)機(jī)器指令一般包含三種信息:OP,GR,XR,ADR。其中OP為機(jī)器指令的編號,對應(yīng)第一個(gè)字的[0-7]位;GR為通用寄存器編號,對應(yīng)第一個(gè)字中的[8-11]位;XR為變址寄存器編號,對應(yīng)第一個(gè)字的[12-15]位,[12-15]位為0表示沒有變址(GR0不能作為變址寄存器);ADR為操作數(shù),對應(yīng)地二個(gè)字的[0-15]位。如果一個(gè)指令不含某種信息(例如,沒有ADR),則忽律該字段。OP、GR、XR、ADR的存儲(chǔ)細(xì)節(jié)如圖3所示。
圖3 指令格式
根據(jù)指令操作數(shù)據(jù)的類型的不同,可將COMET虛擬機(jī)的機(jī)器指令分為四種:寄存器-存儲(chǔ)器型,存儲(chǔ)器型,寄存器型,空操作數(shù)型。如果一個(gè)COMET虛擬機(jī)指令不涉及主存儲(chǔ)器操作(無ADR),則為1個(gè)字長,其他均為2個(gè)字長。
2.6 字節(jié)碼格式
字節(jié)碼文件是COMET虛擬機(jī)的可執(zhí)行文件。在啟動(dòng)虛擬機(jī)時(shí),由命令行中的參數(shù)給出字節(jié)碼文件名。字節(jié)碼文件含有程序的長度、裝載位置、程序指令等信息。虛擬機(jī)依據(jù)這些信息,將字節(jié)碼中的指令從二級存儲(chǔ)器裝載到相應(yīng)的虛擬機(jī)內(nèi)存。這一系列操作和操作系統(tǒng)的程序加載器的工作情況類似[4]。
COMET虛擬機(jī)的字節(jié)碼文件是一種二進(jìn)制格式文件,格式如圖4所示。
圖4 字節(jié)碼結(jié)構(gòu)
其中addr為字節(jié)碼在虛擬機(jī)內(nèi)存的裝載地址,len為字節(jié)碼中指令的個(gè)數(shù)(不包含len和addr),ins1、ins2、…、insn為要載入虛擬機(jī)的指令。
2.7 輸入輸出設(shè)備
文本中并沒有明確定義COMET虛擬機(jī)的輸入輸出設(shè)備,只是給出IN、OUT幾個(gè)IO操作宏指令。在這里,我們采用將外部設(shè)備寄存器在內(nèi)存中統(tǒng)一編址的方法來處理輸入和輸出設(shè)備[1,3]。
COMET虛擬機(jī)默認(rèn)的I/O設(shè)備是鍵盤和顯示器。利用操作系統(tǒng)提供的從定向功能用戶也可以將它們重新定向到其他的設(shè)備。
COMET虛擬機(jī)輸入輸出設(shè)備的兩個(gè)專用寄存器為:IO_ADDR、IO_FLAG,分別對應(yīng)0xFD100、xFD10地址內(nèi)存。IO_ADDR用于保存要傳輸數(shù)據(jù)的內(nèi)存地址;IO_FLAG為IO設(shè)備的標(biāo)志位,其8-15位是要傳輸數(shù)據(jù)的個(gè)數(shù)(0表示無IO),7位表示輸入或輸出(1表示輸入,0為輸出),6位在出現(xiàn)IO錯(cuò)誤時(shí)設(shè)置,3-5位為傳輸?shù)念愋?有字符、八進(jìn)制、十進(jìn)制、十六進(jìn)制等),0-2位保留。
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理
評論