資源描述:
《8086匯編語言宏指令語句》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、5.4宏指令語句1.宏指令、宏定義和宏調(diào)用宏指令是源程序中具有獨(dú)立功能的一段程序代碼。在匯編語言中,如果在源程序中需要多次使用同一個(gè)程序段,可以將這個(gè)程序段定義(宏定義)為一個(gè)宏指令,然后每次需要是,即可簡單地用宏指令名來代替(稱為宏調(diào)用),從而避免了重復(fù)書寫,使源程序更加簡潔、易讀。宏定義由MASM宏匯編程序提供的偽指令實(shí)現(xiàn),其格式為宏指令名MACRO[形式參數(shù)]ENDM宏調(diào)用的格式為宏指令名[實(shí)際參數(shù)]這就是說,只要在源程序中寫上已定義過的宏指令名就算是調(diào)用該宏指令了。具有宏調(diào)用的源程序被匯編時(shí),每個(gè)宏調(diào)
2、用將被MASM進(jìn)行宏展開。宏展開實(shí)際上是用宏定義式設(shè)計(jì)的宏體去代替相應(yīng)的宏指令,并用實(shí)際參數(shù)一一取代形參。…宏體由此可見,使用宏的過程共有三步:首先進(jìn)行宏定義;然后可以進(jìn)行宏調(diào)用;最后,匯編時(shí)由MASM進(jìn)行宏展開。[例]若源程序中多處需要將AL和CL寄存器中的兩位壓縮型的BCD數(shù)相加,并將和送回BL寄存器,則可象下述這樣定義宏指令,然后在需要的地方進(jìn)行調(diào)用。DECADDMACROADDAL,CLDAAENDM顯而易見,這是一個(gè)無形式參數(shù)的宏定義。如果對分別存放在任意8位寄存器或存儲(chǔ)單元中的兩個(gè)壓縮型的BCD數(shù)
3、進(jìn)行加法運(yùn)算,則可將上例宏定義改寫為DECADD1MACROOPR1,OPR2MOVAL,OPR1ADDAL,OPR2DAAMOVOPR1,ALENDM這是一個(gè)帶有兩個(gè)形式參數(shù)的宏定義。宏指令為DECADD1。例如有以下宏調(diào)用:DECADD1DL,BUFFERDECADD1AREA1,AREA2則匯編時(shí)進(jìn)行宏展開,得到以下指令:DECADD1DL,BUFFER+MOVAL,DL+ADDAL,BUFFER+DAA+MOVDL,ALDECADD1AREA1,AREA2+MOVAL,AREA1+ADDAL,AREA
4、2+DAA+MOVAREA1,AL宏擴(kuò)展后,原來宏體中的指令前面都加上了符號“+”,以示區(qū)別。宏指令與子程序的區(qū)別在匯編語言程序設(shè)計(jì)中,宏指令和子程序都給設(shè)計(jì)者提供了很大方便。他們都是可被程序多次調(diào)用的程序段,并且調(diào)用前必須由設(shè)計(jì)者事先根據(jù)需要按一定格式進(jìn)行定義。然而,宏指令和子程序由于定義方法和幾個(gè)是不同,使用中會(huì)有許多不同之處,主要是空間和時(shí)間的差異。⑴子程序由CALL指令調(diào)用,由RET指令返回,所以匯編后子程序的機(jī)器碼只占有一個(gè)程序段,不管調(diào)用多少次均如此,較為節(jié)約內(nèi)存。宏指令在每次宏調(diào)用處宏展開時(shí),宏
5、體都要占一個(gè)程序段,調(diào)用次數(shù)愈多,占用內(nèi)存愈多。因此從內(nèi)存空間開銷來說,子程序優(yōu)于宏指令。⑵從程序的執(zhí)行時(shí)間來分析,每調(diào)用一次子程序都要保護(hù)和恢復(fù)返回地址(斷點(diǎn))及寄存器內(nèi)容(現(xiàn)場)等,要消耗較多的時(shí)間。宏指令調(diào)用時(shí)不需要這個(gè)過程,執(zhí)行時(shí)間較短。因此,從執(zhí)行時(shí)間來分析,宏指令又優(yōu)于子程序。綜上所述,當(dāng)某一需多次訪問的程序段較長,訪問次數(shù)又不是太多時(shí),選用子程序結(jié)構(gòu)較好。當(dāng)某一需多次訪問的程序段較短,訪問次數(shù)又很頻繁時(shí),選用宏指令結(jié)構(gòu)顯然要更好些。.EXE文件5.5匯編語言程序上機(jī)過程要想在計(jì)算機(jī)上運(yùn)行匯編語言
6、程序,必須首先對源程序進(jìn)行匯編和連接。下圖表示了對匯編語言源程序的編輯、匯編和連接的過程。手寫程序.ASM文件.OBJ文件編輯程序編輯匯編程序匯編連接程序連接EDITMASMLINK匯編語言程序上機(jī)過程5.5.1用編輯程序建立匯編語言源程序文件建立一個(gè)匯編語言源程序,可以使用Windows系統(tǒng)下的記事本程序來編寫,也可以使用DOS操作系統(tǒng)下的EDIT程序來編寫。例如從鍵盤輸入二個(gè)數(shù)存入內(nèi)存以DATA開始的二個(gè)單元中,然后選出其中的大數(shù)輸出。設(shè)編輯后的匯編語言源程序名為:exp1.asm5.5.2用匯編程序?qū)?
7、ASM文件匯編成目標(biāo)程序文件.OBJ在對匯編語言源程序文件(簡稱ASM文件)匯編時(shí),匯編程序?qū)SM文件進(jìn)行二遍掃描。若程序文件中有語法錯(cuò)誤,則在結(jié)束匯編后將指出源程序中的錯(cuò)誤語句及錯(cuò)誤類型。否則將在匯編后生成目標(biāo)程序文件(即OBJ文件)完成匯編功能的是小匯編程序ASM或宏匯編程序MASM。匯編過程如下表所示:MASM宏匯編的提示信息及回答交叉參考文件用的文件名(缺?。簾o交叉參考文件)Crossreference[NUL.CRF]:(交叉參考文件名)列表文件名(缺?。簾o列表文件)Sourcelisting[
8、NUL.LST]:(源列表文件名)可重新定位目標(biāo)文件名(缺?。涸次募?OBJ)Objectfilename[Source.OBJ]:(目標(biāo)文件名)欲匯編的.ASM源文件名(缺省:命令中的文件名)Sourcefilename[.ASM]:(源文件名)回答提示信息5.2.3用連接程序生成可執(zhí)行程序文件(EXE文件)經(jīng)匯編后產(chǎn)生的目標(biāo)程序文件(OBJ文件)并不是可執(zhí)行程序文件,必須經(jīng)連接后才能成為可執(zhí)行