0
首頁(yè) 精品范文 匯編程序

匯編程序

時(shí)間:2023-05-30 09:27:09

開(kāi)篇:寫(xiě)作不僅是一種記錄,更是一種創(chuàng)造,它讓我們能夠捕捉那些稍縱即逝的靈感,將它們永久地定格在紙上。下面是小編精心整理的12篇匯編程序,希望這些內(nèi)容能成為您創(chuàng)作過(guò)程中的良師益友,陪伴您不斷探索和進(jìn)步。

第1篇

一、序言

近年來(lái),隨著C語(yǔ)言的進(jìn)一步推廣使用,絕大多數(shù)的工程師都傾向于使用C語(yǔ)言進(jìn)行單片機(jī)系統(tǒng)開(kāi)發(fā),匯編語(yǔ)言由于可讀性、通用性、可移植性差的原因,很難滿足產(chǎn)品開(kāi)發(fā)的需求。但是匯編語(yǔ)言具有執(zhí)行效率高、占用內(nèi)存空間小等特點(diǎn),在某些應(yīng)用領(lǐng)域還是具有無(wú)可替代的作用。

本文結(jié)合Keil μVision2程序開(kāi)發(fā)流程,描述了51單片機(jī)匯編程序多文件編譯的實(shí)現(xiàn)方法。通過(guò)多文件編譯的使用,大大提高了匯編程序代碼的可讀性、可擴(kuò)展性,同時(shí)也很大程度地提高程序代碼的執(zhí)行效率以及內(nèi)存空間的使用率,避免內(nèi)存空間的浪費(fèi)。

二、Keil μVision2程序開(kāi)發(fā)流程簡(jiǎn)介

Keil μVision2是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)軟件集成開(kāi)發(fā)環(huán)境,該軟件提供宏匯編器、鏈接/定位器、庫(kù)管理器、調(diào)試器以及目標(biāo)文件轉(zhuǎn)換器等工具,是51單片機(jī)系統(tǒng)開(kāi)發(fā)的首選工具。

Keil μVision2集成開(kāi)發(fā)環(huán)境的編譯流程如下:首先宏匯編器對(duì)匯編源程序文件進(jìn)行編譯,生成擴(kuò)展名為.OBJ的目標(biāo)文件和擴(kuò)展名為.LST的列表文件,緊接著鏈接/定位器將所有的.OBJ文件進(jìn)行絕對(duì)地址分配,鏈接生成包含絕對(duì)地址的目標(biāo)文件和擴(kuò)展名為.M51的地址文件,最后由目標(biāo)文件轉(zhuǎn)換器生成可用于編程器燒寫(xiě)、擴(kuò)展名為.HEX的可執(zhí)行文件。

三、匯編程序多文件編譯實(shí)現(xiàn)

在Keil μVision2集成開(kāi)發(fā)環(huán)境下,我們可以根據(jù)不同的硬件模塊、功能模塊分開(kāi)編寫(xiě)應(yīng)用子程序,進(jìn)行模塊化管理,實(shí)現(xiàn)多文件編譯,這樣就可以大大提高匯編程序代碼的可讀性、可擴(kuò)展性。以下首先對(duì)段和模塊的概念進(jìn)行描述。

一個(gè)段可以是一塊程序代碼或者是一個(gè)數(shù)據(jù)塊。根據(jù)其地址空間是否可以被鏈接/定位器更改,段可以分為可定位段和絕對(duì)地址段。在定義可重定位段的時(shí)候需要對(duì)其段名、類型及其屬性進(jìn)行定義。一個(gè)段可以分在不同的程序模塊中,只要具有相同的段名,在編譯過(guò)程中鏈接/定位器會(huì)把它們合并到一起。在定義絕對(duì)地址段的時(shí)候直接人為分配絕對(duì)地址,鏈接/定位器不能對(duì)改地址進(jìn)行更改。絕對(duì)地址段沒(méi)有段名,也不能給其他段結(jié)合。

模塊是一個(gè)可以被單獨(dú)編譯的代碼單元,可以包含一個(gè)或多個(gè)段或者部分段,一個(gè)模塊既可以是單個(gè)文本文件,也可以通過(guò)INCLUDE指令把幾個(gè)文本文件合并在一起。在程序編譯過(guò)程中,匯編器會(huì)把一個(gè)模塊編譯為一個(gè)目標(biāo)文件,也就是一個(gè)模塊對(duì)應(yīng)一個(gè).OBJ文件。

根據(jù)以上對(duì)段和模塊的描述,匯編程序的多文件編譯可以通過(guò)以下三個(gè)方法來(lái)實(shí)現(xiàn):

1、通過(guò)INCLUDE指令合并源文件

在代碼編寫(xiě)時(shí),通過(guò)INCLUDE指令可以將一個(gè)源文件插入到當(dāng)前源文件中,這樣匯編器在編譯的時(shí)候就會(huì)將INCLUDE指令之后的文件合并到當(dāng)前文件進(jìn)行編譯,生成一個(gè)擴(kuò)展名為.OBJ的目標(biāo)文件。INCLUDE指令的格式如下:

$ INCLUDE (文件名)

通過(guò)該方式實(shí)現(xiàn)多文件編譯時(shí),插入的源文件既可以是擴(kuò)展名為.ASM的匯編源程序文件,也可以是擴(kuò)展名為.INC的包含文件。注意在被包含的源文件結(jié)尾不能有END指令,否則編譯會(huì)停止運(yùn)行。

2、通過(guò)絕對(duì)地址段實(shí)現(xiàn)多文件編譯

Keil μVision2中提供以下定義絕對(duì)地址段的指令,通過(guò)這些指令可以定義代碼段和各種數(shù)據(jù)段,并指定其絕對(duì)地址。

由于絕對(duì)地址段在定義的時(shí)候?qū)Φ刂愤M(jìn)行了分配,鏈接/定位器不能夠?qū)ζ涞刂愤M(jìn)行更改,因此很容易造成地址重疊或者內(nèi)存空間浪費(fèi),而且在后續(xù)對(duì)程序進(jìn)行維護(hù)、升級(jí)的時(shí)候很有可能需要重新對(duì)地址進(jìn)行分配,非常不利于程序的擴(kuò)展和維護(hù)。因此絕對(duì)地址段通常是用在某些特定的場(chǎng)合,例如確定中斷向量的入口地址、數(shù)據(jù)存儲(chǔ)空間等。

3、通過(guò)可重定位段實(shí)現(xiàn)多文件編譯

在Keil μVision2中,通過(guò)SEGMENT指令即可定義可重定位段。定義可重定位段時(shí)必須指定段的名稱和存儲(chǔ)類型,其格式如下:

四、總結(jié)

通過(guò)以上三種方式,均可以實(shí)現(xiàn)多文件編譯,但是在實(shí)際使用過(guò)程中,INCLUDE指令通常用于包含特殊功能寄存器的定義等;絕對(duì)地址段則通常用于確定中斷向量的入口地址、數(shù)據(jù)存儲(chǔ)空間;而可重定位段的方式則廣泛地用于各種代碼段或數(shù)據(jù)段的定義。

通過(guò)多文件編譯的方式,解決了單文件編譯會(huì)導(dǎo)致程序文件過(guò)于臃腫、可讀性差、不便于維護(hù)等缺點(diǎn),大大提高匯編程序代碼的可讀性以及可維護(hù)性。

參考文獻(xiàn)

[1] Keil Software. A51/AX51/A251 Macro Assembler and Utilities.2001.

第2篇

一、C語(yǔ)言與匯編語(yǔ)言的混合編程方法分析

混合編程方法包括C語(yǔ)言調(diào)用匯編語(yǔ)言子程序、匯編語(yǔ)言調(diào)用C語(yǔ)言子程序和C語(yǔ)言程序嵌入?yún)R編語(yǔ)言三種。第一,C語(yǔ)言調(diào)用匯編語(yǔ)言子程序需要遵循以下規(guī)則。一是根據(jù)參數(shù)順序,依據(jù)反序順序?qū)?shù)壓入堆棧中。二是依據(jù)參數(shù)的值進(jìn)行傳遞;三是使用“EXTERN”對(duì)函數(shù)顯示進(jìn)行說(shuō)明,函數(shù)名使用下劃線格式的8個(gè)字符以內(nèi)的名字命名;四是對(duì)代碼段加以說(shuō)明,并使用“—TEXT”作為代碼段命名原則。五是匯編程序的參數(shù)取C程序的參數(shù);六是匯編程序需要兼顧保護(hù)寄存器。基于以上6個(gè)原則,C語(yǔ)言與匯編語(yǔ)言混合編程時(shí),匯編過(guò)程需要遵守規(guī)定的開(kāi)頭及結(jié)尾格式。第二,匯編語(yǔ)言調(diào)用C語(yǔ)言子程序則不需要改變匯編語(yǔ)言主程序和子程序的格式,只需主程序和子程序的格式保持一致,再開(kāi)始前使用“EXTREN函數(shù)名”用于表明身份,表示該函屬于調(diào)用C語(yǔ)言子程序的外部函數(shù)。第三,C語(yǔ)言程序嵌入?yún)R編語(yǔ)言包括兩種:一是C程序調(diào)用匯編子程序模塊和C程序嵌入?yún)R編指令兩種。C程序調(diào)用會(huì)匯編子程序模塊需根據(jù)主程序和模塊編寫(xiě)語(yǔ)言確定,如果主程序?yàn)镃語(yǔ)言、模塊為匯編語(yǔ)言,則需要使用C程序調(diào)用匯編子模塊。C程序嵌入?yún)R編指令主要用于處理C語(yǔ)言無(wú)法控制硬件的情況。例如修改中斷標(biāo)志寄存器、重復(fù)使用某種功能可采用C語(yǔ)言嵌入?yún)R編指令的方式實(shí)現(xiàn)。

二、C語(yǔ)言與匯編語(yǔ)言連接的關(guān)鍵問(wèn)題要實(shí)現(xiàn)

C語(yǔ)言與匯編語(yǔ)言之間的連接還需要解決參數(shù)關(guān)系、確定調(diào)用關(guān)系和模塊連接三個(gè)問(wèn)題。參數(shù)關(guān)系是混合編程過(guò)程中必須解決的問(wèn)題,多數(shù)程序員均采用堆棧方式解決參數(shù)傳遞問(wèn)題,具體操作為:以匯編語(yǔ)言中的BP作為機(jī)制寄存器,以反序多為調(diào)用順序,將C語(yǔ)言中的參數(shù)壓入堆棧中,且BP根據(jù)參數(shù)加入相應(yīng)的偏移量即可實(shí)現(xiàn)參數(shù)使用。而確定調(diào)用關(guān)系則需要說(shuō)明要調(diào)用的函數(shù)或過(guò)程,并確定調(diào)用及其調(diào)用關(guān)系。外部模型可調(diào)用被調(diào)用的函數(shù)或被調(diào)用過(guò)程,調(diào)用程序需說(shuō)明被引用的外部模塊的名稱。實(shí)現(xiàn)匯編程序與C程序模塊連接需要保證不同語(yǔ)言模塊的存儲(chǔ)模式相同以及遵守C兼容的函數(shù)及變量命名約定。

三、結(jié)語(yǔ)

隨著計(jì)算機(jī)技術(shù)的提高及計(jì)算及應(yīng)用范圍擴(kuò)大,許多領(lǐng)域的控制工作都得到極大的簡(jiǎn)化,而且C語(yǔ)言這一高級(jí)程序設(shè)計(jì)語(yǔ)言的應(yīng)用也愈加廣泛,豐富了計(jì)算機(jī)軟件的功能及內(nèi)容。然而,信息技術(shù)始終處于不斷發(fā)展?fàn)顟B(tài),人們對(duì)計(jì)算機(jī)軟件編程的要求也在逐漸提高,程序員仍需要深入了解C語(yǔ)言的特性,強(qiáng)化C語(yǔ)言運(yùn)用,利用C語(yǔ)言實(shí)現(xiàn)計(jì)算機(jī)軟件的多功能,不斷創(chuàng)新和開(kāi)發(fā)信的軟件。最后,程序員還需要合理運(yùn)用C語(yǔ)言和匯編語(yǔ)言進(jìn)行綜合編程,簡(jiǎn)化軟件編寫(xiě)過(guò)程,提高軟件使用效率。

作者:芮素文單位:安徽國(guó)防科技職業(yè)學(xué)院

第3篇

關(guān)鍵詞:匯編語(yǔ)言源程序;匯編;Debug 調(diào)試

匯編語(yǔ)言作為一種介于機(jī)器語(yǔ)言和高級(jí)語(yǔ)言之間的程序設(shè)計(jì)語(yǔ)言,有其獨(dú)有的特點(diǎn)和應(yīng)用場(chǎng)合。用匯編語(yǔ)言編寫(xiě)的解決應(yīng)用問(wèn)題的程序稱作匯編語(yǔ)言源程序;將匯編語(yǔ)言源程序翻譯成機(jī)器語(yǔ)言程序的軟件稱作匯編程序;將匯編語(yǔ)言源程序翻譯成機(jī)器語(yǔ)言程序的過(guò)程稱作匯編。匯編語(yǔ)言源程序上機(jī)運(yùn)行需要MS-DOS操作系統(tǒng)的支持,也可運(yùn)行在Windows 98以上的MS-DOS環(huán)境中。

