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