摘要:結(jié)合《微機(jī)原理及應(yīng)用》課程的教學(xué)實(shí)踐,闡述了以16位指令系統(tǒng)作為基礎(chǔ)的理由,簡(jiǎn)述了快速處理32位指令系統(tǒng)的方法,介紹了在宏匯編MASM 6. X IDE環(huán)境下調(diào)試16位和32位匯編程序的安排,最后,講述了編寫(xiě)Win32匯編程序的要點(diǎn)、Win32匯編程序集成開(kāi)發(fā)環(huán)境下的使用方法。
關(guān)鍵詞:匯編語(yǔ)言;指令系統(tǒng);宏匯編;Win32
中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)07-1473-03
在《微機(jī)原理及應(yīng)用》課程中,微處理器中的指令系統(tǒng)以及匯編語(yǔ)言編程是很重要的內(nèi)容,它是微機(jī)系統(tǒng)的主要組成部分之一。隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,微型計(jì)算機(jī)由16位微處理器早已過(guò)度到了32位微處理器,當(dāng)前,《微機(jī)原理及應(yīng)用》課程的內(nèi)容應(yīng)該以32位微機(jī)為主,而32位微處理器是基于16位微處理器的基礎(chǔ)之上產(chǎn)生與發(fā)展的,它兼容了16位微處理器8086的指令集,因此,在闡述32位微處理器指令系統(tǒng)時(shí),必然涉及到16位的指令,相應(yīng)的匯編語(yǔ)言編程也在發(fā)展,教學(xué)過(guò)程中如何優(yōu)化處理16位與32位指令系統(tǒng)及相應(yīng)的匯編語(yǔ)言編程,使學(xué)生能夠快速地學(xué)習(xí)與接受32位機(jī)的工作原理,提高教學(xué)效果,它是《微機(jī)原理及應(yīng)用》課程教學(xué)中的一個(gè)難點(diǎn),是一個(gè)值得探討的問(wèn)題。
1 《微機(jī)原理及應(yīng)用》課程中的指令集
32位微處理器指令系統(tǒng)包括基本指令集、浮點(diǎn)指令集、保護(hù)方式指令集以及擴(kuò)展指令集等。根據(jù)浮點(diǎn)運(yùn)算部件和浮點(diǎn)運(yùn)算格式,用浮點(diǎn)指令編寫(xiě)浮點(diǎn)運(yùn)算程序;保護(hù)方式指令集通常由系統(tǒng)程序員使用,編寫(xiě)操作系統(tǒng)程序,保護(hù)方式一般是由操作系統(tǒng)通過(guò)執(zhí)行初始化程序來(lái)設(shè)置的;CPU擴(kuò)展指令集指的是CPU增加的多媒體或者是3D處理指令,這些擴(kuò)展指令可以提高CPU處理多媒體和3D圖形的能力。一般在計(jì)算機(jī)課程教學(xué)中涉及的指令系統(tǒng)主要是基本指令集,因此,該文所討論的指令系統(tǒng)是指微處理器的基本指令以及應(yīng)用基本指令進(jìn)行的匯編語(yǔ)言編程。
2 教學(xué)中以16位指令系統(tǒng)作為基礎(chǔ)
微處理器的發(fā)展過(guò)程經(jīng)歷了從經(jīng)典的16位微處理器8086到80286、80386、80486、Pentium、多核等系列微處理器的演變和應(yīng)用。在教學(xué)中,首先還是要以8086 CPU為基礎(chǔ)組織教學(xué),介紹16位CPU的結(jié)構(gòu)及16位的指令系統(tǒng),理由如下:
第一,8086 CPU的內(nèi)部結(jié)構(gòu)簡(jiǎn)單,有利于學(xué)生學(xué)習(xí)與建立微處理器的概念。
8086微處理器的內(nèi)部主要包括執(zhí)行單元EU和總線(xiàn)接口單元BIU,它具有中央處理器(CPU)的經(jīng)典結(jié)構(gòu),使學(xué)生容易建立微處理器的概念。總線(xiàn)接口部件BIU是8086 CPU與外部存儲(chǔ)器和I/O端口的接口,它提供了16位雙向數(shù)據(jù)總線(xiàn)和20位地址總線(xiàn),負(fù)責(zé)CPU與存儲(chǔ)器及I/O端口之間的數(shù)據(jù)傳送操作。執(zhí)行部件EU從BIU中的指令隊(duì)列獲取指令,對(duì)指令進(jìn)行譯碼分析并執(zhí)行,執(zhí)行指令所需要的操作數(shù)和運(yùn)算結(jié)果都是通過(guò)總線(xiàn)接口部件與指定的內(nèi)存單元或外設(shè)端口進(jìn)行傳送的。
在一般教材中,高檔微處理器的結(jié)構(gòu)則側(cè)重于其他復(fù)雜功能塊的分析,不易為初學(xué)者接受。
第二,8086 CPU內(nèi)部各組寄存器結(jié)構(gòu)清晰,通過(guò)DEBUG調(diào)試程序或MASM匯編程序,很容易驗(yàn)證,而且,學(xué)生理解8086 CPU內(nèi)部寄存器組后,很容易理解32位微處理器內(nèi)部擴(kuò)充后的寄存器組。
8086 CPU內(nèi)部分為:8個(gè)16位通用寄存器,每個(gè)寄存器還有它們各自的專(zhuān)用場(chǎng)合;4個(gè)段寄存器都有各自所代表的內(nèi)存段;16位的指令指針I(yè)P用來(lái)存放將要執(zhí)行的下一條指令在當(dāng)前代碼段中的偏移地址,它與代碼段寄存器CS聯(lián)用,以確定下一條指令的物理地址; 16位的標(biāo)志寄存器(FLAGS)只定義了9位,分為兩類(lèi),一類(lèi)用于反映部分指令(例算術(shù)運(yùn)算及邏輯運(yùn)算指令)執(zhí)行結(jié)果的狀態(tài),常用作后續(xù)條件轉(zhuǎn)移指令的轉(zhuǎn)移控制條件,另一類(lèi)為控制標(biāo)志,用來(lái)控制CPU的操作。
如果學(xué)生從理論與實(shí)踐上,理解與認(rèn)同了8086 CPU內(nèi)部的寄存器后,一方面對(duì)微處理器的工作原理有了較系統(tǒng)的認(rèn)識(shí),另一方面,對(duì)于下一步學(xué)習(xí)32位微處理器,奠定了堅(jiān)實(shí)的基礎(chǔ)。
3 教學(xué)中快速處理32位指令系統(tǒng)
由于學(xué)生從理論與實(shí)踐(上機(jī))兩方面,已經(jīng)掌握了16位機(jī)的指令系統(tǒng),如何快速處理32位指令系統(tǒng),首先,要簡(jiǎn)單介紹32位CPU內(nèi)部寄存器的編程結(jié)構(gòu),比如,通用寄存器擴(kuò)充到了32位,增加了兩個(gè)段寄存器(FS、GS)等。然后,著重介紹32位機(jī)的尋址方式,32位機(jī)與16位機(jī)尋址方式絕大部分是相同的,主要是32位機(jī)尋址內(nèi)存方式多,而且靈活,因此,要重點(diǎn)介紹32位機(jī)尋址內(nèi)存的幾種方式。
4 在宏匯編MASM 6.X IDE環(huán)境下調(diào)試程序
MASM 6.X是一個(gè)IDE環(huán)境(集成開(kāi)發(fā)環(huán)境),它將匯編語(yǔ)言源程序的編輯、匯編、執(zhí)行、調(diào)試合為一體,呈現(xiàn)在程序員面前的是一個(gè)窗口,使用非常方便。MASM 6.X將匯編程序和調(diào)試程序(DEBUG)集成到一起,使程序的開(kāi)發(fā)和調(diào)試結(jié)合的更緊密。MASM 6.X最具特色的是能夠匯編簡(jiǎn)化段模式的匯編語(yǔ)言源程序,可用于簡(jiǎn)化段程序的設(shè)計(jì)及匯編16、32位指令的程序,還提供了類(lèi)似于高級(jí)語(yǔ)言的IF/ELSE分支結(jié)構(gòu)、WHILE和REPEAT/UNTIL循環(huán)結(jié)構(gòu),使編寫(xiě)匯編語(yǔ)言程序和編寫(xiě)高級(jí)語(yǔ)言程序一樣方便。現(xiàn)在最新的匯編程序MASM32支持32位段操作,可以構(gòu)造出窗口程序,功能已接近于高級(jí)語(yǔ)言程序。
16位匯編語(yǔ)言編程以完整段格式編寫(xiě),32位匯編語(yǔ)言編程以簡(jiǎn)化段格式編寫(xiě),程序不在于多,但具有典型性。由于《微機(jī)原理及應(yīng)用》課程總學(xué)時(shí)數(shù)不可能完全滿(mǎn)足教學(xué)的需求,所以,在上機(jī)學(xué)時(shí)的分配上,MASM 6.x IDE環(huán)境的熟悉與16位匯編語(yǔ)言上機(jī)4學(xué)時(shí),32位匯編語(yǔ)言上機(jī)6學(xué)時(shí)。
5 在Win32匯編語(yǔ)言集成開(kāi)發(fā)環(huán)境下調(diào)試程序
Win32匯編語(yǔ)言程序是構(gòu)筑在Win32 API基礎(chǔ)上的。在Win32 API中,包括了大量的函數(shù)、結(jié)構(gòu)和消息等,它不僅為應(yīng)用程序所調(diào)用,也是Windows自身的一部分,Windows自身的運(yùn)行也調(diào)用這些API函數(shù)。
Win32環(huán)境中的API編程接口實(shí)際上代替了DOS中的軟中斷,和DOS的結(jié)構(gòu)相比,Win32的系統(tǒng)功能模塊放在Windows的動(dòng)態(tài)鏈接庫(kù)(DLL)中,DLL是一種Windows的可執(zhí)行文件,采用的是和.exe文件同樣的PE格式,在PE格式文件頭的導(dǎo)出表中,以字符串形式指出了這個(gè)DLL能提供的函數(shù)列表。應(yīng)用程序使用字符串類(lèi)型的函數(shù)名來(lái)指定要調(diào)用的函數(shù)。應(yīng)用程序在使用的時(shí)候由Windows自動(dòng)裝入DLL程序,并調(diào)用相應(yīng)的函數(shù)。
5.1 Win32匯編語(yǔ)言程序集成開(kāi)發(fā)環(huán)境的使用
Win32匯編語(yǔ)言程序集成開(kāi)發(fā)環(huán)境下的使用并不復(fù)雜,大致過(guò)程如下:
1)啟動(dòng)Win32匯編語(yǔ)言程序集成開(kāi)發(fā)環(huán)境;
2)匯編語(yǔ)言編程的第一步是建立一個(gè)新文件,所以在菜單中選擇“File”→“New”建立一個(gè)新文件;
3)第二步是進(jìn)行文件的編輯,編輯包括程序輸入、插入、刪除、修改和保存,最后生成文件的后綴是.asm。
4)匯編語(yǔ)言編程的第三步是匯編和連接源程序,生成可執(zhí)行文件。所以在菜單中選擇“Project”→“Build All”來(lái)完成此工作;
5)在匯編和連接無(wú)錯(cuò)誤的情況下,會(huì)自動(dòng)生成可執(zhí)行程序,在菜單中選擇“Project”→“Run Program”,執(zhí)行程序得到結(jié)果。
5.2 Win32匯編語(yǔ)言程序的理論教學(xué)與上機(jī)
Win32匯編語(yǔ)言程序的編寫(xiě),是一個(gè)重要的問(wèn)題,建議講解4學(xué)時(shí)。主要講解內(nèi)容:
1)針對(duì)簡(jiǎn)單的Win32匯編語(yǔ)言源程序,講述有關(guān)模式的定義、頭文件和庫(kù)文件的加載、程序段的定義、Win32匯編源程序注釋和換行的規(guī)定;
2)關(guān)于API的說(shuō)明與調(diào)用API;
3)Win32匯編語(yǔ)言程序設(shè)計(jì)方法和實(shí)例。
Win32匯編語(yǔ)言程序的實(shí)踐教學(xué),教師提供2學(xué)時(shí)的上機(jī)范例,包括機(jī)房講解Win32匯編語(yǔ)言程序集成開(kāi)發(fā)環(huán)境。學(xué)生自己編程,上機(jī)2~4學(xué)時(shí),共計(jì)6學(xué)時(shí)左右。
6 結(jié)束語(yǔ)
匯編語(yǔ)言程序設(shè)計(jì)在計(jì)算機(jī)專(zhuān)業(yè)是一門(mén)獨(dú)立的課程,在《微機(jī)原理及應(yīng)用》課程中講解匯編語(yǔ)言程序設(shè)計(jì),由于其內(nèi)容非常豐富、涉及知識(shí)面寬、難度大,教學(xué)組織困難,學(xué)生難學(xué)。我們將《微機(jī)原理及應(yīng)用》課程作為精品課程進(jìn)行建設(shè),通過(guò)不斷地學(xué)習(xí)、教學(xué)實(shí)踐以及編寫(xiě)教材,總結(jié)出了自己的認(rèn)識(shí)與體會(huì),教學(xué)效果較好。
參考文獻(xiàn):
[1] 李華貴,李鵬. 微機(jī)原理與接口技術(shù)[M]. 北京:電子工業(yè)出版社,2010.
[2] 錢(qián)曉捷. 微機(jī)原理與接口技術(shù)[M]. 北京:機(jī)械工業(yè)出版社,2008.
[3] 馬興錄等. 32位微機(jī)原理與接口技術(shù)[M]. 北京:化學(xué)工業(yè)出版社,2009.