二、匯編源程序

用編輯軟件建立的源程序.asm文件,必須經(jīng)過(guò)匯編才能產(chǎn)生.obj文件。

本步驟最需要注意的問(wèn)題就是所用的masm匯編程序和編輯好的匯編語(yǔ)言源程序的路徑,只要不在默認(rèn)目錄下的都要輸入他們的實(shí)際路徑,為此需鍵入:”e:\masm\masm 123”,因?yàn)閰R編語(yǔ)言源程序123.asm已經(jīng)保存在默認(rèn)目錄C:\Documents and Settings\Administrator下,就不用輸入詳細(xì)路徑,而匯編程序masm不在默認(rèn)目錄下,故需要輸入該程序所在的詳細(xì)路徑e:\masm\masm,如下圖所示。

以上信息中方括中為該項(xiàng)提示的缺省回答值,冒號(hào)后面等待用戶輸入信息,若不改變?nèi)笔≈祫t直接按回車鍵。

匯編后生成以下幾個(gè)文件:

(1).OBJ文件是匯編產(chǎn)生的目標(biāo)代碼文件,當(dāng)源程序中無(wú)語(yǔ)法錯(cuò)誤時(shí),則在默認(rèn)目錄下自動(dòng)存入一個(gè).OBJ文件,供下一步連接用。若源程序有語(yǔ)法錯(cuò)誤時(shí),會(huì)出現(xiàn)錯(cuò)誤信息提示,如上圖所示。

(2).LST文件是列表文件,它將源程序中各語(yǔ)句及其對(duì)應(yīng)的目標(biāo)代碼和符號(hào)表以清單方式列出,對(duì)調(diào)試程序有幫助。

(3).CRF文件(交叉引用文件),交叉引用.CRF文件給出了源程序中定義的符號(hào)引用情況,按字母順序排列。

三、 連接目標(biāo)程序

匯編產(chǎn)生的.OBJ文件,組成該文件所有目標(biāo)代碼的地址都是浮動(dòng)的,機(jī)器不能執(zhí)行。必須用連接程序LINK對(duì)其進(jìn)行連接定位,產(chǎn)生.EXE可執(zhí)行文件,方可運(yùn)行。該步驟和上一步有同樣需要注意的路徑問(wèn)題,輸入連接程序LINK的實(shí)際路徑,需要連接的.OBJ文件在默認(rèn)目錄下,可不用輸入路徑。

連接后生成兩種文件:.EXE和.MAP

(1).EXE文件是可執(zhí)行文件,若采用方括號(hào)中默認(rèn)的名字,直接按回車鍵,否則需重新輸入一文件名。若連接過(guò)程中無(wú)錯(cuò)誤,則自動(dòng)在當(dāng)前默認(rèn)目錄下生成.EXE文件。若有錯(cuò)誤,則會(huì)給出錯(cuò)誤信息提示,這時(shí)必須重新修改源程序,再匯編、連接。

(2).MAP是連接映像文件,.LIB庫(kù)文件,連接程序詢問(wèn)是否使用某種庫(kù)文件,不需使用庫(kù)文件直接按回車鍵。

四、運(yùn)行程序

連接后生成的.EXE文件存放在當(dāng)前的默認(rèn)目錄下,在DOS環(huán)境下直接鍵入文件名即可運(yùn)行。

結(jié)論

總體上說(shuō),要掌握匯編語(yǔ)言源程序上機(jī)運(yùn)行的操作過(guò)程,還是應(yīng)該理解每一步驟的作用及原理,理解后就知道為什么要這樣操作,該注意哪些問(wèn)題,發(fā)生錯(cuò)誤該怎樣改正。因此匯編語(yǔ)言的學(xué)習(xí)不只是理解它全部的指令含義,還要理解它上機(jī)運(yùn)行的原理。通過(guò)學(xué)習(xí)匯編語(yǔ)言,能夠加深對(duì)計(jì)算機(jī)原理和操作系統(tǒng)等課程的理解;能夠感知、體會(huì)和理解機(jī)器的邏輯功能,也為理解各種軟件系統(tǒng)的原理,打下技術(shù)理論基礎(chǔ)。

參考文獻(xiàn)

第4篇

關(guān)鍵詞:匯編語(yǔ)言程序設(shè)計(jì); 教學(xué)方法; 內(nèi)聯(lián)編程

1課程的現(xiàn)狀

匯編語(yǔ)言不同于其它高級(jí)語(yǔ)言,必須要求編程人員有一定的硬件基礎(chǔ),如對(duì)CPU的結(jié)構(gòu)、CPU與存儲(chǔ)器等部件的數(shù)據(jù)傳送過(guò)程必須要有基本的了解,這樣才能學(xué)好這門課程。在教學(xué)過(guò)程中,我們發(fā)現(xiàn)學(xué)生對(duì)高級(jí)語(yǔ)言編程學(xué)習(xí)積極性高,對(duì)匯編語(yǔ)言課程缺乏興趣,因?yàn)檎n程本身指令復(fù)雜,規(guī)定繁多,再加上學(xué)習(xí)匯編指令前對(duì)CPU的相關(guān)工作過(guò)程理解不透,導(dǎo)致學(xué)生厭學(xué),又由于本課程面對(duì)的低年級(jí)學(xué)生只有高級(jí)語(yǔ)言的基礎(chǔ),習(xí)慣于高級(jí)語(yǔ)言的自然表達(dá),初次接觸計(jì)算機(jī)硬件知識(shí)心理上有恐懼感,更難以適應(yīng)繁雜的低級(jí)語(yǔ)言。

針對(duì)本課程的特點(diǎn),對(duì)教學(xué)內(nèi)容、環(huán)節(jié)、過(guò)程等進(jìn)行了精心設(shè)計(jì),下面就教學(xué)方法的設(shè)計(jì)、實(shí)踐教學(xué)方法、課程考核形式等方面進(jìn)行的一系列改革進(jìn)行詳細(xì)探討。

2教學(xué)方法設(shè)計(jì)改革

為了避免學(xué)生因指令復(fù)雜,規(guī)定繁多、難度大而對(duì)該課程產(chǎn)生畏懼的學(xué)習(xí)心理,教師有必要對(duì)教學(xué)內(nèi)容進(jìn)行合理組織,對(duì)教學(xué)過(guò)程進(jìn)行精心的設(shè)計(jì)。

2.1利用FLASH技術(shù),使教學(xué)難點(diǎn)容易理解

在多年的教學(xué)過(guò)程中,我發(fā)現(xiàn)學(xué)生在學(xué)習(xí)CPU結(jié)構(gòu)這章節(jié)中,對(duì)介紹的CPU由哪些寄存器(名稱、大小)構(gòu)成,各個(gè)寄存器的含義,用途,CPU與存儲(chǔ)器等部件的數(shù)據(jù)傳送過(guò)程,會(huì)覺(jué)得很抽象,多數(shù)同學(xué)都是采用死記硬背的方式,這章節(jié)是第二章節(jié)的內(nèi)容,也是能否學(xué)好該課程關(guān)鍵的一章,如果理解不深,這無(wú)疑為后續(xù)的學(xué)習(xí),特別是尋址方式的學(xué)習(xí)埋下了隱患。

針對(duì)這個(gè)問(wèn)題,教師有必要對(duì)教學(xué)過(guò)程進(jìn)行精心的設(shè)計(jì)。

在這章節(jié)中我們利用FLASH技術(shù),把各種尋址方式下傳送指令的CPU與存儲(chǔ)器等部件的數(shù)據(jù)傳送過(guò)程以動(dòng)畫(huà)形式展現(xiàn)給學(xué)生,使得復(fù)雜,抽象的過(guò)程變得直觀,學(xué)生理解比較容易,也加深了對(duì)尋址方式的記憶。

2.2對(duì)比法教學(xué)

目前計(jì)算機(jī)專業(yè)的課程設(shè)置中,《匯編程序語(yǔ)言的程序設(shè)計(jì)》課程通常是學(xué)習(xí)完C語(yǔ)言課程之后開(kāi)始學(xué)習(xí)的。所以在教學(xué)中可以采用對(duì)比法來(lái)講解課程,對(duì)某些語(yǔ)法知識(shí)點(diǎn)和程序設(shè)計(jì)過(guò)程我們可以以C語(yǔ)言和匯編語(yǔ)言對(duì)應(yīng)分析。

例如在介紹寄存器時(shí),由于在一般的c語(yǔ)言程序中并沒(méi)有直接使用到寄存器。因此,我們使用vC++6.0環(huán)境下的調(diào)試工具顯示一個(gè)c語(yǔ)言程序及其對(duì)應(yīng)的機(jī)器碼,讓學(xué)生看到編寫(xiě)匯編程序寄存器的用途,加深了學(xué)生對(duì)匯編語(yǔ)言程序的理解。

int m=5,n=6,c;

004010E8 mov dword ptr [ebp-4],5

004010EF mov dword ptr [ebp-8],6

c=m+n;

004010F6 mov eax,dword ptr [ebp-4]

004010F9 add eax,dword ptr [ebp-8]

004010FC mov dword ptr [ebp-0Ch],eax

在介紹語(yǔ)法知識(shí)時(shí),比如變量的定義:

C語(yǔ)言中的變量定義形式如下:

int c1,c2=0;

匯編語(yǔ)言的變量定義形式如下:

cl DW ?

c2 DW 0 轉(zhuǎn)貼于

2.3抽象概念的比喻教學(xué)法

在對(duì)段地址和偏移地址的講解過(guò)程中,可以采用比喻法,把操作數(shù)比喻成學(xué)生,把教室的房間號(hào)比喻成段地址,教室內(nèi)每個(gè)座位編個(gè)號(hào),編號(hào)就是偏移地址,要想到教室把某個(gè)學(xué)生找到,就要找到相應(yīng)的教室號(hào),再到對(duì)應(yīng)的座位號(hào)找到這個(gè)學(xué)生,同理,要想把主存中的操作數(shù)找到就要找到段地址和相應(yīng)的偏移地址,另外要讓學(xué)生知道每個(gè)教室里的座位號(hào)都是從0號(hào)開(kāi)始編號(hào)的,也就是每個(gè)段里的偏移地址如果不特別指定,也是從0號(hào)開(kāi)始編號(hào)的。

3實(shí)踐教學(xué)改革

3.1增強(qiáng)實(shí)驗(yàn)環(huán)節(jié),做一些實(shí)際項(xiàng)目

程序設(shè)計(jì)對(duì)于大多數(shù)的初學(xué)者來(lái)說(shuō)有一定的難度。對(duì)于給定的一個(gè)實(shí)驗(yàn)題目,許多學(xué)生往往感到無(wú)從下手。目前的上機(jī)實(shí)驗(yàn)時(shí)間往往很短,常常是學(xué)生才剛剛有點(diǎn)入門,實(shí)驗(yàn)環(huán)節(jié)就結(jié)束了;且課外實(shí)踐環(huán)節(jié)幾乎沒(méi)有,導(dǎo)致學(xué)生即使課內(nèi)學(xué)的再好也不會(huì)應(yīng)用。

在實(shí)驗(yàn)設(shè)計(jì)方面可以先把一些經(jīng)典的程序提供給學(xué)生,例如分支結(jié)構(gòu)的設(shè)計(jì)、循環(huán)結(jié)構(gòu)的設(shè)計(jì)等,讓學(xué)生在寫(xiě)出C語(yǔ)言程序之后再設(shè)計(jì)匯編程序,找出兩者編程思維的區(qū)別。這樣通過(guò)一段時(shí)間的經(jīng)驗(yàn)積累,就能夠編寫(xiě)比較復(fù)雜的的程序,由于上機(jī)時(shí)間有限,可以每次實(shí)驗(yàn)課之后布置一些題目供學(xué)生選擇思考,讓學(xué)生課外分組來(lái)設(shè)計(jì)這些程序,題目的類型可以是研討型的讓學(xué)生從更多的角度去思考上機(jī)實(shí)驗(yàn)過(guò)的題目,編寫(xiě)出不同的程序;另一種為編程型,

例如可以設(shè)置這2道題目,音樂(lè)小鍵盤(pán)、貪吃蛇游戲等,以加強(qiáng)同學(xué)們的編程能力的訓(xùn)練。

3.2采用與高級(jí)語(yǔ)言混合編程

目前越來(lái)越多的場(chǎng)合要使用匯編語(yǔ)言和高級(jí)語(yǔ)言進(jìn)行混合編程,因此在教學(xué)時(shí)應(yīng)強(qiáng)調(diào)匯編語(yǔ)言和C/C++的混合編程,并且這樣也可以為今后嵌入式系統(tǒng)軟件開(kāi)發(fā)的學(xué)習(xí)打下堅(jiān)實(shí)的軟硬件基礎(chǔ)。

