惠麗+張浩宇
摘 ? ?要:“計算機組成原理實驗”是《計算機組成原理》理論課程的一個重要輔助和補充,在開設實驗課程過程中,我們發現實驗系統自帶的匯編語言指令系統與學生所學的8086匯編語言指令系統不兼容,影響了實驗效果,因此課程組教師開發了一款輔助軟件,通過該軟件對兩種匯編語言進行轉換,提高了學生的學習效率,取得了較好的效果。
關鍵詞:計算機組成原理實驗;TH-union+教學實驗系統;匯編語言轉換器
中圖分類號:G642.3 ? ? ? ? ?文獻標識碼:A ? ? ? ? ?文章編號:1002-4107(2015)08-0023-02
一、引言
《計算機組成原理》是計算機科學與技術專業、軟件工程專業的專業骨干課程,該課程圍繞著構成計算機的五大部件全面詳細的闡述了計算機的組成和各部件的工作原理,并引申出各部件的設計實現方法。
為了能夠讓學生對《計算機組成原理》這門課程有一個感性的理解,我院于2009年購置了由清華大學計算機學院研制開發的TH-union+教學實驗系統,將其應用于《計算機組成原理》實驗課程。TH-union+教學實驗系統本身就是一臺簡單的計算機,該實驗系統不僅能夠支持傳統的硬件實驗,而且創造性的在實驗系統中增加了匯編語言指令系統,使得很多傳統硬件實驗在連接了硬件電路之后,不再使用手動開關向存儲器輸入指令和數據的方式驗證電路的正確性,而是改用通過輸入匯編語言程序對電路的正確性進行驗證,大大提高了工作效率,也能夠更好的促進學生對理論知識的消化和理解。因此在實驗課程的設置中,全體實驗大致可以分成兩個部分,第一部分是結合TH-union+教學實驗系統現有的匯編語言編寫簡單的應用程序,以達到熟悉掌握實驗系統各部分硬件的目的。第二部分是在第一部分的基礎上由學生利用VHDL語言設計一個8位的CPU,并利用實驗系統的匯編語言進行編程,以驗證CPU設計的正確性。在整個實驗教學過程中,利用實驗系統的匯編語言編程是實驗的一個重要環節,但在教學過程中,我們發現,由于學生初次接觸該實驗系統,對它的匯編語言指令不熟悉,常常和已經學過的8086匯編語言指令混淆,導致利用實驗系統的匯編語言編程的能力不足,對后續實驗有一定的影響,因此我們課程組全體教師就有了設計一個匯編語言轉換器的想法。
二、對TH-union+教學實驗系統的改進
TH-union+教學實驗系統是一個優秀的《計算機組成原理》課程實驗教學平臺,它最初的受益者是清華大學計算機學院的學生,而我們黑龍江大學計算機學院軟件學院的學生與清華大學計算機學院的學生相比,動手能力、綜合技能還存在一定的差距,正是由于我院學生的這些差距,使我們必須對TH-union+教學實驗系統進行改進。
TH-union+教學實驗系統上有一個匯編語言,它和我們學過的8086匯編語言沒有任何關系。也就是說同學們要做計算機組成原理實驗就要再學一次匯編語言。這個匯編語言一共有48條指令,只有4種尋址方式,有16個寄存器,……,一切都變了。因此我們必須用一個方法使學生快速學會新的匯編語言,并利用它進行程序設計。
TH-union+教學實驗系統的設計者為了使實驗系統更接近真實的計算機在指令系統中設計了與輸入輸出操作有關的指令,使得程序在設計過程中可以進行輸入輸出操作。但是遺憾的是,學生在學習8086匯編語言時,所有的輸入輸出操作都是由DOS系統功能調用函數實現,沒有涉及到真正的底層硬件輸入輸出操作,現在在實驗系統上首次自己編寫輸入輸出函數,對學生具有一定的挑戰性,這是實驗系統的第二點需要改進的地方。
?三、解決方法
基于以上兩點,課程組全體教師決定自行開發一款輔助軟件,用來實現實驗系統的匯編語言程序與8086匯編語言程序相互轉換,進而指導輔助學生快速掌握TH-union+教學實驗系統的匯編語言和相關知識。
本輔助軟件是利用windows下linux模擬環境的flex工具和gcc編寫完成的。flex是linux下的一個用來開發編譯器的工具,主要用于詞法分析器的設計開發。由于本輔助軟件需要對兩種匯編語言的語句進行轉換,其過程包括大量的詞法分析工作,因此我們選用flex工具,以縮短開發周期。
本輔助軟件由兩個可執行文件、兩個示例程序和一個說明文件構成,兩個可執行文件暫時定名為my和your。my的功能是把TH-union+教學實驗系統的匯編語言程序轉換成8086匯編語言程序。your的功能是把8086匯編語言程序轉換成TH-union+教學實驗系統的匯編語言程序。
由于指令格式的原因,實驗系統的匯編語言指令操作數的尋址方式全部隱藏在操作碼中,也就是說在指令譯碼的時候,當指令譯碼器分析出指令功能的同時,也知道了指令中各操作數的尋址方式。這就使得實驗系統無論在指令數量還是在尋址方式方面都比8086匯編語言指令系統簡單,我們把實驗系統的匯編語言看成是8086匯編指令系統的子集。當my程序掃描到實驗系統匯編語言指令時,根據操作碼就可以判斷出它對應的8086匯編指令是什么,尋址方式是什么,然后轉換成8086匯編語言指令即可。通過my對兩種匯編語言相互轉換,提示學生注意兩種匯編語言的相同點,以便學生在閱讀實驗系統匯編程序時快速理解它的編程目的。
your的功能是把8086匯編語言程序轉換成實驗系統的匯編語言程序。在具體操作中,由于8086匯編語言比實驗系統的匯編語言復雜,所以需要做一些簡單的限制,以便程序轉換。
第一,我們約定your只能轉換正確的8086匯編語言程序。輔助軟件的設計目的之一是要學生在已經掌握8086匯編語言的基礎上,不需要再額外學習其他匯編語言就可以在實驗系統上編寫程序,因此我們假設學生能夠利用8086匯編語言在通用計算機上實現實驗程序的設計。為了便于學生利用8086匯編語言設計程序,我們在軟件包中增加了一個示例程序2.asm,它本身也是一個8086匯編語言程序框架,學生利用這個框架編程效率會更高。為了保證程序的正確性,在軟件中附帶了Boland公司的Turbo Assembler匯編語言編譯器(簡稱tasm),學生編寫的匯編語言可以用tasm編譯成可執行文件,以保證程序的正確性。
第二,我們要對8086匯編語言程序做簡單的語法分析。由于實驗系統匯編指令的操作數尋址方式都是固定的,而8086匯編語言的指令系統操作數尋址方式是不固定的,這就使我們不得不對8086匯編語言程序進行簡單的語法分析。
具體操作如下:轉換程序your掃描到一條指令首先對指令的操作碼部分進行分析,判斷該指令是否可以轉換成TH-union+教學實驗系統的匯編語言指令,如果可以就在指定變量中設置一個指令對應的數值,如果不能轉換就輸出一行字符串,提示用戶你的程序中使用了不可轉換的8086匯編語言指令,在轉換過程中把這條指令忽略。8086匯編語言指令系統是一個復雜指令系統,指令存在大量的功能冗余,因此輔助軟件采用忽略指令的方式,在這里也可以采用發現不可轉換的指令就發出錯誤提示,然后強行結束轉換的方式,但課程組老師考慮到每個人的編程習慣不同,所以采用前者比較溫和的提示方式。
然后是對操作數尋址方式的判斷,同樣根據不同的尋址方式在指定變量中設置對應的數值,如果是實驗平臺支持的尋址方式,就直接轉換成相應的實驗系統匯編語言指令,如果不是實驗平臺支持的尋址方式,系統將提示出現錯誤,并強行結束轉換。在這一過程中最麻煩的是一些尋址方式的轉換。例如在8086匯編語言指令系統中,雙操作數指令允許目的操作數采用寄存器尋址方式,源操作數采用立即尋址方式。例如:add ax,10,但是實驗系統的匯編語言規定雙操作數指令的兩個操作數都采用寄存器尋址方式,只有MVRD指令支持立即尋址,因此一旦發現上述指令,轉換程序將產生下面四條指令,以保證程序的正確性。
PUSH ?R15
MVRD R15,10
ADD ?R0,R15
POP ?R15
第三,我們要對輸入輸出指令單獨處理。由于TH-union+教學實驗系統有自己的輸入輸出指令,這些指令與8086匯編語言的輸入輸出指令完全不同,為了簡化問題,便于學生們迅速掌握串口操作,我們約定在編寫與輸入輸出操作有關的程序時,必須采用事先設計的宏。首先我們在示例程序2.asm中利用DOS系統功能的7號子功能和2號子功能實現基本的輸入輸出宏。在編程過程中凡是遇到輸入輸出操作都調用這兩個宏。然后我們把這兩個宏名加入到轉換程序中,當轉換程序掃描到這兩個宏名將自動生成對應的實驗系統匯編指令。在程序設計過程中,實驗系統的輸入輸出操作采用查詢方式,因此每次生成的實驗系統匯編程序里面一定要帶一個有條件跳轉指令和標號,在具體操作時,很可能出現多次使用輸入輸出操作,每次產生的標號都要不同,所以程序中必須對生成標號進行處理,這是此部分的設計重點。
本輔助軟件首次應用于2012級軟件學院的實驗教學中,提高了教學效率,取得較好的教學效果,同時也有許多熱心的同學對輔助軟件提出了寶貴的意見,課程組全體教師將根據師生的反饋意見進一步完善輔助軟件,為以后的實驗教學提供更多更好的支持。
參考文獻:
[1]王誠,劉衛東,宋佳興.計算機組成與設計:第三版[M].
北京:清華大學出版社,2008:7.
[2]王誠,劉衛東,宋佳興.計算機組成與設計實驗指導:第
三版[M].北京:清華大學出版社,2008:8.
[3]John R.Levine.lex與yacc:第二版[M].北京:機械工
業出版社,2003:1.