文章編號:1672-5913(2008)16-0033-03
摘要:本文介紹了高職本科專業軟件綜合實訓的一種方案并給出了具體的實施辦法。本文的設計思想和實現方法是軟件綜合實訓中理論與實際結合且不失高職綜合實訓基本要求的有意義的嘗試。
關鍵詞:教學改革;軟件綜合實訓;虛擬機
中圖分類號:G642
文獻標識碼:B
1存在的問題及原因
為了提高高職學生的實踐能力開設的實驗、課程設計、實訓等實踐性課程比例在總學時的40%以上。這些實踐性課程無疑為學習實用技術,提高學生實踐動手能力起到了關鍵的作用,如何能把一些理論性強的課程講到“必需、夠用”是高職院校探討較多的問題。比如,因實驗條件有限或認為夠用而將操作系統、編譯原理、數字電路和組成原理等課程以講述為主,就很難開展有效的實踐活動,學生很難構想出完整的軟件或硬件系統。
虛擬機技術無疑是計算機系統本身所涉及的核心技術的最好的抽象和實現,通過軟件模擬硬件,能幫助高職本科學生理解整個計算機系統是如何工作的,不僅能講出這些理論課的“必需、夠用”部分,而且還能通過實踐訓練提高學生的抽象能力和編程能力。
2解決方案
將虛擬機的設計和開發作為軟件綜合實訓,需要詳細制定虛擬機的規范。該規范由硬件規范和匯編語言規范等內容組成。規范的制定決定了虛擬機的設計規模,這可以根據學生的平均能力水平而定,以下給出了一種參考規范。
2.1虛擬機規范
2.1.1硬件規范
指令集的設計:主要考慮主流的計算機系統都是基于寄存器結構的Intel x86系列指令集的子集。指令集格式見圖1。使用不同的mov指令的不同名字是為了實現時的方便。Op指令的Fn位置指明不同的運算符,jxx指令中的fn位置指明不同的跳轉指令。
CPU的設計:CPU采用順序處理器,類似于IA32的處理器這樣設計指令集和CPU的好處是容易與匯編語言與組成原理課程聯系到一起。在CPU中設置$AX,$BX,$CX,$DX,$FLAGS,$SP,$BP,$CS,$IP等寄存器的用途與IA32CPU類似。

指令的執行:處理一條指令包括很多操作,如何使一條指令能控制CPU中的硬件器件,每種指令執行的動作差異很大,但指令遵循統一的序列,即取指令、解釋、執行和PC增值。圖2為指令執行的通用過程,虛框表示動作,實框為硬件,聯線為其操作。

表1對幾條指令所做的微操作進行了分析,icode為指令碼、ifun為功能碼,M數組存儲器,PC為指令寄存器,SP為棧頂指針。

寄存器之間數據復制指令rrmov的執行過程:取指階段根據PC寄存器的地址從相應的內存取出指令的第一個字節,將前四位的數據存入icode,后四位存入ifun;解碼階段根據icode代碼知道是rrmov指令,根據rrmov指令格式從內存中繼續讀取要在哪個寄存器之間進行數據移動,也能確定該指令的長度后能確定PC寄存器要增加多少;在執行階段完成寄存器間的數據移動和PC增值。
RAM的設計:從概念上來說存儲器是一個很大的字節數組,一個可執行的虛擬機程序被加載到內存之后,引入不可用的$TOP、$SSF、$DSF三個標記寄存器將數據區和代碼區區分開來。見圖3。

2.1.2匯編語言設計規范
一個匯編語言文件內容由語句序列組成,一條語句由一個指令、偽指令或注釋組成。一條語句為一行。匯編語言中的指令與指令集的指令一一對應。
指令格式為:指令≡操作碼 [操作數[,操作數]]
偽指令由幾個特殊的單詞組成,函數的開始和結束由.PB和.PE標記,.PB后面標有函數名;標號由.PL標記,后面有標號;由.GW聲明全局變量,由 .PW聲明局部變量,.GW.PW后面為標識符也可能有初值,標識符為字母開頭的字母數組組合的字符串,變量需要提前聲明;程序中可以有多個函數但程序是由main 函數開始執行的。注釋是由‘#’符號開頭的一行。
為了設計的簡單,該匯編語言只支持四字節的整數。
圖4為使用該規范編寫的計算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虛擬機可執行文件
經編譯后的匯編文件生成的指令代碼和數據應保存在特定格式的文件中,供虛擬機在啟動時加載。該文件由指定了全局數據位置、每個函數的局部數據位置和每個函數指令代碼地址的文件頭和數據、指令構成。
2.2規范的實現
在開發的過程中可以要求學生使用面向對象分析和設計的思想從零構建一個完整的小型的計算機系統。
2.2.1硬件規范實現
虛擬機硬件關系UML類圖見圖5。一個具體的rrmov指令執行過程的UML序列圖見圖6。
2.2.2匯編編譯器實現
匯編語言編譯器是由兩遍編譯完成:第一遍分析詞法,第二遍生成代碼,將語法分析與語義分析代碼生成集中到一起實現,即獲取一條指令,由符號表查指令中相關信息,將指令翻譯成機器碼。

2.2.3裝載器的實現
基本功能是將虛擬機可執行文件中的代碼部分放到內存0地址開始的地方。將數據放到數據段。在放置的過程中做邏輯地址到虛擬機絕對地址的轉換。

2.3虛擬機軟件的整個工作流程
整個軟件系統由兩個程序組成。匯編語言編譯程序通過標準的編譯過程將用戶編寫的匯編語言變成虛擬機可理解的機器代碼。虛擬機由裝載器和指令執行邏輯組成,裝載器將虛擬機可執行文件裝截到虛擬機的內存,接下來取指、解碼、執行,如果遇到halt指令,則結束。見圖7。

2.4擴展方向
教師在設計該實訓課時可以根據學生的情況從以下幾個方面對所要設計的虛擬機的規模進行擴展,如增加CPU指令、增加中斷機制、增加操作系統的特性(shell、文件系統、存儲器管理)和設計高級語言的編譯器、制作調試器等。
3執行保障
綜合實訓并不是與單獨一門課程有關的,所以要在相關課程講授過程中將未來要做的綜合實訓課程的內容銜接。在設計系統時可要求先實現最小系統,之后嘗試按照擴展方向提高難度。在教學過程中采用啟發式教學方法,強調講述各課程間的知識點的銜接。在組織教學過程中明確教學目標、內容和組織方式,確定指導方法和考核方法在校內集中連續地進行。
4總結
該實訓課程有利于高職本科生的知識整合和技能整合,比高職??粕芨钊胪暾乩斫庥嬎銠C系統理論知識,也能比普通本科生得到更多的編程實踐機會。
參考文獻:
[1] 程忠國,李玉春,劉丹青. 高職本科:一個亟待探索與創新的教育層次[J]. 教育與職業,2007,(24).
[2] 梁琦. 高等職業教育的綜合實訓課程[J]. 中國職業技術教育,2006,(10).
[3] Noam Nisa, Shimon Schocken . 計算機系統要素—從零開始構建現代計算機[M]. 北京:電子工業出版社,2007.
[4] Bill Blunden. 虛擬機的設計與實現:C/C++[M]. 北京:機械工業出版社,2003.