在實(shí)驗(yàn)課中可以借助 Visual C++開(kāi)發(fā)工具,采用內(nèi)聯(lián)匯編的方式,在 C/C++源程序中嵌入?yún)R編指令序列完成一定的功能,并讓學(xué)生設(shè)置斷點(diǎn)然后跟蹤執(zhí)行,同時(shí)注意觀察寄存器的內(nèi)容和變量的值。這樣可以一方面讓同學(xué)們熟練掌握兩種語(yǔ)言的切換使用,另一方面讓他們感受到兩種語(yǔ)言各有特點(diǎn)。例如可以利用匯編語(yǔ)言處理高級(jí)語(yǔ)言中不方便處理的一些問(wèn)題。

4課程考核形式改革

因?yàn)椤皡R編語(yǔ)言程序設(shè)計(jì)”是實(shí)踐性很強(qiáng)的一門課程,所以實(shí)驗(yàn)課成績(jī)應(yīng)該在總成績(jī)中占有相當(dāng)大的比重。目前大多數(shù)高校的匯編語(yǔ)言課程的實(shí)驗(yàn)課成績(jī)只占很小的比重,即理論知識(shí)往往占課程期末考核總成績(jī)的70%~80%,這樣往往會(huì)導(dǎo)致學(xué)生不得不將大量的精力放在理論知識(shí)的學(xué)習(xí)中,結(jié)果只會(huì)造就大批的應(yīng)試高手。在教學(xué)中,我們遇到過(guò)有的學(xué)生考試試卷能考90分以上,卻連最基本的計(jì)算機(jī)操作都不能動(dòng)手。今后這門課程的考核,實(shí)驗(yàn)課成績(jī)應(yīng)該提高到占總成績(jī)的1/2。老師在實(shí)驗(yàn)中應(yīng)該營(yíng)造出互動(dòng)氣氛,檢查每個(gè)學(xué)生的完成情況同時(shí)做好記錄,根據(jù)學(xué)生的實(shí)際動(dòng)手情況給出他們的平時(shí)實(shí)驗(yàn)成績(jī),而不是只依據(jù)交上來(lái)的實(shí)驗(yàn)報(bào)告,這樣也能杜絕抄襲之風(fēng)。

5結(jié)束語(yǔ)

通過(guò)教學(xué)改革的實(shí)踐,在一定程度上提高了他們對(duì)本課程的學(xué)習(xí)積極性,又降低了學(xué)習(xí)難度。良好的教學(xué)效果是永遠(yuǎn)追求的目標(biāo),在今后的教學(xué)中,我們還需要不斷進(jìn)行探索、研究和嘗試,不斷更新觀念,發(fā)現(xiàn)自身教學(xué)過(guò)程中的問(wèn)題,找到解決辦法,提高教學(xué)效果。

參考文獻(xiàn)

[1] 王成耀.80x86匯編語(yǔ)言程序設(shè)計(jì)[M].北京:人民郵電出版社,2008(第2版).

[2] 卜登立,彭嵩松,唐衛(wèi)東,龍侃.“匯編語(yǔ)言程序設(shè)計(jì)”課程教學(xué)改革研究與探討[J].井岡山學(xué)院學(xué)報(bào),2009,30(10):124-127.

第5篇

【關(guān)鍵詞】FORTH 匯編語(yǔ)言 中斷程序

1 引言

匯編語(yǔ)言是人和計(jì)算機(jī)溝通的最直接的方式,它描述了機(jī)器最終所要執(zhí)行的指令序列,所以匯編語(yǔ)言一直是計(jì)算機(jī)學(xué)科必學(xué)的一門基礎(chǔ)課程。通過(guò)這門課的學(xué)習(xí)既能獲得底層編程的體驗(yàn),又能深刻理解機(jī)器運(yùn)行程序的機(jī)理。FORTH是一種與眾不同的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,采用自底向上的構(gòu)造方式,用匯編語(yǔ)言編寫(xiě)核心單詞,實(shí)現(xiàn)內(nèi)部數(shù)據(jù)結(jié)構(gòu)和解釋/編譯機(jī)制,構(gòu)造最小的系統(tǒng),然后將該系統(tǒng)運(yùn)行在宿主機(jī)上,進(jìn)而編譯的其它高層單詞,形成一個(gè)完整的系統(tǒng)。

本文是在研究了FORTH的自生成技術(shù)的基礎(chǔ)上,自定義了一套匯編語(yǔ)言語(yǔ)法,并且構(gòu)造出將自定義匯編語(yǔ)言轉(zhuǎn)換為CPU機(jī)器碼的編譯器,講解了自定義匯編語(yǔ)言的基本使用方法,最后以中斷程序?yàn)槔榻B了自定義FORTH匯編程序的實(shí)現(xiàn)方式。

2 FORTH匯編語(yǔ)言和編譯器的實(shí)現(xiàn)方法

基本的FORTH平臺(tái)內(nèi)不含產(chǎn)生機(jī)器碼的匯編語(yǔ)言編譯器,只是將一個(gè)用FORTH語(yǔ)言寫(xiě)的匯編語(yǔ)言編譯器的源代碼作為附件。一般我們可以使用這個(gè)編譯器,但也可以自己按照自己的習(xí)慣構(gòu)造自己的語(yǔ)法和編譯器。

實(shí)現(xiàn)編譯器,首先要制訂語(yǔ)言規(guī)范。由于FORTH匯編語(yǔ)言并沒(méi)有權(quán)威的規(guī)范,甚至有些要開(kāi)發(fā)的目標(biāo)芯片就還沒(méi)有匯編語(yǔ)言標(biāo)準(zhǔn)可以借鑒,因此程序開(kāi)發(fā)者完全可以編寫(xiě)自己的編譯器和創(chuàng)造自己的規(guī)范。FORTH匯編語(yǔ)言的語(yǔ)法規(guī)范是模仿常用的匯編語(yǔ)言,只是將表達(dá)式寫(xiě)成“逆波蘭”形式,即將操作符寫(xiě)在操作數(shù)后面。以8086匯編為例,將AX減去BX的內(nèi)容,結(jié)果在AX中,標(biāo)準(zhǔn)的匯編語(yǔ)言為:SUB AX, BX ,在FORTH匯編語(yǔ)言規(guī)范中可以模仿標(biāo)準(zhǔn)的匯編語(yǔ)言規(guī)定為:AX, BX SUB,也可以采用這種寫(xiě)法:BX AX SUB,,不僅逗號(hào)移到了操作數(shù)那里,而且目的操作數(shù)也移到了右面。雖然FORTH匯編語(yǔ)言規(guī)范存在這種任意性,但如果存在標(biāo)準(zhǔn)的匯編語(yǔ)言,除了將操作符寫(xiě)在右面,還是盡量保持標(biāo)準(zhǔn)的風(fēng)格,這樣容易和別人交流。

實(shí)現(xiàn)FORTH匯編編譯器,主要利用FORTH字“C,”、“,”和“Here”,它們分別是向程序區(qū)依次放一個(gè)字節(jié)的二進(jìn)制指令、兩個(gè)字節(jié)的二進(jìn)制指令和給出存放下一個(gè)指令的地址。

以8086為例,無(wú)操作數(shù)的中斷返回指令I(lǐng)RET,可以這樣實(shí)現(xiàn):

語(yǔ)法: IRET

實(shí)現(xiàn): : IRET CF C, ; //將IRET的機(jī)器碼CF一個(gè)字節(jié)放到當(dāng)前的指令流中

單操作數(shù)的跳轉(zhuǎn)指令JMP,可以這樣實(shí)現(xiàn):

語(yǔ)法: LLLL JMP //LLLL定義了轉(zhuǎn)跳的地址

實(shí)現(xiàn): : JMP E8 C, ,;

同樣上面實(shí)現(xiàn)的FORTH含義是將JPM的機(jī)器碼E8一個(gè)字節(jié)放到當(dāng)前的指令流中,然后再把已經(jīng)在堆棧中的要跳轉(zhuǎn)的地址作為16位偏移放到機(jī)器碼E8之后,形成完整的跳轉(zhuǎn)指令。

通常每個(gè)FORTH軟件平臺(tái)都有這個(gè)平臺(tái)的匯編語(yǔ)言規(guī)范和編譯器,但是如果要生成異構(gòu)的FORTH系統(tǒng),重新制定新CPU的匯編語(yǔ)言規(guī)范和編譯器就是必須要完成的任務(wù)。

2.1目標(biāo)代碼的存取

由于一般FORTH目標(biāo)系統(tǒng)的核心規(guī)模較小,16位的系統(tǒng)不超過(guò)64KB,32位的系統(tǒng)也用不完內(nèi)存空間,因此可以直接在宿主機(jī)FORTH系統(tǒng)管理的內(nèi)存中劃出一塊高內(nèi)存區(qū)域用于目標(biāo)代碼的存取。假如P!和P@是原內(nèi)存的寫(xiě)入和讀取字,目標(biāo)代碼區(qū)域的起點(diǎn)是C000,則目標(biāo)代碼的存取字可以簡(jiǎn)單的定義為下面的算法:

C000 CONSTANT Origin

// 定義常數(shù) Origin,它的值是目標(biāo)代碼區(qū)域的起點(diǎn)

: ! Origin + P! ; : @ Origin + P@ ; // 定義目標(biāo)區(qū)的數(shù)據(jù)存取字

同樣也可以產(chǎn)生按字節(jié)的存取字C!和C@。

2.2 機(jī)器碼寫(xiě)入

匯編語(yǔ)言所產(chǎn)生目標(biāo)機(jī)的機(jī)器碼是順序存放的,其中跳轉(zhuǎn)指令是代碼的當(dāng)前位置參考計(jì)算的,因此可以設(shè)置一個(gè)當(dāng)前代碼地址指針CP實(shí)現(xiàn):

Variable CP : Here CP @ ; // Here字給出下一個(gè)機(jī)器碼存放的地址

: C, Here C! CP @ 1+ CP ! ; // 放一個(gè)字節(jié)的機(jī)器碼到目標(biāo)區(qū)

: , Here ! CP @ 2+ CP ! ; // 放一個(gè)16位字的機(jī)器碼到目標(biāo)區(qū)

有了這些FORTH字,可以不用助記符和匯編,直接把二進(jìn)制代碼一個(gè)字節(jié)一個(gè)字節(jié)地生成目標(biāo)碼。

2.3 向前跳轉(zhuǎn)地址

第6篇

關(guān)鍵詞:匯編語(yǔ)言程序設(shè)計(jì);教學(xué)改進(jìn)

中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2011)09-2111-02

Teaching Thinking of Assembly Language Programming Course

LUO Xing

(Hanshan Normal University, Hanshan 521041, China)

Abstract: This paper discusses the problem appear in teaching of assembly language programming course, propose some methods to improve student's ability to master the knowledge and learning interest. Discuss the assembly language teaching in Win32 platfrom in the last.

Key words: assembly language programming; teaching improvement

1 匯編語(yǔ)言程序設(shè)計(jì)課程教學(xué)現(xiàn)狀

匯編語(yǔ)言程序設(shè)計(jì)作為一門計(jì)算機(jī)專業(yè)的課程,其存在的合理性在近年受到爭(zhēng)議。有些人認(rèn)為,匯編語(yǔ)言作為一種低級(jí)語(yǔ)言,指令繁多,難以掌握。另外,編程效率也不高,一個(gè)高級(jí)語(yǔ)言用一條語(yǔ)句實(shí)現(xiàn)的功能,在匯編語(yǔ)言中需要很多條指令才能實(shí)現(xiàn)。此外,匯編語(yǔ)言在時(shí)間上和空間上的優(yōu)勢(shì)由于高速CPU和大容量存儲(chǔ)器的出現(xiàn),也變得意義不大。

我認(rèn)為學(xué)習(xí)匯編語(yǔ)言仍然具有重要意義。可以歸納如下:

1) 可以比較深入了解計(jì)算機(jī)硬件的底層工作原理,例如:CPU的工作模式,寄存器的概念,內(nèi)存的尋址方式,中斷的工作原理等。

2) 熟悉各種數(shù)據(jù)表示方法。如各種數(shù)制的轉(zhuǎn)化,各種類型的數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式。學(xué)生在系統(tǒng)學(xué)習(xí)匯編語(yǔ)言程序設(shè)計(jì)這門課程后,對(duì)二進(jìn)制,十進(jìn)制以及十六進(jìn)制相互間的轉(zhuǎn)換應(yīng)該非常熟練。對(duì)數(shù)據(jù)在內(nèi)存中兩種排列方式即大端方式(Big Endian,低地址存放高位字節(jié))與小端方式(Little Endian,低地址存放低位字節(jié))有清晰的理解。而這些相關(guān)的概念的牢固掌握對(duì)高級(jí)語(yǔ)言中的數(shù)據(jù)類型以及計(jì)算機(jī)網(wǎng)絡(luò)編程的學(xué)習(xí)具有很大的幫助。

3) 通過(guò)匯編語(yǔ)言編程學(xué)習(xí),可以促進(jìn)對(duì)高級(jí)編程語(yǔ)言相關(guān)概念的理解。高級(jí)語(yǔ)言在編譯的時(shí)候,一般都是先生成匯編代碼,然后再生成的二進(jìn)制代碼。所以,通過(guò)對(duì)比分析匯編代碼與高級(jí)語(yǔ)言代碼的實(shí)現(xiàn)方式,對(duì)程序的執(zhí)行效率,數(shù)據(jù)在內(nèi)存中存放方式,堆棧的概念,函數(shù)的調(diào)用及參數(shù)傳遞的方式等都會(huì)有進(jìn)一步的了解。

