文章編號:1672-5913(2008)16-0033-03
摘要:本文介紹了高職本科專業(yè)軟件綜合實訓的一種方案并給出了具體的實施辦法。本文的設計思想和實現(xiàn)方法是軟件綜合實訓中理論與實際結合且不失高職綜合實訓基本要求的有意義的嘗試。
關鍵詞:教學改革;軟件綜合實訓;虛擬機
中圖分類號:G642
文獻標識碼:B
1存在的問題及原因
為了提高高職學生的實踐能力開設的實驗、課程設計、實訓等實踐性課程比例在總學時的40%以上。這些實踐性課程無疑為學習實用技術,提高學生實踐動手能力起到了關鍵的作用,如何能把一些理論性強的課程講到“必需、夠用”是高職院校探討較多的問題。比如,因實驗條件有限或認為夠用而將操作系統(tǒng)、編譯原理、數(shù)字電路和組成原理等課程以講述為主,就很難開展有效的實踐活動,學生很難構想出完整的軟件或硬件系統(tǒng)。
虛擬機技術無疑是計算機系統(tǒng)本身所涉及的核心技術的最好的抽象和實現(xiàn),通過軟件模擬硬件,能幫助高職本科學生理解整個計算機系統(tǒng)是如何工作的,不僅能講出這些理論課的“必需、夠用”部分,而且還能通過實踐訓練提高學生的抽象能力和編程能力。
2解決方案
將虛擬機的設計和開發(fā)作為軟件綜合實訓,需要詳細制定虛擬機的規(guī)范。該規(guī)范由硬件規(guī)范和匯編語言規(guī)范等內容組成。規(guī)范的制定決定了虛擬機的設計規(guī)模,這可以根據(jù)學生的平均能力水平而定,以下給出了一種參考規(guī)范。
2.1虛擬機規(guī)范
2.1.1硬件規(guī)范
指令集的設計:主要考慮主流的計算機系統(tǒng)都是基于寄存器結構的Intel x86系列指令集的子集。指令集格式見圖1。使用不同的mov指令的不同名字是為了實現(xiàn)時的方便。Op指令的Fn位置指明不同的運算符,jxx指令中的fn位置指明不同的跳轉指令。
CPU的設計:CPU采用順序處理器,類似于IA32的處理器這樣設計指令集和CPU的好處是容易與匯編語言與組成原理課程聯(lián)系到一起。在CPU中設置$AX,$BX,$CX,$DX,$FLAGS,$SP,$BP,$CS,$IP等寄存器的用途與IA32CPU類似。
指令的執(zhí)行:處理一條指令包括很多操作,如何使一條指令能控制CPU中的硬件器件,每種指令執(zhí)行的動作差異很大,但指令遵循統(tǒng)一的序列,即取指令、解釋、執(zhí)行和PC增值。圖2為指令執(zhí)行的通用過程,虛框表示動作,實框為硬件,聯(lián)線為其操作。
表1對幾條指令所做的微操作進行了分析,icode為指令碼、ifun為功能碼,M數(shù)組存儲器,PC為指令寄存器,SP為棧頂指針。
寄存器之間數(shù)據(jù)復制指令rrmov的執(zhí)行過程:取指階段根據(jù)PC寄存器的地址從相應的內存取出指令的第一個字節(jié),將前四位的數(shù)據(jù)存入icode,后四位存入ifun;解碼階段根據(jù)icode代碼知道是rrmov指令,根據(jù)rrmov指令格式從內存中繼續(xù)讀取要在哪個寄存器之間進行數(shù)據(jù)移動,也能確定該指令的長度后能確定PC寄存器要增加多少;在執(zhí)行階段完成寄存器間的數(shù)據(jù)移動和PC增值。
RAM的設計:從概念上來說存儲器是一個很大的字節(jié)數(shù)組,一個可執(zhí)行的虛擬機程序被加載到內存之后,引入不可用的$TOP、$SSF、$DSF三個標記寄存器將數(shù)據(jù)區(qū)和代碼區(qū)區(qū)分開來。見圖3。
2.1.2匯編語言設計規(guī)范
一個匯編語言文件內容由語句序列組成,一條語句由一個指令、偽指令或注釋組成。一條語句為一行。匯編語言中的指令與指令集的指令一一對應。
指令格式為:指令≡操作碼 [操作數(shù)[,操作數(shù)]]
偽指令由幾個特殊的單詞組成,函數(shù)的開始和結束由.PB和.PE標記,.PB后面標有函數(shù)名;標號由.PL標記,后面有標號;由.GW聲明全局變量,由 .PW聲明局部變量,.GW.PW后面為標識符也可能有初值,標識符為字母開頭的字母數(shù)組組合的字符串,變量需要提前聲明;程序中可以有多個函數(shù)但程序是由main 函數(shù)開始執(zhí)行的。注釋是由‘#’符號開頭的一行。
為了設計的簡單,該匯編語言只支持四字節(jié)的整數(shù)。
圖4為使用該規(guī)范編寫的計算1+2+…+100的程序。
.PB main
#1+2+…+100=?
imov 0,$AX
imov 1,$BX
.PL LOOP
cmp 101,$BX
je END
add $AX,$BX
add 1,$BX
.jmp LOOP
.PL END
ret
.PE
圖4 匯編語言范例
2.1.3虛擬機可執(zhí)行文件
經(jīng)編譯后的匯編文件生成的指令代碼和數(shù)據(jù)應保存在特定格式的文件中,供虛擬機在啟動時加載。該文件由指定了全局數(shù)據(jù)位置、每個函數(shù)的局部數(shù)據(jù)位置和每個函數(shù)指令代碼地址的文件頭和數(shù)據(jù)、指令構成。
2.2規(guī)范的實現(xiàn)
在開發(fā)的過程中可以要求學生使用面向對象分析和設計的思想從零構建一個完整的小型的計算機系統(tǒng)。
2.2.1硬件規(guī)范實現(xiàn)
虛擬機硬件關系UML類圖見圖5。一個具體的rrmov指令執(zhí)行過程的UML序列圖見圖6。
2.2.2匯編編譯器實現(xiàn)
匯編語言編譯器是由兩遍編譯完成:第一遍分析詞法,第二遍生成代碼,將語法分析與語義分析代碼生成集中到一起實現(xiàn),即獲取一條指令,由符號表查指令中相關信息,將指令翻譯成機器碼。
2.2.3裝載器的實現(xiàn)
基本功能是將虛擬機可執(zhí)行文件中的代碼部分放到內存0地址開始的地方。將數(shù)據(jù)放到數(shù)據(jù)段。在放置的過程中做邏輯地址到虛擬機絕對地址的轉換。
2.3虛擬機軟件的整個工作流程
整個軟件系統(tǒng)由兩個程序組成。匯編語言編譯程序通過標準的編譯過程將用戶編寫的匯編語言變成虛擬機可理解的機器代碼。虛擬機由裝載器和指令執(zhí)行邏輯組成,裝載器將虛擬機可執(zhí)行文件裝截到虛擬機的內存,接下來取指、解碼、執(zhí)行,如果遇到halt指令,則結束。見圖7。
2.4擴展方向
教師在設計該實訓課時可以根據(jù)學生的情況從以下幾個方面對所要設計的虛擬機的規(guī)模進行擴展,如增加CPU指令、增加中斷機制、增加操作系統(tǒng)的特性(shell、文件系統(tǒng)、存儲器管理)和設計高級語言的編譯器、制作調試器等。
3執(zhí)行保障
綜合實訓并不是與單獨一門課程有關的,所以要在相關課程講授過程中將未來要做的綜合實訓課程的內容銜接。在設計系統(tǒng)時可要求先實現(xiàn)最小系統(tǒng),之后嘗試按照擴展方向提高難度。在教學過程中采用啟發(fā)式教學方法,強調講述各課程間的知識點的銜接。在組織教學過程中明確教學目標、內容和組織方式,確定指導方法和考核方法在校內集中連續(xù)地進行。
4總結
該實訓課程有利于高職本科生的知識整合和技能整合,比高職專科生能更深入完整地理解計算機系統(tǒng)理論知識,也能比普通本科生得到更多的編程實踐機會。
參考文獻:
[1] 程忠國,李玉春,劉丹青. 高職本科:一個亟待探索與創(chuàng)新的教育層次[J]. 教育與職業(yè),2007,(24).
[2] 梁琦. 高等職業(yè)教育的綜合實訓課程[J]. 中國職業(yè)技術教育,2006,(10).
[3] Noam Nisa, Shimon Schocken . 計算機系統(tǒng)要素—從零開始構建現(xiàn)代計算機[M]. 北京:電子工業(yè)出版社,2007.
[4] Bill Blunden. 虛擬機的設計與實現(xiàn):C/C++[M]. 北京:機械工業(yè)出版社,2003.