資源描述:
《IBM-PC匯編語言(⑦高級匯編語言技術(shù)).ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第7章高級匯編語言技術(shù)1ch77.1宏匯編為什么使用宏匯編?在編制匯編語言程序過程中,有些功能程序段需要多次重復(fù)使用,所不同的只是參與操作的操作數(shù)。為了減少編程的工作量,通常采用兩種方法:①將程序段編寫為獨立的子程序②將程序段定義成宏大家想一下子程序有什么優(yōu)缺點?什么是宏?宏(或宏指令)是源程序中一段有獨立功能的程序代碼,只需定義一次,可以多次調(diào)用。第7章2ch71.宏定義用偽指令MACRO/ENDM實現(xiàn),其語句格式是:宏指令名MACRO[形參1,形參2,…,形參n]┇宏定義體ENDM7.1.1宏定義、宏調(diào)用
2、和宏展開3ch7說明宏指令名是該宏定義的名稱。調(diào)用時使用宏指令名對該宏定義進行調(diào)用。宏指令符合標(biāo)識符規(guī)定。宏指令名不能重復(fù),并且指令的第一個字符必須是字母。但可以和源程序中的其他變量、標(biāo)號、指令、偽指令名相同,在這種情況下宏指令的優(yōu)先級最高。MACRO必須與ENDM成對出現(xiàn)。MACRO標(biāo)識宏定義的開始。形式參數(shù)(即形參,也稱啞元、虛參)是可選項,宏可以不帶參數(shù);帶參數(shù)時,多個形參間用逗號分隔。安徽理工大學(xué)計算機科學(xué)與技術(shù)系李敬兆《匯編語言》第7章4ch72.宏調(diào)用宏調(diào)用的格式為:宏指令名[實參1,實參2,…,
3、實參n]宏展開宏展開就是宏定義體取代源程序中的宏指令名,而且用實元取代啞元。匯編源程序時,宏匯編程序?qū)γ織l宏指令語句進行宏展開,用實參替代相應(yīng)的形參,對宏體目標(biāo)代碼作相應(yīng)改變。說明:實參可以是常數(shù)、寄存器、存儲單元、地址表達式、指令的操作碼或者是操作碼的一部分。安徽理工大學(xué)計算機科學(xué)與技術(shù)系李敬兆《匯編語言》第7章5ch7CallQCallQCallQQ:RET子程序QQA,BQC,DQE,FQMACROX,YENDM主程序主程序主程序展開子程序調(diào)用和宏調(diào)用的工作方式安徽理工大學(xué)計算機科學(xué)與技術(shù)系李敬兆《匯
4、編語言》第7章6ch7用一個例子來說明宏定義、宏調(diào)用和宏展開的情況例:將兩個16位數(shù)相加,結(jié)果存入16位RESULT單元中。;對兩數(shù)相加功能進行宏定義安徽理工大學(xué)計算機科學(xué)與技術(shù)系李敬兆《匯編語言》第7章7ch7BCDADDMACROVARX,VARY,RESULTMOVAL,VARXADDAL,VARYMOVRESULT,ALMOVAL,VARX+1ADCAL,VARY+1MOVRESULT+1,ALENDMDATASEGMENTA1DW1234HA2DW5678HA3DW?B1DW1357HB2DW246
5、8HB3DW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:PUSHDSMOVAX,0PUSHAX安徽理工大學(xué)計算機科學(xué)與技術(shù)系李敬兆《匯編語言》第7章8ch7MOVAX,DATAMOVDS,AXBCDADDA1,A2,A3;宏調(diào)用BCDADDB1,B2,B3;再次宏調(diào)用RETCODEENDSENDSTART經(jīng)宏展開后:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVAL,A11ADDAL,A21MOVA3,AL1MOVAL,A1+
6、11ADCAL,A2+1MOVA3+1,AL1MOVAL,B11ADDAL,B21MOVB3,AL1MOVAL,B1+1ADCAL,B2+1MOVB3+1,AL宏匯編程序在所展開的指令前標(biāo)識以‘1’號以示區(qū)別。較早的版本用‘+’安徽理工大學(xué)計算機科學(xué)與技術(shù)系李敬兆《匯編語言》第7章9ch77.1.2宏定義中的參數(shù):1宏定義可以無參數(shù)saveregmacropushaxpushbxpushcxpushsiendm2參數(shù)可以是操作碼amacrop1,p2,p3movax,p1p2p3endm調(diào)用:aword_va
7、r,inc,ax展開:movax,word_var1incax安徽理工大學(xué)計算機科學(xué)與技術(shù)系李敬兆《匯編語言》第7章10ch73參數(shù)可以是操作碼或操作數(shù)的一部分,但在宏定義體中必須使用分隔符&,即&是操作符,在宏定義中可作為形參的前綴,展開時把&前后的兩個符號連接起來,形成操作碼、操作數(shù)或字符串。&只能出現(xiàn)在宏定義中。例宏定義:SHIFTMARCOX,Y,ZMOVCL,XS&ZY,CLENDM形參Z是操作碼的一部分。宏匯編中規(guī)定,若宏定義體中的形參沒有適當(dāng)?shù)姆指舴?,就不被?dāng)作形參,調(diào)用時也不會被實參代替。上例
8、被調(diào)用時:SHIFT4,CL,ALSHIFT6,BX,AR則宏展開時的目標(biāo)代碼:1MOVCL,41SALAL,CL1MOVCL,61SARBX,CL11ch7例fomacrop1jmpta&p1endm宏調(diào)用:foword_var宏展開:1Jmptaword_var如果這樣:fomacrop1jmptap1endm宏調(diào)用:foword_var宏展開:1Jmp?12ch74偽操作%不能出現(xiàn)在形參的前面