在教學(xué)中,我也遇到一些問(wèn)題。一方面就是學(xué)生的積極性不高。主要原因包括:指令很多,難以記憶。對(duì)于幾個(gè)大類的指令,如果每次課上一類,學(xué)生課后如果不進(jìn)行主動(dòng)復(fù)習(xí),往往到下一次課的時(shí)候,就會(huì)忘記前面所學(xué)的內(nèi)容或者發(fā)生混淆。另外,在學(xué)習(xí)匯編課程之前,他們已經(jīng)學(xué)過(guò)一門高級(jí)語(yǔ)言,如C/C++等,匯編語(yǔ)言的學(xué)習(xí)方式與高級(jí)語(yǔ)言的學(xué)習(xí)方式有所不同,高級(jí)語(yǔ)言比較容易上機(jī)練習(xí),也容易對(duì)程序運(yùn)行結(jié)果驗(yàn)證,對(duì)于開(kāi)發(fā)實(shí)用軟件也相對(duì)容易,所以學(xué)生的興趣比較大。而匯編語(yǔ)言一方面涉及到底層的硬件概念,比較難以理解,另一方面上機(jī)也比較困難,可以這么說(shuō),如果按照課本的順序講課,要到差不多講完課,學(xué)生才可以上機(jī)完成一個(gè)功能比較完整的程序。

2 促進(jìn)學(xué)生對(duì)知識(shí)的掌握

要解決這些問(wèn)題,我認(rèn)為要在學(xué)生的知識(shí)掌握方式以及學(xué)習(xí)興趣的培養(yǎng)上下功夫。對(duì)于知識(shí)的掌握,除了每次新課內(nèi)容講完后,精心給學(xué)生布置作業(yè)習(xí)題之外。還應(yīng)該注意到由于匯編語(yǔ)言的指令及相關(guān)的知識(shí)點(diǎn)很多,對(duì)于剛接觸這門課程的學(xué)生一開(kāi)始往往不大適應(yīng),容易混淆前面學(xué)過(guò)的內(nèi)容,所以教師及時(shí)對(duì)所學(xué)過(guò)知識(shí)點(diǎn)進(jìn)行比較和總結(jié)就很有必要。此外還應(yīng)該定期對(duì)學(xué)生的學(xué)習(xí)效果進(jìn)行檢測(cè),從過(guò)去的教學(xué)經(jīng)驗(yàn)看,匯編語(yǔ)言這門課程是學(xué)生比較容易與教師的教學(xué)進(jìn)度脫離的一門課程,不少學(xué)生在一開(kāi)始由于在掌握知識(shí)遇到困難,問(wèn)題越積越多,最終可能放棄聽(tīng)課。在檢測(cè)的方法上,可以借助網(wǎng)上考試系統(tǒng)。教師可以自主出題,也可以讓系統(tǒng)自動(dòng)出題。通過(guò)分析學(xué)生的測(cè)試結(jié)果,教師可以及時(shí)調(diào)整教學(xué)進(jìn)度,學(xué)生也會(huì)有一定的學(xué)習(xí)壓力,使他們花更多時(shí)間查補(bǔ)缺漏的知識(shí)。

程序設(shè)計(jì)學(xué)習(xí)的最佳方法就是上機(jī)實(shí)踐。匯編語(yǔ)言上機(jī)練習(xí)跟高級(jí)語(yǔ)言的上機(jī)練習(xí)相比,對(duì)于學(xué)生來(lái)說(shuō)比較困難。一方面是由于一個(gè)完整的匯編程序涉及的知識(shí)點(diǎn)很多,而教材往往按知識(shí)點(diǎn)分類進(jìn)行編排。所以學(xué)生要想在剛開(kāi)始學(xué)習(xí)階段,就編出完整的程序有一定的難度。另一方面,匯編程序的運(yùn)行結(jié)果較難在屏幕上輸出,匯編語(yǔ)言只有字符與字符串的輸入輸出,對(duì)于一道簡(jiǎn)單的算術(shù)運(yùn)算題目,其結(jié)果的輸出都要通過(guò)一大段的轉(zhuǎn)換程序來(lái)實(shí)現(xiàn)。對(duì)于第一個(gè)問(wèn)題,教師可以對(duì)教材內(nèi)容進(jìn)行選講,把實(shí)驗(yàn)所涉及到的知識(shí)點(diǎn)先進(jìn)行講解。對(duì)于第二個(gè)問(wèn)題, 我認(rèn)為應(yīng)該重點(diǎn)培養(yǎng)學(xué)生熟練使用調(diào)試工具的能力,通過(guò)掌握調(diào)試工具如DEBUG,CV等的使用,一方面學(xué)生可以直接觀察程序的運(yùn)行結(jié)果,另一方面,對(duì)于程序的邏輯錯(cuò)誤也可以進(jìn)行跟蹤、分析以及解決。此外,由于匯編語(yǔ)言作為一種低級(jí)語(yǔ)言,編程都由一條條指令進(jìn)行構(gòu)造,所以相對(duì)繁瑣,應(yīng)盡早讓學(xué)生應(yīng)用模塊化思路,掌握子程序及宏的使用方法。這樣把一些常用功能做成模塊,如輸入輸出功能,以后學(xué)生在編程的時(shí)候就可以直接調(diào)用這些模塊,從而專注于實(shí)驗(yàn)的其它方面。

3 提高學(xué)生的學(xué)習(xí)積極性

對(duì)于如何提高學(xué)生的學(xué)習(xí)興趣,我認(rèn)為主要讓學(xué)生意識(shí)到匯編語(yǔ)言的作用。一方面可以引入一些接口技術(shù)相關(guān)內(nèi)容,使學(xué)生熟練掌握中斷的概念以及I/O指令,然后上機(jī)編寫(xiě)中斷程序,在中斷控制器(8259A)進(jìn)行驗(yàn)證,由于這些實(shí)驗(yàn)有按鍵輸入,有屏幕輸出,還能直接看到程序控制設(shè)備的效果,所以學(xué)生興趣會(huì)比較大。此外,教師也可以適當(dāng)拓展一些知識(shí),如嵌入式編程相關(guān)概念,有興趣的同學(xué)可以在課后自主進(jìn)行學(xué)習(xí)。另外,由于不少學(xué)生對(duì)硬盤(pán)相關(guān)的問(wèn)題感興趣,比如硬盤(pán)數(shù)據(jù)的存放方式,數(shù)據(jù)的修復(fù)等。可以引導(dǎo)學(xué)生對(duì)這些問(wèn)題進(jìn)行思考,然后通過(guò)匯編語(yǔ)言提供的I/O指令和中斷子功能,編程實(shí)現(xiàn)對(duì)硬盤(pán)的MBR,文件分配表等數(shù)據(jù)結(jié)構(gòu)的讀取,備份,修復(fù)等功能。教師通過(guò)布置一些學(xué)生比較感興趣的課外作業(yè),并適當(dāng)提供協(xié)助,往往能提高學(xué)生的學(xué)習(xí)積極性。

另外,在匯編語(yǔ)言的學(xué)習(xí)過(guò)程中,教師應(yīng)該有意識(shí)引導(dǎo)學(xué)生將匯編語(yǔ)言與高級(jí)語(yǔ)言的各個(gè)對(duì)應(yīng)的部分進(jìn)行比較。學(xué)生在學(xué)習(xí)匯編語(yǔ)言之前,通常已經(jīng)學(xué)過(guò)一門高級(jí)語(yǔ)言,如C/C++等。高級(jí)語(yǔ)言在編譯的時(shí)候,一般是先轉(zhuǎn)換成匯編代碼,所以它們具有相通性。大部分學(xué)生編寫(xiě)應(yīng)用程序的時(shí)候是用高級(jí)語(yǔ)言,所以通過(guò)比較分析高級(jí)語(yǔ)言與低級(jí)語(yǔ)言在數(shù)據(jù)定義,程序流程控制,函數(shù)的定義及調(diào)用等的對(duì)應(yīng)部分內(nèi)容,對(duì)于學(xué)生更好的使用高級(jí)語(yǔ)言編寫(xiě)程序是很有幫助的。比如:匯編語(yǔ)言里有分段的概念,一般把變量定義到數(shù)據(jù)段,把代碼定義的代碼段。而C語(yǔ)言是把數(shù)據(jù)與代碼都定義在一起,那么C語(yǔ)言編寫(xiě)的程序在編譯成可執(zhí)行文件后,它的全局變量,局部變量的空間是如何分配的。另外,對(duì)于動(dòng)態(tài)內(nèi)存分配,堆與棧的區(qū)別在哪里。還有函數(shù)的定義與調(diào)用,參數(shù)的傳遞順序是如何的?這些疑問(wèn),都可以讓學(xué)生編寫(xiě)簡(jiǎn)單的C語(yǔ)言程序,生成可執(zhí)行文件后,然后通過(guò)調(diào)試工具進(jìn)行反匯編進(jìn)行分析。此外,在利用VC++,Dephi等IDE開(kāi)發(fā)工具進(jìn)行程序編寫(xiě)時(shí),都會(huì)用到里面的調(diào)試功能。基本上調(diào)試功能都會(huì)包括反匯編與內(nèi)存查看的功能,教師可以引導(dǎo)學(xué)生進(jìn)行這方面的訓(xùn)練,使他們?cè)谝院缶幊虝r(shí)能熟練應(yīng)用這個(gè)工具解決一些疑難問(wèn)題,例如:內(nèi)存非法訪問(wèn),指針的非法引用等。

4 Win32平臺(tái)下的匯編語(yǔ)言教學(xué)思考

目前很多高校在匯編程序設(shè)計(jì)教學(xué)中講解的是8088/8086 CPU實(shí)模式環(huán)境,實(shí)際上是虛擬8086模式,因?yàn)檎嬲膶?shí)模式工作DOS下,而現(xiàn)在匯編語(yǔ)言實(shí)驗(yàn)環(huán)境都是在windows 2000以上。由于現(xiàn)在大部分CPU都是32位以上,并且是工作上保護(hù)模式之上,此外這些CPU的寄存器類型以及尋址方式都已經(jīng)發(fā)生較大變化。所以教師有必要對(duì)實(shí)模式與保護(hù)模式在邏輯地址轉(zhuǎn)化為物理地址的方式的差異,還有16位與32位的指令在用法的不同點(diǎn)進(jìn)行重點(diǎn)講解。因?yàn)閰R編語(yǔ)言現(xiàn)在的實(shí)際應(yīng)用基本上采用工作于保護(hù)模式的Win32平臺(tái),在Windows操作系統(tǒng)控制下,匯編語(yǔ)言雖然不能再直接存取硬件,但是能通過(guò)調(diào)用系統(tǒng)提供的API函數(shù)完成各種功能。其實(shí)這里的API函數(shù)當(dāng)于DOS下的中斷調(diào)用,但是Window API函數(shù)無(wú)論從數(shù)量上、功能上還是易用性上都大大超過(guò)了DOS或BIOS的中斷調(diào)用功能。所以現(xiàn)在在Win32平臺(tái)下,匯編語(yǔ)言就像高級(jí)語(yǔ)言一樣,可以方便的開(kāi)發(fā)各種Windows應(yīng)用程序。有些教師認(rèn)為,既然在實(shí)模式講解匯編語(yǔ)言很少涉及實(shí)用性,那就應(yīng)該直接遷移到Win32匯編平臺(tái),講解用匯編語(yǔ)言開(kāi)發(fā)的Windows應(yīng)用程序設(shè)計(jì)實(shí)例,從而提高學(xué)生積極性。我認(rèn)為如果采用這種教學(xué)方法,可能會(huì)存在以下問(wèn)題:首先由于上課時(shí)間有限,學(xué)生需要大量的時(shí)間才能熟練掌握各類指令,匯編語(yǔ)言的語(yǔ)法,程序結(jié)構(gòu)等方面的知識(shí)。如果過(guò)多涉及Windows程序設(shè)計(jì)實(shí)例,對(duì)于不熟悉Windows編程機(jī)制的學(xué)生的來(lái)說(shuō),又多了一個(gè)不小的學(xué)習(xí)負(fù)擔(dān),這樣子反而影響了匯編語(yǔ)言基礎(chǔ)知識(shí)的掌握。另外,DOS下的實(shí)模式與Window下的保護(hù)模式下的編程在本質(zhì)上并無(wú)很大的區(qū)別,只要學(xué)生熟練掌握各類指令用法,理解16位與32位的指令及尋址方式的區(qū)別,邏輯地址與物理地址轉(zhuǎn)換機(jī)制等知識(shí),他們就可以通過(guò)自主學(xué)習(xí),較容易的掌握用匯編語(yǔ)言進(jìn)行Win32應(yīng)用程序的開(kāi)發(fā)。對(duì)于教師,除了幫學(xué)生打好匯編語(yǔ)言的基礎(chǔ),可以適當(dāng)以課外作業(yè)的形式,引入一些匯編語(yǔ)言在不同應(yīng)用領(lǐng)域的簡(jiǎn)單實(shí)例,如加密與解密,軟件的逆向工程等,這些課外作業(yè)的完成對(duì)學(xué)生匯編語(yǔ)言的應(yīng)用能力的提高將會(huì)有不小的幫助。

