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