資源描述:
《《匯編語言-宏指令》PPT課件.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、本章學(xué)習(xí)要點:(1)宏匯編(2)重復(fù)匯編(3)條件匯編一、宏、宏匯編宏是計算機軟件系統(tǒng)中一個廣泛存在的概念。從辦公軟件OFFICE到程序開發(fā)語言C等等,可以把某項要操作的某一個過程定義為宏。具體到在匯編語言中,宏也是匯編的主要特點之一,它是與子程序類似但又獨具特色的另外一種簡化源程序的方法。(一)宏指令的定義和使用宏指令在使用之前要先定義,其格式一般如下:宏指令名MACRO[形式參數(shù)表];參數(shù)的另外一個名稱變元……(宏定義體)ENDM可選的形式參數(shù)表可由若干參數(shù)組成,各形參間用逗號分隔。例如,把通過DOS的1功能調(diào)用從鍵盤讀入一個字符
2、的程序片段定義為一個宏:GETCHMACROMOVAH,1INT21H;從鍵盤鍵入一個字符時,該字符存入ALENDM在定義宏指令后,就可以通過宏指令來表示對應(yīng)的程序片段,這成為宏調(diào)用。其格式為:宏指令名[實參表]在對源程序匯編時,匯編程序把程序中的宏指令替換成對應(yīng)的宏定義體,這稱為宏展開或宏擴(kuò)展。如:……….GETCH對應(yīng)為--->MOVAH,1……INT21H…盡管都實現(xiàn)了調(diào)用,但是宏調(diào)用和子程序的調(diào)用是有差別的:宏調(diào)用更多地是表示一種替換?。ǘ┖曛噶畹挠猛?.縮短源代碼2.擴(kuò)充指令集3.更改某些指令助記符的意義(宏指令的優(yōu)先級高
3、于指令和偽指令)(三)宏指令中參數(shù)的使用宏指令可以不帶參數(shù),但往往帶有參數(shù)的宏指令更具靈活性。1.指令的參數(shù)可以是常數(shù)、寄存器和存儲單元,還可以是表達(dá)式。例:MOVCL,4SALAL,CL如上述代碼要多次使用,就可以定義為:SHIFTMACROMOVCL,4SALAL,CLENDM但是,如果每次的移位次數(shù)不同了,則可定義為:SHIFTMACROX;X為參數(shù)MOVCL,XSALAL,CLENDM這是,調(diào)用方式可為:SHIFT4;移4位SHIFT6;移6位,顯然,有參數(shù)時使用起來更靈活。2.宏指令的參數(shù)可以是操作碼例如:有下面的宏定義:M
4、ANDMMACROOPR,X,YMOVAX,XOPRAX,YMOVX,AXENDM該宏定義的意思是?????改宏被調(diào)用和展開的時候,意義就明確了。如:MANDMMOV,[BX],[SI]MANDMADD,[BX],ES:[1234H]參數(shù)還可以是操作碼的一部分:SHIFTMACROX,Y,ZMOVCL,XS&ZY,CL;&起符號連接作用ENDM調(diào)用:SHIFT4,AL,AL展開為:MOVCL,4;4為參數(shù)XSALAL,CL;第1個“AL”為參數(shù)Z,第2個“AL”為參數(shù)Y該宏的調(diào)用方式還可以是:“SHIFT6,BX,AR”或“SHIFT
5、8,SI,HR”等等。3.宏調(diào)用參數(shù)個數(shù)可以與定義時不一致正常情況下,宏調(diào)用時使用的實參個數(shù)應(yīng)該與宏定義時的形參個數(shù)一致,但匯編程序并不要求他們它們必須相等。若實參個數(shù)多于形參個數(shù),那么多余的實參被忽略;若實參個數(shù)少于形參的個數(shù),那么多余的形參用“空”代替。4.兩個特殊的宏運算符(1)強迫替換運算符&在宏定義中,若參數(shù)在其它字符的緊前或緊后,或者參數(shù)出現(xiàn)在帶引號的字符串中時,就必須使用該運算符,以區(qū)分參數(shù)。例:在下面宏指令JUMP中,參數(shù)CON作為操作碼一部分。JUMPMACROCON,LABJ&CONLABENDM則調(diào)用時,JUMP
6、NZHEAR->JNZHEARJUMPZ,THERE->JZTHERE例:在下面宏指令MSGGEN中,兩個參數(shù)合并成一個標(biāo)號,一個參數(shù)用在字符串中。MSGGENMACROLAB,NUM,XYZLAB&NUMDB‘HELLOMR.&XYZ’,0DH,0AH,24HMSGGEN則調(diào)用MSGGENMSG,1,TAYLOR展開為:MSG1DB‘HELLOMR.TAYLOR’,0DH,0AH,24H(2)表達(dá)式運算符%在宏調(diào)用時,使用該運算符把其后表達(dá)式的結(jié)果作為宏參替換,而非表達(dá)式自身。宏MSGGEN的定義方式如上例。則調(diào)用MSGGENMSG
7、,%(2+3),‘TOM’展開為:MSG5DB‘HELLOMR.TOM’,0DH,0AH,24H5.與宏有關(guān)的偽指令(1)局部標(biāo)號說明偽指令LOCAL格式:LOCAL標(biāo)號表標(biāo)號表由標(biāo)號構(gòu)成,標(biāo)號間用逗號分隔。匯編程序在每次展開時,總把由LOCAL偽指令說明的標(biāo)號用唯一的符號(??0000至??FFFF)代替,從而避免標(biāo)號重定義錯誤。例如:定義一個取絕對值的宏ABSOLMACROOPERLOCALNEXTCMPOPER,0JGENEXTNEGOPERNEXT:ENDM宏調(diào)用ABSOLVARABSOLBX時,宏展開:…;主程序中的代碼段…
8、CMPVAR,0JGE??0000NEGVAR??0000:CMPBX,0JGE??0001NEGBX??0001:…(2)清除宏定義的為指令PURGE格式:PURGE宏名表例如:…AAAMACRO…ENDM……;宏AA