5 結(jié)束語(yǔ)

匯編語(yǔ)言難教難學(xué)是教師與學(xué)生的共識(shí),但是作為計(jì)算機(jī)科學(xué)中一門低級(jí)程序設(shè)計(jì)語(yǔ)言,通過(guò)對(duì)它的良好掌握,確實(shí)可以促進(jìn)對(duì)計(jì)算機(jī)軟硬件底層的了解,而這又能促進(jìn)編程能力的提高。作為教師,在教學(xué)中應(yīng)該不斷嘗新的教學(xué)方法,不斷積累經(jīng)驗(yàn),只有這樣,才能把這門課上好。

參考文獻(xiàn):

第7篇

    1.1從知識(shí)點(diǎn)講授到以系統(tǒng)設(shè)計(jì)為主線的教學(xué)改革

    我國(guó)高校在2世紀(jì)8年代初開(kāi)始在少數(shù)高校開(kāi)設(shè)單片機(jī)課程,面向電子和計(jì)算機(jī)專業(yè)高年級(jí)本科生和研究生,教材內(nèi)容基本是單片機(jī)生產(chǎn)商提供的技術(shù)手冊(cè)、匯編程序設(shè)計(jì)和計(jì)算機(jī)原理與接口技術(shù)的綜合體。目前單片機(jī)教材雖然較多,但基本延續(xù)了這種傳統(tǒng)的教學(xué)思路,即以單片機(jī)的知識(shí)點(diǎn)為主線進(jìn)行單元技術(shù)教學(xué)。隨著單片機(jī)教學(xué)在各層次學(xué)校的廣泛普及,這種教學(xué)思路顯現(xiàn)了明顯的不適應(yīng)。系統(tǒng)設(shè)計(jì)性內(nèi)容缺失和細(xì)節(jié)內(nèi)容深度不夠,使一般學(xué)生在實(shí)際應(yīng)用過(guò)程中仍然會(huì)遇到許多迷茫的問(wèn)題。目前單片機(jī)基礎(chǔ)課教材的一個(gè)普遍性的問(wèn)題是教學(xué)集中在分散的各個(gè)點(diǎn),而對(duì)單片機(jī)系統(tǒng)整體結(jié)構(gòu)性考慮不夠;重在局部和單元模塊,缺乏組織成項(xiàng)目的考慮。這種問(wèn)題嚴(yán)重地體現(xiàn)在系統(tǒng)軟件設(shè)計(jì)中,一般學(xué)生會(huì)做例題和作業(yè),不會(huì)設(shè)計(jì)解決實(shí)際任務(wù)的系統(tǒng)軟件。因此,單片機(jī)基礎(chǔ)課程教學(xué)改革的一個(gè)重點(diǎn)就是從知識(shí)點(diǎn)講授到以系統(tǒng)設(shè)計(jì)為主線,基于課程整體性并結(jié)合項(xiàng)目系統(tǒng)整體性考慮實(shí)施單元教學(xué),重點(diǎn)提升學(xué)生系統(tǒng)性、綜合性設(shè)計(jì)能力。

    1.2單片機(jī)與其它課程教學(xué)形成良性互動(dòng)

    在目前課程體系中,考慮到知識(shí)銜接關(guān)系,單片機(jī)課程在模擬電子技術(shù)、數(shù)字電路、計(jì)算機(jī)組成(微機(jī)原理與接口)、匯編程序設(shè)計(jì)等課程之后,一般安排在第6學(xué)期。這個(gè)安排的問(wèn)題是學(xué)生實(shí)際綜合應(yīng)用及拓展學(xué)習(xí)的時(shí)間較短。這在單片機(jī)進(jìn)入我國(guó)高校的早期階段僅高端學(xué)生學(xué)習(xí)的情況下是合理的,在目前單片機(jī)普及教學(xué)情況下,作為工具和重要的學(xué)科基礎(chǔ)課,單片機(jī)課程應(yīng)盡早讓學(xué)生掌握,對(duì)其熟練和提高系統(tǒng)設(shè)計(jì)能力、提高學(xué)習(xí)興趣、結(jié)合和促進(jìn)其它課程學(xué)習(xí)將產(chǎn)生良好作用。單片機(jī)基礎(chǔ)課程涉及到的模擬電子技術(shù)、數(shù)字電路等知識(shí),是相對(duì)簡(jiǎn)單的,在課程中從應(yīng)用的角度介紹即可,對(duì)單片機(jī)課程的教學(xué)沒(méi)有影響。實(shí)際上,有些同學(xué)從大一就開(kāi)始自學(xué)單片機(jī)而且都取得了很好的效果,這對(duì)我們教學(xué)是一個(gè)很好的啟示。

第8篇

【關(guān)鍵詞】 單片機(jī);PC機(jī);串行通信;VB6.0;匯編程序

隨著科學(xué)技術(shù)的發(fā)展,在單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)中常常遇到計(jì)算機(jī)與外界的信息交換,即通信。鑒于PC機(jī)具有強(qiáng)大的監(jiān)控和管理功能,單片機(jī)具有快速以及容易控制的特點(diǎn),在實(shí)際應(yīng)用中,一般都利用PC機(jī)所配置的RS-232C標(biāo)準(zhǔn)串行接口來(lái)實(shí)現(xiàn)應(yīng)用系統(tǒng)與PC機(jī)之間的數(shù)據(jù)交換。Visual Basic 6.0(簡(jiǎn)稱VB6.0)在通信方面提供了專門的Communications控件,即控件Mscomm,可以完成簡(jiǎn)單的串行端口通訊功能,也可以用來(lái)創(chuàng)建功能完備、事件驅(qū)動(dòng)的高級(jí)通訊工具。可以利用VB6.0的Mscomm控件來(lái)實(shí)現(xiàn)PC機(jī)與多臺(tái)MCS-51單片機(jī)之間的串行通信。該控件提供了一系列標(biāo)準(zhǔn)通訊命令的使用接口,利用它可以建立與串行端口的連接,并通過(guò)串行端口連接到其它儀器設(shè)備,從而發(fā)出命令、交換數(shù)據(jù)、以及監(jiān)視和響應(yīng)連接中發(fā)生的事件與錯(cuò)誤。

一、系統(tǒng)結(jié)構(gòu)設(shè)計(jì)

本系統(tǒng)是由一臺(tái)上位PC機(jī)和若個(gè)臺(tái)以M CS-51單片機(jī)為核心的下位機(jī)構(gòu)成。大多數(shù)PC機(jī)都配備有串行通訊端口RS-232C,用于兩臺(tái)計(jì)算機(jī)間進(jìn)行串行通訊,但單片機(jī)的輸入、輸出電平為TTL電平,與PC機(jī)的RS-232C標(biāo)準(zhǔn)串行接口的電氣規(guī)范不一致,要實(shí)現(xiàn)單片機(jī)與PC機(jī)之間的數(shù)據(jù)通信,還必須進(jìn)行電平轉(zhuǎn)換,在上位PC機(jī)與下位機(jī)的連接中采用RS-232C/RS-485轉(zhuǎn)換器,將PC機(jī)串口的標(biāo)準(zhǔn)由RS-232C電平信號(hào)轉(zhuǎn)換成RS-485的差分信號(hào)。RS-485具用“平衡差動(dòng)式”的數(shù)據(jù)傳輸特性,工作于半雙工方式,RS-485的串行通信線路可采用最普遍的雙絞線,且在抗干擾能力和帶負(fù)載能力方面較其它的串行接口標(biāo)準(zhǔn)有非常明顯的優(yōu)勢(shì),適用于高速率和遠(yuǎn)距離的串性通信場(chǎng)合。PC機(jī)與多個(gè)單片機(jī)通信的電路結(jié)構(gòu)圖(如圖1所示)。

圖中的下位機(jī)是以MCS-51為核心的單片機(jī)系統(tǒng),該系統(tǒng)由一片MCS-51外加一片256K的Eprom組成,并由芯片構(gòu)成系統(tǒng)數(shù)據(jù)輸入功能塊、電機(jī)驅(qū)動(dòng)功能塊、數(shù)據(jù)輸出功能塊和通信功能塊,其中通信功能塊可選擇下列三種通信方式之一,即由74LS245芯片構(gòu)成的并行通信方式、由MAX232芯片構(gòu)成的RS-232C串行通信方式以及由75176芯片構(gòu)成的RS-485串行通信方式。

圖1PC機(jī)與多個(gè)單片機(jī)通信的電路結(jié)構(gòu)圖

二、PC機(jī)的程序設(shè)計(jì)

VB6.省略mport=1 ;設(shè)置通訊端口號(hào)為com1

Mscomm1.setting=’1200,N,8,1’ ;設(shè)置為字符串形式,波特率為1200,無(wú)校驗(yàn)位,8位數(shù)據(jù)位,1位停止位

Mscomm1.portopen=tu re ;打開(kāi)通訊端口

(2)連接和發(fā)送緩沖區(qū)的屬性設(shè)置

Inbuffersize=256 ;接收緩沖區(qū)為256個(gè)字符

Outbuffersize=2 ;發(fā)送緩沖區(qū)為2個(gè)字符

Rthreshold =6 ;每當(dāng)緩沖區(qū)收到6個(gè)字符就產(chǎn)生oncomm事件

Sthreshold=1 ;發(fā)送緩沖區(qū)為空觸發(fā)事件

Inputlern=0 ;讀取接收緩沖區(qū)所有字符

(3)主程序清單

Private sub commandl_click()

Textl.text=’檢查下位機(jī)的連線’

Endsub

Private sub command2_click()

Comml.Output =chr(49)

Textl.text=’1#’ ;1號(hào)下位機(jī)

Endsub

Private sub command3_click()

Comml.Output =chr(50)

Textl.text=’2#’ ;2號(hào)下位機(jī)

Endsub

Private sub command4_click()

Comml.Output =chr(51)

Textl.text=’3#’ ;3號(hào)下位機(jī)

Endsub

Private sub command5_click()

End

Endsub

Private sub comm1.省略mevent

Case comEvReceive

Dim data(100)as string

Data num>=comml. input

k=data(num)

Textl.text=k

Endselect

Endsub

三、單片機(jī)的程序設(shè)計(jì)

下位機(jī)中關(guān)于RS-485的串行通信部分采用MCS-51系列單片機(jī)的匯編語(yǔ)言編寫(xiě)。MCS-51系列單片機(jī)有一個(gè)標(biāo)準(zhǔn)的全雙工串行接口,其串行控制寄存器SCON包含串行工作方式選擇位、接收發(fā)送控制位以及串行口狀態(tài)標(biāo)志位。SCON在單片機(jī)中的地址為98H。假設(shè)MCS-51單片機(jī)從外部采集到的一組30個(gè)的數(shù)據(jù),并存在片內(nèi)RAM 20H~3DH區(qū)域中,現(xiàn)要求將這個(gè)數(shù)據(jù)塊傳送給PC機(jī)。為了保證傳送的正確,在傳送前應(yīng)由單片機(jī)先向PC機(jī)發(fā)送聯(lián)絡(luò)信號(hào)#55H,PC機(jī)準(zhǔn)確接收到后,向單片機(jī)發(fā)送回應(yīng)信號(hào)#0AAH,在檢驗(yàn)無(wú)誤后,單片機(jī)才開(kāi)始向PC機(jī)傳送數(shù)據(jù)。對(duì)串行口的操作可分為以下四步進(jìn)行:(1)串行口初始化;(2)發(fā)送聯(lián)絡(luò)信號(hào);(3)接收回應(yīng)信號(hào);(4)發(fā)送數(shù)據(jù)。

匯編程序代碼如下所示:

ORG0030H

START: MOVSP, #60H

MOVTMOD, #20H ;Tl工作在模式2下

MOVTH 1, #F3H

MOVTL1, #F3H ;波特率設(shè)置為1200

SETB TRl

MOVPCON, #00H ;SMOD=0

MOVSCON, #50H ;選擇串行方式1

MOVR0, #20H

MOVR2, #30 ;數(shù)據(jù)個(gè)數(shù)

XX1: MOVA, #55H

MOVSBUF,A ;發(fā)送聯(lián)絡(luò)信號(hào)

WAITl: JBCT 1, W AIT2 ;等待發(fā)送完畢

AJMPWAIT1

WAIT2: JBC R1, READ ;等待接收完畢

AJMPWAIT2

READ:MOVA, SBUF ;接收聯(lián)絡(luò)信號(hào)

CJNEA,#0AAH, XX 1 ;接收數(shù)據(jù)不正確,重新開(kāi)始

LOOP:MOVA,@R0

MOVSBUF,A

WAIT:JBC T1, LOOP1 ;等待發(fā)送完畢

AJMPWAIT

LOOPl:JNCR0

DJNZR2, LOOP

END

在VB6.0下實(shí)現(xiàn)串行通信有多種方法,除利用Windows API函數(shù)和利用Mscomm ActiveX控件外,還可通過(guò)VB調(diào)用動(dòng)態(tài)鏈接庫(kù)dll來(lái)實(shí)現(xiàn),本文只介紹了如何利用Mscomm控件來(lái)實(shí)現(xiàn)串行通信。當(dāng)前,基于VB6.0的PC機(jī)與單片機(jī)的串行通信技術(shù)在我國(guó)發(fā)展已比較成熟,應(yīng)用也比較廣泛。

參考文獻(xiàn)

[1]陳立元.Visual Basic與RS232串行通信控制.北京:清華大學(xué)出版社,2002:48~51

[2]李朝青.PC機(jī)及單片機(jī)數(shù)據(jù)通信技術(shù).北京:北京航空航天大學(xué)出版社,2000:177

[3]胡漢才.單片機(jī)原理及系統(tǒng)設(shè)計(jì).清華大學(xué)出版社,2003

第9篇

關(guān)鍵詞:機(jī)械類專業(yè);微機(jī)原理與應(yīng)用;教學(xué)改革;教學(xué)質(zhì)量

Teaching reform and practice of principle and its applications of microcomputer for mechanical specialties

Wang Hongru, Tang Wei

Jiangsu university of science and technology, Zhenjiang, 212003, China

Abstract: To improve teaching quality of principle and its applications of microcomputer in mechanical specialties, characteristics and present situation of the course are analyzed thoroughly, and then a series of improvement strategies of teaching contents, teaching methods and means, and practice link are proposed. Results of teaching practice indicate the proposed strategies can stimulate the students’ learning interest and can exploit their learning potentialities. And teaching effect is improved consequently.

Key words: mechanical specialties; principle and its applications of microcomputer; teaching reform; teaching quality

微機(jī)原理與應(yīng)用是我校機(jī)械類專業(yè)的一門專業(yè)基礎(chǔ)課,主要講授單片機(jī)硬件知識(shí)、匯編語(yǔ)言程序設(shè)計(jì)方法和單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)[1]。對(duì)學(xué)生而言,課程內(nèi)容比較抽象、知識(shí)點(diǎn)多,學(xué)習(xí)難度大;對(duì)教師而言,由于計(jì)算機(jī)的快速發(fā)展而需要不斷更新、補(bǔ)充教學(xué)內(nèi)容,但學(xué)時(shí)卻在不斷減少。因此,結(jié)合微機(jī)原理與應(yīng)用課程的特點(diǎn)及現(xiàn)狀,研究提高教學(xué)質(zhì)量的方法和思路具有重要的現(xiàn)實(shí)意義。

1 課程特點(diǎn)及現(xiàn)狀

我校機(jī)械類本科專業(yè)對(duì)微機(jī)原理與應(yīng)用課程的基本要求是學(xué)生熟練掌握單片機(jī)技術(shù),并初步具備單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)能力。因此要求該課程的教學(xué)必須既重視理論知識(shí)的傳授,又要加強(qiáng)實(shí)踐、創(chuàng)新能力的培養(yǎng)。

1.1 內(nèi)容繁雜,概念抽象

微機(jī)原理與應(yīng)用課程的主要內(nèi)容有單片機(jī)的基本組成、工作原理、接口電路、匯編程序設(shè)計(jì),以及單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)等[1],其中每一部分都包含諸多知識(shí)點(diǎn)和抽象概念。例如半導(dǎo)體存儲(chǔ)器部分,包含的知識(shí)點(diǎn)有半導(dǎo)體存儲(chǔ)器的分類、特點(diǎn)、性能指標(biāo)、基本結(jié)構(gòu)、ROM和RAM的基本工作原理、片選信號(hào)產(chǎn)生方法、常用存儲(chǔ)器芯片引腳功能,以及外存儲(chǔ)器擴(kuò)展的基本方法等;涉及的主要概念有ROM和RAM、片選線和片內(nèi)地址線、地址總線和地址引腳、字選和片選,以及基本地址范圍和重疊地址范圍等,這些概念均比較抽象,理解起來(lái)有一定的難度。

1.2 學(xué)時(shí)較少,內(nèi)容更新快

機(jī)械類本科專業(yè)由于其自身的特點(diǎn),分配給微機(jī)原理與應(yīng)用課程的學(xué)時(shí)本身就較少,再加上近年來(lái)隨著國(guó)家對(duì)人才需求的變化,修訂后的教學(xué)培養(yǎng)計(jì)劃幾乎每門課程的教學(xué)時(shí)數(shù)都在減少[2]。另外,隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,教學(xué)內(nèi)容也需要不斷地更新、補(bǔ)充。

1.3 學(xué)生學(xué)習(xí)興趣普遍較低

由于單片機(jī)的工作原理看不見(jiàn)、摸不著,且匯編語(yǔ)言是面向機(jī)器的語(yǔ)言,再加上機(jī)械類專業(yè)學(xué)生的電路以及計(jì)算機(jī)基礎(chǔ)相對(duì)比較薄弱,因此學(xué)生感到抽象、枯燥,多數(shù)學(xué)生的學(xué)習(xí)興趣較低,學(xué)習(xí)主動(dòng)性不強(qiáng)。

通過(guò)上述分析可以看出,如何在有限的時(shí)間內(nèi)將如此繁雜的內(nèi)容高效傳授給學(xué)生,并培養(yǎng)他們的創(chuàng)新能力,成為提高微機(jī)原理與應(yīng)用課程教學(xué)質(zhì)量的關(guān)鍵。

2 教學(xué)改革

為提高微機(jī)原理與應(yīng)用課程的教學(xué)質(zhì)量,筆者從教學(xué)內(nèi)容和教學(xué)方法與手段兩方面提出一些有針對(duì)性的改革措施。

2.1 教學(xué)內(nèi)容改革

目前,國(guó)內(nèi)高校的微機(jī)原理與應(yīng)用課程大多是以Intel 80x86系列或MCS—51系列單片機(jī)為主要教學(xué)內(nèi)容,也有采用其他類型中央處理器的單片機(jī)的。雖然處理器類型不同,但是介紹的主要內(nèi)容基本相同。我校機(jī)械類專業(yè)微機(jī)原理與應(yīng)用課程是以MCS—51系列單片機(jī)為主要內(nèi)容組織教學(xué)。然而,近年來(lái)隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,出現(xiàn)了高性能嵌入式中央處理器,這對(duì)教與學(xué)而言均是一個(gè)較大的挑戰(zhàn)。因此,如何處理好教學(xué)內(nèi)容與實(shí)際應(yīng)用之間的矛盾,成為微機(jī)原理與應(yīng)用課程教學(xué)改革亟待解決的問(wèn)題。

2.1.1 緊扣教學(xué)大綱,精選教材,優(yōu)化教學(xué)內(nèi)容

第10篇

1.1從知識(shí)點(diǎn)講授到以系統(tǒng)設(shè)計(jì)為主線的教學(xué)改革

我國(guó)高校在20世紀(jì)80年代初開(kāi)始在少數(shù)高校開(kāi)設(shè)單片機(jī)課程,面向電子和計(jì)算機(jī)專業(yè)高年級(jí)本科生和研究生,教材內(nèi)容基本是單片機(jī)生產(chǎn)商提供的技術(shù)手冊(cè)、匯編程序設(shè)計(jì)和計(jì)算機(jī)原理與接口技術(shù)的綜合體。目前單片機(jī)教材雖然較多,但基本延續(xù)了這種傳統(tǒng)的教學(xué)思路,即以單片機(jī)的知識(shí)點(diǎn)為主線進(jìn)行單元技術(shù)教學(xué)。隨著單片機(jī)教學(xué)在各層次學(xué)校的廣泛普及,這種教學(xué)思路顯現(xiàn)了明顯的不適應(yīng)。系統(tǒng)設(shè)計(jì)性內(nèi)容缺失和細(xì)節(jié)內(nèi)容深度不夠,使一般學(xué)生在實(shí)際應(yīng)用過(guò)程中仍然會(huì)遇到許多迷茫的問(wèn)題。目前單片機(jī)基礎(chǔ)課教材的一個(gè)普遍性的問(wèn)題是教學(xué)集中在分散的各個(gè)點(diǎn),而對(duì)單片機(jī)系統(tǒng)整體結(jié)構(gòu)性考慮不夠;重在局部和單元模塊,缺乏組織成項(xiàng)目的考慮。這種問(wèn)題嚴(yán)重地體現(xiàn)在系統(tǒng)軟件設(shè)計(jì)中,一般學(xué)生會(huì)做例題和作業(yè),不會(huì)設(shè)計(jì)解決實(shí)際任務(wù)的系統(tǒng)軟件。因此,單片機(jī)基礎(chǔ)課程教學(xué)改革的一個(gè)重點(diǎn)就是從知識(shí)點(diǎn)講授到以系統(tǒng)設(shè)計(jì)為主線,基于課程整體性并結(jié)合項(xiàng)目系統(tǒng)整體性考慮實(shí)施單元教學(xué),重點(diǎn)提升學(xué)生系統(tǒng)性、綜合性設(shè)計(jì)能力。

1.2單片機(jī)與其它課程教學(xué)形成良性互動(dòng)

在目前課程體系中,考慮到知識(shí)銜接關(guān)系,單片機(jī)課程在模擬電子技術(shù)、數(shù)字電路、計(jì)算機(jī)組成(微機(jī)原理與接口)、匯編程序設(shè)計(jì)等課程之后,一般安排在第6學(xué)期。這個(gè)安排的問(wèn)題是學(xué)生實(shí)際綜合應(yīng)用及拓展學(xué)習(xí)的時(shí)間較短。這在單片機(jī)進(jìn)入我國(guó)高校的早期階段僅高端學(xué)生學(xué)習(xí)的情況下是合理的,在目前單片機(jī)普及教學(xué)情況下,作為工具和重要的學(xué)科基礎(chǔ)課,單片機(jī)課程應(yīng)盡早讓學(xué)生掌握,對(duì)其熟練和提高系統(tǒng)設(shè)計(jì)能力、提高學(xué)習(xí)興趣、結(jié)合和促進(jìn)其它課程學(xué)習(xí)將產(chǎn)生良好作用。單片機(jī)基礎(chǔ)課程涉及到的模擬電子技術(shù)、數(shù)字電路等知識(shí),是相對(duì)簡(jiǎn)單的,在課程中從應(yīng)用的角度介紹即可,對(duì)單片機(jī)課程的教學(xué)沒(méi)有影響。實(shí)際上,有些同學(xué)從大一就開(kāi)始自學(xué)單片機(jī)而且都取得了很好的效果,這對(duì)我們教學(xué)是一個(gè)很好的啟示。

2單片機(jī)理論教學(xué)的改革

單片機(jī)教材最初源于單片機(jī)生產(chǎn)廠家技術(shù)手冊(cè)、匯編語(yǔ)言程序設(shè)計(jì)和計(jì)算機(jī)組成與接口技術(shù)的綜合。單片機(jī)應(yīng)用初期面向?qū)ο笫侵攸c(diǎn)院校電子和控制專業(yè)的學(xué)生和科研人員。傳統(tǒng)的授課方式是以知識(shí)為驅(qū)動(dòng),知識(shí)點(diǎn)之間比較分散,學(xué)生學(xué)完之后沒(méi)有系統(tǒng)的概念,缺乏貫穿所有知識(shí)的主線,形成不了體系。這種教學(xué)方法亟待改革。

2.1以項(xiàng)目為主線

系統(tǒng)結(jié)構(gòu)性設(shè)計(jì)是一個(gè)重要的教學(xué)內(nèi)容。從宏觀教學(xué)的角度考慮,我們將整個(gè)教學(xué)內(nèi)容設(shè)計(jì)成基本涵蓋了本課程全部教學(xué)內(nèi)容的一個(gè)項(xiàng)目,基于課程整體性并結(jié)合項(xiàng)目系統(tǒng)整體性考慮實(shí)施單元教學(xué)。對(duì)結(jié)構(gòu)性的適當(dāng)變化和局部?jī)?nèi)容的取舍,即可衍生和變化為其它的應(yīng)用系統(tǒng)。通過(guò)這樣的教學(xué)設(shè)計(jì),學(xué)生加大了對(duì)課程的興趣,逐漸地積累成就感,并最終能較快地進(jìn)入系統(tǒng)設(shè)計(jì)者的角色,能較好地完成實(shí)際應(yīng)用系統(tǒng)的設(shè)計(jì)。

2.2整體與局部關(guān)系

基于項(xiàng)目為主線的教學(xué)設(shè)計(jì),在講述局部技術(shù)的同時(shí)進(jìn)行系統(tǒng)結(jié)構(gòu)性的教學(xué),使系統(tǒng)整體性的考慮體現(xiàn)在局部中。例如LED數(shù)碼管動(dòng)態(tài)顯示、步進(jìn)電機(jī)驅(qū)動(dòng)等技術(shù),在目前教材中基本都是完成單一這類功能的小程序,而在實(shí)際應(yīng)用系統(tǒng)中,這些功能要與系統(tǒng)核心任務(wù)并行執(zhí)行,是一個(gè)“多任務(wù)”的概念,不能簡(jiǎn)單地將教材示例的單一的小程序搬到應(yīng)用系統(tǒng)中。其它如結(jié)合鍵盤(pán)掃描和多級(jí)LCD菜單形成多任務(wù)下的人機(jī)交互通道這些系統(tǒng)性內(nèi)容的考慮,在單元教學(xué)中都要考慮到。

2.3教學(xué)內(nèi)容和體系調(diào)整

調(diào)整應(yīng)用匯編和C語(yǔ)言教學(xué)的比例。匯編指令有助于對(duì)單片機(jī)硬件的學(xué)習(xí),程序代碼短、速度快,較多地應(yīng)用在對(duì)時(shí)序有嚴(yán)格要求的測(cè)控系統(tǒng)中。隨著單片機(jī)硬件和軟件編譯技術(shù)的發(fā)展,代碼長(zhǎng)度和速度已不是主要問(wèn)題,重在軟件質(zhì)量、開(kāi)發(fā)周期和開(kāi)發(fā)維護(hù)成本,大多數(shù)場(chǎng)合應(yīng)用匯編的必要性已不存在。因此教學(xué)應(yīng)以C語(yǔ)言為主,匯編只講解指令原理、尋址方式、必要的指令和在C語(yǔ)言中嵌入?yún)R編程序的方法和實(shí)例。調(diào)整單元模塊教學(xué)順序。現(xiàn)有教材中一般將人機(jī)交互設(shè)計(jì)的內(nèi)容放在最后,這不利于學(xué)生自主實(shí)踐。由于無(wú)法實(shí)施對(duì)運(yùn)行過(guò)程必要的監(jiān)測(cè),使其在沒(méi)有仿真系統(tǒng)情況下調(diào)試有相當(dāng)?shù)碾y度。因此,將人機(jī)交互部分盡可能地提前可達(dá)到很好的效果。單片機(jī)基礎(chǔ)課程傳統(tǒng)教學(xué)對(duì)新機(jī)型和新技術(shù)介紹較少,應(yīng)做適當(dāng)?shù)难a(bǔ)充。增加IIC、SPI、PS/2等相關(guān)技術(shù)和應(yīng)用的介紹、對(duì)其它典型單片機(jī)如AVR簡(jiǎn)要的介紹,使學(xué)生在掌握基本單片機(jī)技術(shù)基礎(chǔ)上,能更容易地進(jìn)入到高級(jí)層次的應(yīng)用。

2.4挖掘基本知識(shí)內(nèi)容的深度

把MCS-51單片機(jī)基礎(chǔ)知識(shí)講透徹,對(duì)后續(xù)嵌入式系統(tǒng)深層次學(xué)習(xí)可打下良好的基礎(chǔ)。以外中斷的重復(fù)響應(yīng)和堆棧的溢出問(wèn)題為例,學(xué)生在實(shí)際應(yīng)用中經(jīng)常遇到,但在教材中沒(méi)有相應(yīng)的說(shuō)明。前者是由于外中斷請(qǐng)求信號(hào)有毛刺,即使在進(jìn)入中斷立即屏蔽中斷,且中斷請(qǐng)求信號(hào)已經(jīng)撤銷的情況下,在退出中斷后還將引起此中斷的重復(fù)響應(yīng)。問(wèn)題在于對(duì)中斷請(qǐng)求信號(hào)、請(qǐng)求標(biāo)志和響應(yīng)過(guò)程這些基本知識(shí)講述不到位;后者是對(duì)堆棧空間位置、容量及系統(tǒng)對(duì)堆棧使用沒(méi)有準(zhǔn)確概念。類似的因基本知識(shí)講述深度不夠,導(dǎo)致學(xué)生困惑的問(wèn)題還有很多。因此要注重研究實(shí)際應(yīng)用中典型問(wèn)題背后的原因,深化和細(xì)化基本知識(shí)的講授,這對(duì)實(shí)際應(yīng)用和提高可起到至關(guān)重要的作用。

2.5理論課中的實(shí)踐內(nèi)容

單片機(jī)是一門實(shí)踐性極強(qiáng)的課程,該理論課不講授實(shí)驗(yàn)實(shí)際是一個(gè)誤區(qū)。在理論課應(yīng)用Proteus做部分仿真實(shí)驗(yàn),實(shí)驗(yàn)效率高、理論教學(xué)效果好,并可達(dá)到擴(kuò)展學(xué)習(xí)到課外的效果。因此,需協(xié)調(diào)好理論與實(shí)驗(yàn)課關(guān)系,對(duì)仿真實(shí)驗(yàn)學(xué)時(shí)做一定的硬性要求。另一個(gè)問(wèn)題是系統(tǒng)調(diào)試技術(shù)的教學(xué)。系統(tǒng)調(diào)試是初學(xué)者開(kāi)發(fā)單片機(jī)應(yīng)用系統(tǒng)的一個(gè)難點(diǎn),特別是在無(wú)仿真器情況下進(jìn)行軟件調(diào)試。因此,在理論課中講述初等調(diào)試技術(shù)是有必要的,例如用示波器、LED顯示測(cè)信號(hào)、串行通信監(jiān)測(cè)程序流程等。使學(xué)生提高系統(tǒng)設(shè)計(jì)和調(diào)試技能的同時(shí),提高了實(shí)驗(yàn)課效率,使實(shí)驗(yàn)課有更多的時(shí)間用于綜合性實(shí)驗(yàn)中。

3實(shí)踐教學(xué)模式的改革

3.1基于項(xiàng)目引領(lǐng)的實(shí)驗(yàn)?zāi)J?/p>

我們?cè)S多課程的實(shí)驗(yàn)課教學(xué)模式,基本上都出于傳統(tǒng)的公共基礎(chǔ)課實(shí)踐教學(xué)。其特點(diǎn)是對(duì)單一某個(gè)理論教學(xué)內(nèi)容進(jìn)行實(shí)驗(yàn)演示和驗(yàn)證。由于思維的慣性,這種傳統(tǒng)自然也延續(xù)到單片機(jī)實(shí)驗(yàn)課中,致使學(xué)生綜合性實(shí)驗(yàn)?zāi)芰^弱,完成課程設(shè)計(jì)和實(shí)際應(yīng)用設(shè)計(jì)的難度較大。作為嵌入式基礎(chǔ)和初級(jí)應(yīng)用的單片機(jī)基礎(chǔ)課程,其最大特點(diǎn)是工程性。單片機(jī)本身是一個(gè)強(qiáng)大的系統(tǒng)集成工具,學(xué)生在專業(yè)知識(shí)基礎(chǔ)上用單片機(jī)及相關(guān)器件進(jìn)行綜合分析和設(shè)計(jì),最終要制作出滿足用戶要求的產(chǎn)品。因此,單片機(jī)實(shí)驗(yàn)課的主體思路是綜合性、工程性。基于這一點(diǎn),我們對(duì)實(shí)驗(yàn)課在宏觀上調(diào)整為基于項(xiàng)目引領(lǐng)的實(shí)驗(yàn)?zāi)J健J紫仁菍⒒A(chǔ)性實(shí)驗(yàn)以Proteus軟件仿真形式在理論課上實(shí)驗(yàn)和演示;其次是配合理論課將整個(gè)學(xué)期的實(shí)驗(yàn)課安排成一個(gè)應(yīng)用項(xiàng)目,將整個(gè)項(xiàng)目按照內(nèi)部資源、擴(kuò)展資源、前向通道、后向通道和人機(jī)通道等部分分解成各個(gè)模塊作為每次試驗(yàn)課的內(nèi)容。學(xué)生在完成單次試驗(yàn)的基礎(chǔ)上,從軟硬件的角度對(duì)項(xiàng)目整體架構(gòu)不斷地加深認(rèn)識(shí)和理解,最后完成一個(gè)項(xiàng)目的全過(guò)程實(shí)驗(yàn)。在這個(gè)過(guò)程中,學(xué)生不斷地積累系統(tǒng)級(jí)分析設(shè)計(jì)的能力,不斷地積累著成就感。學(xué)生增強(qiáng)了對(duì)實(shí)驗(yàn)課的興趣,大幅提高了單片機(jī)實(shí)驗(yàn)課的效率和效果。

3.2多種實(shí)驗(yàn)手段的綜合運(yùn)用

現(xiàn)在高校學(xué)生基本上都基于實(shí)驗(yàn)箱做實(shí)驗(yàn)。相對(duì)于傳統(tǒng)實(shí)驗(yàn)手段(手工焊接或用面包板),實(shí)驗(yàn)箱在單片機(jī)應(yīng)用系統(tǒng)的軟件實(shí)驗(yàn)方面具有優(yōu)越性,但在硬件實(shí)驗(yàn)方面,則現(xiàn)出其明顯的弊端。學(xué)生按照實(shí)驗(yàn)指導(dǎo)書(shū)的指示在實(shí)驗(yàn)箱上連接各端子,學(xué)生大多不去了解這種連接后形成的電路;沒(méi)有從設(shè)計(jì)、元器件連接、調(diào)試到完成全過(guò)程的鍛煉;實(shí)驗(yàn)箱資源有限;不能進(jìn)行多種硬件方案的試驗(yàn)、硬件電路的優(yōu)化設(shè)計(jì)和創(chuàng)新。我們根據(jù)實(shí)驗(yàn)不同分別采用不同的實(shí)驗(yàn)手段。應(yīng)用面包板的實(shí)驗(yàn),側(cè)重于自己設(shè)計(jì)電路實(shí)驗(yàn)方案、創(chuàng)新潛能的開(kāi)發(fā)和硬件系統(tǒng)級(jí)調(diào)試技術(shù)的學(xué)習(xí);手工焊接的實(shí)驗(yàn)側(cè)重于實(shí)際動(dòng)手技能和模塊及硬件調(diào)試方法的學(xué)習(xí)和鍛煉;應(yīng)用試驗(yàn)箱的實(shí)驗(yàn)則重點(diǎn)側(cè)重于復(fù)雜系統(tǒng)的編程和軟件調(diào)試。同時(shí),這些實(shí)驗(yàn)手段的綜合應(yīng)用,給學(xué)生創(chuàng)造了一個(gè)寬松的軟硬件實(shí)驗(yàn)環(huán)境和發(fā)揮創(chuàng)造性的空間,增大了實(shí)驗(yàn)課的吸引力,促進(jìn)了對(duì)理論教學(xué)的理解,達(dá)到了很好的效果。

3.3發(fā)掘第二課堂的深度和廣度

單片機(jī)課外教學(xué)活動(dòng)是可行和必要的。組織成立學(xué)生課外活動(dòng)小組,為學(xué)生設(shè)計(jì)階段性任務(wù)。這些任務(wù)可以是承擔(dān)科研項(xiàng)目的分解部分,也可以是有意義和價(jià)值的小題目。學(xué)生的任務(wù)可以指標(biāo)化,小組實(shí)行優(yōu)勝劣汰。這對(duì)學(xué)生提高課程興趣、加深理解、拓展知識(shí)和帶動(dòng)整體學(xué)習(xí)起到了重要作用。每年一次由教育部和信息產(chǎn)業(yè)部共同舉辦的大學(xué)生電子設(shè)計(jì)競(jìng)賽,是一次極好的單片機(jī)實(shí)踐教學(xué)活動(dòng)。要進(jìn)行規(guī)范整理,優(yōu)化模塊設(shè)計(jì),使之成為標(biāo)準(zhǔn)件,進(jìn)而成為教學(xué)資源,進(jìn)而促進(jìn)教學(xué)教改工作進(jìn)展和良好學(xué)風(fēng)校風(fēng)的建設(shè)。

4結(jié)語(yǔ)

第11篇

實(shí)驗(yàn)操作是理論聯(lián)系實(shí)際的重要環(huán)節(jié),實(shí)驗(yàn)報(bào)告必須在科學(xué)實(shí)驗(yàn)的基礎(chǔ)上進(jìn)行,實(shí)驗(yàn)報(bào)告的撰寫(xiě)是知識(shí)系統(tǒng)化的吸收和升華的過(guò)程,實(shí)驗(yàn)報(bào)告應(yīng)該體現(xiàn)完整性、規(guī)范性、正確性、有效性。現(xiàn)將撰寫(xiě)實(shí)驗(yàn)報(bào)告的有關(guān)內(nèi)容說(shuō)明如下:

1.實(shí)驗(yàn)名稱

2.實(shí)驗(yàn)?zāi)康?/p>

本次實(shí)驗(yàn)所涉及并要求掌握的知識(shí)點(diǎn)。

3.實(shí)驗(yàn)內(nèi)容與實(shí)驗(yàn)步驟

實(shí)驗(yàn)內(nèi)容、原理、原理圖分析及具體實(shí)驗(yàn)步驟。

4.實(shí)驗(yàn)環(huán)境

實(shí)驗(yàn)所使用的器件、儀器設(shè)備名稱及規(guī)格。

5.設(shè)計(jì)實(shí)驗(yàn)數(shù)據(jù)表格

6.實(shí)驗(yàn)過(guò)程與分析

詳細(xì)記錄在實(shí)驗(yàn)過(guò)程中發(fā)生的故障和問(wèn)題,并進(jìn)行故障分析,說(shuō)明故障排除的過(guò)程及方法。

根據(jù)具體實(shí)驗(yàn),記錄、整理相應(yīng)數(shù)據(jù)表格、繪制曲線、波形圖等,并進(jìn)行誤差分析。

7.實(shí)驗(yàn)結(jié)果總結(jié)

對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析,完成思考題目,總結(jié)實(shí)驗(yàn)的心得體會(huì),并提出實(shí)驗(yàn)的改進(jìn)意見(jiàn)。

注:1.前5項(xiàng)必須在做實(shí)驗(yàn)之前完成,并由指導(dǎo)教師簽字后才能做實(shí)驗(yàn)。

2.對(duì)于學(xué)生自擬實(shí)驗(yàn)題目、參與科研、創(chuàng)新實(shí)驗(yàn)等形式實(shí)驗(yàn)項(xiàng)目的實(shí)驗(yàn)報(bào)告可采用論文、實(shí)驗(yàn)總結(jié)報(bào)告等形式完成。

3.此封皮標(biāo)準(zhǔn)頁(yè)面為16K,實(shí)驗(yàn)報(bào)告:實(shí)驗(yàn)名稱:

熟悉PIC系列單片機(jī)的開(kāi)發(fā)環(huán)境及簡(jiǎn)單編程

實(shí)驗(yàn)?zāi)康模?/p>

1. 通過(guò)順序結(jié)構(gòu)的簡(jiǎn)單程序設(shè)計(jì),熟悉PIC系列單片機(jī)的開(kāi)發(fā)環(huán)境,掌握基本應(yīng)用步驟和命令;

2. 熟悉匯編語(yǔ)言指令,掌握基本的程序設(shè)計(jì)方法。

實(shí)驗(yàn)環(huán)境:

PC計(jì)算機(jī) MAPLAB編譯環(huán)境

實(shí)驗(yàn)原理 :

實(shí)驗(yàn)一:交換兩個(gè)寄存器內(nèi)容(例如交換f10H和f11H的內(nèi)容) 實(shí)驗(yàn)過(guò)程比較簡(jiǎn)單,無(wú)分支程序,而且思路十分清晰,難度不大。

實(shí)驗(yàn)二:(選作)將某一寄存器內(nèi)容中的奇偶位數(shù)據(jù)交換。

本實(shí)驗(yàn)的思想是:將寄存器中數(shù)據(jù)同10101010二進(jìn)制數(shù)相與,得到原數(shù)據(jù)的奇數(shù)位,并向右移一位后存至一個(gè)寄存器,作為結(jié)果數(shù)據(jù)的偶位數(shù);再將寄存器中數(shù)據(jù)同01010101二進(jìn)制數(shù)相與,得到原數(shù)據(jù)的偶數(shù)位,并向左移一位后存至另外一個(gè)寄存器,作為結(jié)果數(shù)據(jù)的奇位數(shù)。最后,將這兩個(gè)寄存器中的數(shù)字進(jìn)行或運(yùn)算,得到結(jié)果。

實(shí)驗(yàn)中,使用了RO作為記錄原數(shù)奇位數(shù)的寄存器,RE作為記錄原數(shù)偶位數(shù)的寄存器,RN作為記錄員數(shù)據(jù)的寄存器,RR作為記錄結(jié)果的寄存器。

實(shí)驗(yàn)程序:

實(shí)驗(yàn)一:

LIST P=16C54

RA EQU 10

RB EQU 11

RT EQU 12

ORG 1FFH

GOTO MAIN

ORG 0

MAIN NOP

MOVLW 0

MOVWF RT

MOVLW 15H

MOVWF RA

MOVLW 3AH

MOVWF RB

MOVF RA,0

MOVWF RT

MOVF RB,0

MOVWF RA

MOVF RT,0

MOVWF RB

END

實(shí)驗(yàn)二:(選作)

LIST P=16C54

RO EQU 10

RE EQU 11

RN EQU 13

STATU EQU 3

CARRY EQU 0

RR EQU 12

ORG 1FFH

GOTO MAIN

ORG 0

MAIN NOP

MOVLW 99H

MOVWF RN; GIVE VALUE

ANDLW B'10101010'

MOVWF RE

BCF STATU, CARRY

RRF RE; ODD->EVEN

MOVF RN,0

ANDLW &nbs p; B'01010101'

BCF STATU, CARRY

MOVWF RO

RLF RO; EVEN->ODD

MOVF RO,0

IORWF RE,0; ADD THE TWO PARTS OF THE NUMBER BY OR THEM

MOVWF RR

END

調(diào)試結(jié)果:

實(shí)驗(yàn)一結(jié)果:

1、賦值后

2、調(diào)換中

3、調(diào)換后

實(shí)驗(yàn)二結(jié)果:

1、賦值后

2、取奇數(shù)位的數(shù)值存入RE

3、將奇數(shù)位的數(shù)值右移一位

5、取偶數(shù)位的數(shù)值存入RO

6、將偶數(shù)位的數(shù)值左移一位

7、得到最后結(jié)果

實(shí)驗(yàn)分析與實(shí)驗(yàn)體會(huì):

本實(shí)驗(yàn)通過(guò)順序結(jié)構(gòu)的簡(jiǎn)單程序設(shè)計(jì),我基本掌握了PIC系列單片機(jī)的開(kāi)發(fā)步驟和命令,熟悉了PIC系列單片機(jī)的開(kāi)發(fā)環(huán)境MAPLAB,并在具體變成過(guò)程中,熟悉匯編語(yǔ)言指令,掌握基本的程序設(shè)計(jì)方法。

雖然本實(shí)驗(yàn)是基本練習(xí),目的是為了熟悉實(shí)驗(yàn)環(huán)境,但是,在實(shí)驗(yàn)中還是學(xué)到了很多東西:

第12篇

摘要:本文探討了基于C語(yǔ)言的ARM嵌入式程序設(shè)計(jì)課程中學(xué)生反映不好掌握的一些知識(shí)點(diǎn)。

關(guān)鍵詞:ARM嵌入式;C語(yǔ)言;程序設(shè)計(jì);技巧

中圖分類號(hào):G642

文獻(xiàn)標(biāo)識(shí)碼:B

引言

嵌入式C語(yǔ)言程序設(shè)計(jì)是利用基本的C語(yǔ)言知識(shí),面向嵌入式工程實(shí)際應(yīng)用進(jìn)行程序設(shè)計(jì)語(yǔ)言。如何能夠在嵌入式系統(tǒng)開(kāi)發(fā)中熟練、正確地運(yùn)用C語(yǔ)言開(kāi)發(fā)出高質(zhì)量的應(yīng)用程序,是學(xué)習(xí)嵌入式程序設(shè)計(jì)的關(guān)鍵。下面介紹基于C語(yǔ)言的ARM嵌入式程序設(shè)計(jì)課程中學(xué)生反映不好掌握的一些難點(diǎn)。

1變量定義

先看下面一個(gè)例子:

char  a; char  a;

short b; char  c;

char  c; short b;

int

d; int

d;

這里定義的4個(gè)變量形式都一樣,只是次序不同,卻導(dǎo)致了在最終映像中不同的數(shù)據(jù)布局,如圖1所示。顯然,第2種方式節(jié)約了更多的存儲(chǔ)空間(Pad為無(wú)意義的填充數(shù)據(jù))。

由此可見(jiàn),在變量聲明時(shí),最好把所有相同類型的變量放在一起定義,這樣可以優(yōu)化存儲(chǔ)器布局。

圖1變量在數(shù)據(jù)區(qū)里的布局

對(duì)于局部變量類型的定義,一般情況下,人們總是設(shè)法使用short或char來(lái)定義變量,以節(jié)省存儲(chǔ)空間;但是,當(dāng)一個(gè)函數(shù)的局部變量數(shù)目有限時(shí),其結(jié)果恰恰相反。因?yàn)榫幾g器會(huì)把局部變量分配給內(nèi)部寄存器,每個(gè)變量占用一個(gè)寄存器,如圖2所示。假定a1是任意可能的寄存器存儲(chǔ)函數(shù)的局部變量,同樣完成加1的操作,32位的int型變量最快,只用1條加法指令。而8位和16位變量,完成加法操作后,還需要在32位的寄存器中進(jìn)行括號(hào)擴(kuò)展,其中有符號(hào)的變量,要用邏輯左移(LSL)和算術(shù)右移(ASR)2條指令才能完成符號(hào)擴(kuò)展;無(wú)符號(hào)的變量,要使用1條邏輯“與”(AND)指令對(duì)符號(hào)位進(jìn)行清0。所以,使用32位int或unsingedint局部變量最有效率。

圖2不同類型局部變量的編譯結(jié)果

變量定義中,為了精簡(jiǎn)程序,程序員總是竭力避免使用冗余變量。通常情況下這是正確的,但也有例外。

例如:冗余變量的使用與否比較。

int f(void);

int g(void);

int errs;

void test1(void)

{

errs+=f();

errs+=g();

}

void test2(void)

{

int localerrs=errs;

localerrs+=f();

localerrs+=g();

errs=localerrs;

}

在第一種情況test1()里,每次訪問(wèn)全局變量errs時(shí),都要先從相應(yīng)的存儲(chǔ)器Load到寄存器里,經(jīng)f()或g()函數(shù)調(diào)用后再Store回原來(lái)的存儲(chǔ)區(qū)里面。在這個(gè)例子里,一共要進(jìn)行2次這樣的Load/Store操作(第一次是Load,第2次是Store)。而在第2種情況test2()里,局部變量localerrs被分配以寄存器,這樣一來(lái),整個(gè)函數(shù)就只需1次Load/Store訪問(wèn)全局變量存儲(chǔ)器。減少存儲(chǔ)器訪問(wèn)的次數(shù)對(duì)于系統(tǒng)性能的改善是非常有好處的。

2參數(shù)傳遞

為了使單獨(dú)編譯的C語(yǔ)言程序和匯編程序能夠互相調(diào)用,定義了統(tǒng)一的函數(shù)過(guò)程調(diào)用標(biāo)準(zhǔn)ATPCS(ARM-Thumb Procedure Call Standard)。ATPCS定義了寄存器組中的{R0~R3}作為參數(shù)傳遞和結(jié)果返回寄存器。如果參數(shù)數(shù)目超過(guò)4個(gè),則使用堆棧進(jìn)行傳遞。由于內(nèi)部寄存器的訪問(wèn)速度遠(yuǎn)遠(yuǎn)大于存儲(chǔ)器,所以要盡量使參數(shù)傳遞在寄存器里面進(jìn)行,即應(yīng)盡量把函數(shù)的參數(shù)控制在4個(gè)以下。例如:從C語(yǔ)言中直接調(diào)用匯編語(yǔ)言函數(shù):

extern void strcopy(char *d,const char *s);

int main(void){

const char src=“Source”;

char dest[10];

strcopy(dest,src);

}

AREAStrCopy,CODE,READONLY

EXPORT strcopy

strcopy

LDRBR2,[R1],#1

STRBR2,[R0],#1

CMP R2,#0

BNE strcopy

MOVPC,LR

END

例子中的函數(shù)strcopy(dest,src)用匯編來(lái)實(shí)現(xiàn)。根據(jù)ATPCS的定義,函數(shù)參數(shù)從左到右由寄存器進(jìn)行傳遞,所以在匯編中可直接由R0和R1進(jìn)行引用。這樣,在C語(yǔ)言和匯編語(yǔ)言之間進(jìn)行相互調(diào)用就容易實(shí)現(xiàn)了。

3循環(huán)條件

計(jì)數(shù)循環(huán)是程序中十分常用的流程控制結(jié)構(gòu)。在C語(yǔ)言中,常用下面累加計(jì)數(shù)的循環(huán)形式:

for(loop=1;loop

這種累加計(jì)數(shù)的方法符合一般的自然思維習(xí)慣,所以下面這種遞減計(jì)數(shù)方法很少使用:

for(loop= limit;loop!=0;loop--)

這2種循環(huán)形式在邏輯上并沒(méi)有效率差異,但是映射到具體的體系結(jié)構(gòu)中時(shí),就產(chǎn)生了很大的不同,如圖3所示。

圖3不同的循環(huán)條件設(shè)置比較

從圖中可以發(fā)現(xiàn),累加法比遞減法多用了1條指令,當(dāng)循環(huán)次數(shù)比較大時(shí),這2段代碼就會(huì)在性能上產(chǎn)生明顯的差異。

其本質(zhì)原因是:當(dāng)進(jìn)行一個(gè)非0常數(shù)比較時(shí),必須用專門的CMP指令來(lái)執(zhí)行;而當(dāng)一個(gè)變量與0進(jìn)行比較時(shí),ARM指令則可直接利用條件執(zhí)行的特性(NE)來(lái)進(jìn)行判別。因此,在ARM的體系結(jié)構(gòu)下編程,最好采用遞減至0的方法來(lái)設(shè)置循環(huán)條件。

參考文獻(xiàn)

[1] 梁合慶等. 從C到嵌入式C編程語(yǔ)言[M]. 北京航空航天大學(xué)出版社,2000.

[2] 田澤. 嵌入式系統(tǒng)開(kāi)發(fā)與應(yīng)用[M]. 北京航空航天大學(xué)出版社,2005.

亚洲精品无码久久久久久久性色,淫荡人妻一区二区三区在线视频,精品一级片高清无码,国产一区中文字幕无码
亚洲911精品一区二区 | 在线天堂网新版 | 日韩亚洲精品视频 | 亚洲中文AⅤ一二三区 | 最新国产在线不卡AV | 日本一区二区三区免费精品 |