版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第10章
高級匯編語言技術
10.1宏匯編子程序結構存在一些缺點:執(zhí)行子程序調(diào)用與子程序返回指令,保護和恢復現(xiàn)場,提供入口參數(shù)和出口參數(shù)等環(huán)節(jié)將花費程序執(zhí)行時間和存儲空間;在子程序較小而需保護和恢復的寄存器、存儲單元較多,涉及的參數(shù)較多時,這種開銷就更為突出。宏匯編技術較好地彌補了這些缺點。宏匯編技術包括宏定義與宏調(diào)用。10.1.1宏定義
1.宏定義的格式宏指令名MACRO[形參表]
宏體(指令、偽指令及宏指令構成的程序段)
ENDM
形參表可根據(jù)需要作取舍。當需要設置多個形參時,各形參之間要用逗號分隔。
10.1.1宏定義
2.宏定義的功能宏定義的功能在于,將宏體定義為一條宏指令,以便在其后的程序中通過對宏指令的調(diào)用來使用對應的宏體。2.宏定義的功能【例10.1】右邊宏定義所定義的宏指令AX10可以實現(xiàn)寄存器AX內(nèi)容乘以10的功能。
AX10MACROPUSHDXSALAX,1MOVDX,AXSALAX,1SALAX,1ADDAX,DXPOPDX
ENDM
2.宏定義的功能【例10.2】右邊宏定義所定義的宏指令MUL10可以實現(xiàn)X內(nèi)容乘以10的功能。X可以是16位通用寄存器或16位存儲單元。MUL10MACROX
PUSHDXSALX,1MOVDX,XSALX,1SALX,1ADDX,DXPOPDX
ENDM2.宏定義的功能【例10.2】右邊宏定義所定義的宏指令MUL10可以實現(xiàn)X內(nèi)容乘以10的功能。X可以是16位通用寄存器(除DX)或16位存儲單元。MUL10MACROX
PUSHDXSALX,1MOVDX,XSALX,1SALX,1ADDX,DXPOPDX
ENDM10.1.2宏調(diào)用和宏擴展1.宏調(diào)用的格式宏指令名[實參表]說明:(1)宏指令名所指定的宏指令的定義必須放在該宏調(diào)用之前。(2)實參表通常與宏定義中形參表相對應。當需要使用多個實參時,各實參之間要用逗號分隔。10.1.2宏調(diào)用和宏擴展2.宏擴展匯編程序在對源程序作匯編時,遇到宏指令則將對應的宏體取代該宏指令,宏體中的形參則使用宏調(diào)用提供的對應實參來取代。這一過程就稱為宏擴展。用列表文件查看源程序時,將看到宏擴展所產(chǎn)生的各條指令前加有“+”標記。2.宏擴展2.宏擴展【例10.3】在已經(jīng)設置了【例10.1】及【例10.2】中的宏定義后,以下宏調(diào)用及其宏擴展情況如下:設有宏調(diào)用:AX10……MUL10BX……MUL10BUF
+PUSHDX+SALAX,1+MOVDX,AX+SALAX,1+SALAX,1+ADDAX,DX+POPDX將寄存器AX內(nèi)容乘以10+PUSHDX+SALBX,1+MOVDX,AX+SALBX,1+SALBX,1+ADDBX,DX+POPDX將字變量BUF內(nèi)容乘以10+PUSHDX+SALBUF,1+MOVDX,BUF+SALBUF,1+SALBUF,1+ADDBUF,DX+POPDX
將字變量BUF內(nèi)容乘以1010.1.3宏定義和宏調(diào)用中參數(shù)的使用1.宏體中的形參用宏調(diào)用提供的對應實參來取代。若實參個數(shù)大于形參個數(shù),則多余的實參被忽略;若形參個數(shù)大于實參個數(shù),則多余的形參作“空”處理。2.形參可以作為宏體中指令的助記符、操作數(shù)及標號,宏調(diào)用用實參取代形參時必須保證所產(chǎn)生的指令是有效的?!纠?0.4】以下宏定義中的第一個形參用做指令助記符,其余形參用做操作數(shù)。MMMACROOP,X,YPUSHAXMOVAX,XOPAX,YMOVX,AXPOPAXENDM設有宏調(diào)用
MMADD,[BX],[SI]其宏擴展為+PUSHAX+MOVAX,[BX]+ADDAX,[SI]+MOV[BX],AX+POPAX設有宏調(diào)用MMSUB,DATA1,DATA2其宏擴展為+PUSHAX+MOVAX,DATA1+SUBAX,DATA2+MOVDATA1,AX+POPAX(1)形參可以作為宏體中指令助記符、操作數(shù)或標號的某一部分,在宏體中必須使用“&”將形參與其余部分連接起來。【例10.5】
以下宏定義中的第一個形參CON用做指令助記符的一部分,故在宏體中用“&”將“JN”與該形參相連接。CONCALLMACROCON,SUBNLOCALGOON;LOCAL偽指令的功能見后
JN&CONGOONCALLSUBNGOON:NOPENDM設有宏調(diào)用CONCALLC,SUB1則其宏擴展為:+JNC??0000+CALLSUB1+??0000:NOP(宏擴展中的??0000為匯編程序自動產(chǎn)生的標號。)(2)當某一個實參中含有空格,逗號等分隔符時,必須用“<>”將其括起。
STKMACROXSSEGSEGMENTSTACKDBXSSEGENDSENDM若某個源程序需要定義200個字節(jié),初值為0的堆棧段,則可以使用宏調(diào)用STK<200DUP(0)>其宏擴展為:+SSEGSEGMENTSTACK+DB200DUP(0)+SSEGENDS(3)在宏調(diào)用時,若要求將實參所代表的數(shù)值替代形參,則必須在實參前使用“%”?!纠?0.7】
設有以下宏定義:DISPMACROXDB'ANSWER:′,′&X′,′$′ENDM
則宏調(diào)用DISP%(2*11-8)產(chǎn)生的宏擴展為+DB′ANSWER:′,′14′,′$′【例10.7】
設有以下宏定義:DISPMACROXDB'ANSWER:′,′&X′,′$′ENDM
不使用符號“%”的宏調(diào)用
DISP2*11-8產(chǎn)生的宏擴展卻是+
DB′ANSWER:′,′2*11-8′,′$′(4)當需要在實參中使用“&”、“<”、“>”、“%”等符號,但不作宏運算符時,就必須在其前使用“!”。
【例10.8】
在已設置【例10.7】中的宏定義的情況下,宏調(diào)用DISP!%(2*11-8)產(chǎn)生的宏擴展為+DB′ANSWER:′,′%(2*11-8)′,′$′宏調(diào)用中的“%”前使用了宏運算符“!”,故“%”被看作一個符號,而失去了宏運算符的功能。4.宏定義中標號和變量的處理。
宏指令一經(jīng)定義便可在源程序中調(diào)用,若宏體中使用了標號或變量,在多次宏調(diào)用時就會出現(xiàn)多個相同標號或出現(xiàn)變量的重復定義,LOCAL偽指令用于解決這一問題。
LOCAL偽指令的一般格式:LOCAL標號及變量表(各標號、變量之間用逗號分隔。)在宏定義中,LOCAL偽指令必須緊接MACRO偽指令之后。在處理各個宏調(diào)用時,匯編程序?qū)⒆詣右??0000,??0001,……??FFFF替代LOCAL偽指令列出的各個標號或變量,從而避免多次宏調(diào)用時出現(xiàn)多個相同標號或出現(xiàn)變量重復定義的問題。4.宏定義中標號和變量的處理。
【例10.9】
在已設置【例10.5】中的宏定義后,宏調(diào)用:CONCALLC,SUB1……CONCALLZ,SUB2產(chǎn)生以下宏擴展:+JNC??0000+CALLSUB1+??0000:NOP……+JNZ??0001+CALLSUB2+??0001:NOP10.1.4宏嵌套
宏定義的宏體中包括宏調(diào)用,即在宏體中調(diào)用宏指令。在這種情況下要注意,其中調(diào)用的宏指令必須先行定義。宏體中包括宏定義。在這種情況下要注意,不能在源程序中直接調(diào)用內(nèi)層定義的宏指令。換言之,在源程序中只有通過外層宏指令的調(diào)用才能調(diào)用內(nèi)層宏指令。宏匯編子程序目標代碼所占空間有幾次宏調(diào)用就有幾次宏擴展,故并不簡化目標代碼子程序目標代碼只出現(xiàn)一次,故目標代碼短程序運行速度無需轉(zhuǎn)返,程序運行速度快需要轉(zhuǎn)返工作,程序運行速度慢處理時機在匯編時由匯編程序?qū)崿F(xiàn)宏擴展。CPU執(zhí)行的是經(jīng)過宏擴展的程序在執(zhí)行時,CPU通過轉(zhuǎn)子指令執(zhí)行子程序中的指令適用場合程序運行速度是主要考慮因素目標代碼所占空間是主要考慮因素【例】計算m!/(n!*(m-n)!)要求:將例9.2使用子程序完成的部分,改用宏匯編來實現(xiàn)。
……………;CSEG SEGMENT ASSUME DS:DSEG,CS:CSEG……………;MCO MACRO X MOV CX,X MOV AX,1NEXT: MUL CX LOOP NEXT ENDM
MCO N MOV BX,AX
MCO M DIV BX MOV BX,AX MOV AX,M SUB AX,N
MCO AX XCHG BX,AX DIV BX MOV ANS,AX ……………CSEG ENDS END STAT
……………;CSEG SEGMENT ASSUME DS:DSEG,CS:CSEG……………;MCO MACRO X
LOCAL NEXT MOV CX,X MOV AX,1NEXT: MUL CX LOOP NEXT ENDM
MCO N MOV BX,AX
MCO M DIV BX MOV BX,AX
MCO %(M-N) XCHG BX,AX DIV BX MOV ANS,AX ……………CSEG ENDS END STAT10.2重復匯編
對于指令或偽指令組的連續(xù)重復問題,使用重復匯編結構則更為簡便。
10.2.1使用REPT偽指令的重復匯編結構格式:REPT整數(shù)表達式
重復體
ENDM功能:使匯編程序?qū)χ貜腕w作重復匯編,以整數(shù)表達式的值作為重復次數(shù)。10.2.1使用REPT偽指令的重復匯編結構【例10.11】
設有重復匯編結構如下:CHAR=41HREPT10DBCHARCHAR=CHAR+1ENDM10.2.1使用REPT偽指令的重復匯編結構匯編程序在匯編時將對重復體重復匯編10次,即匯編為CHAR=41HDBCHAR;CHAR為41HCHAR=CHAR+1DBCHAR;DB為42HCHAR=CHAR+1……其結果等價于:DB41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH【例10.12】
指出以下程序段的功能:N=0REPT9
N=N+1
M=0REPT9
M=M+1DBM*NENDMENDM這是一個嵌套的重復匯編結構。內(nèi)外兩層重復匯編結構均使各自的重復體重復9次。匯編后等價于在連續(xù)的81個字節(jié)單元中存放九九乘法表的數(shù)值:DB1,2,3,…9DB2,4,6,…18DB3,6,9,…27...DB9,18,27,…81說明:(1)重復體的規(guī)定同前,而且重復體中含有形參。(2)實參表中的各個實參須用逗號分隔,實參取代形參后得到的應是有效的指令、偽指令或宏指令。10.2.2使用IRP偽指令的重復匯編結構
格式:IRP形參,<實參表>
重復體
ENDM功能:使匯編程序?qū)χ貜腕w作重復匯編,每作一次匯編就依次將實參表中的一個實參取代重復體中的形參。(重復次數(shù)就等于實參表中實參的個數(shù))【例10.13】
設有重復匯編結構如下:
IRPREG,<AX,BX,CX,DX>PUSHREGENDM匯編程序在匯編時將對重復體
PUSHREG重復匯編4次,且分別用實參AX,BX,CX及DX取代形參
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024納稅擔保合同范本:稅務事項擔保3篇
- 2024電力系統(tǒng)施工勞務分配具體協(xié)議范本版B版
- 2024物聯(lián)網(wǎng)技術研發(fā)合同-構建智能生活
- 專業(yè)健身私教服務協(xié)議范本版B版
- 2024鐵路貨運貨物運輸保險代理服務合同3篇
- 專業(yè)個人咨詢服務協(xié)議:2024收費標準版B版
- 2024投標書房地產(chǎn)開發(fā)合作協(xié)議范本3篇
- 2024酒店裝修工程施工合同
- 2024年規(guī)范三輪車買賣合同合同版B版
- 上海大廈物業(yè)前期管理專項協(xié)議2024版版
- 2024年高標準農(nóng)田建設土地承包服務協(xié)議3篇
- 閱讀理解(專項訓練)-2024-2025學年湘少版英語六年級上冊
- 民用無人駕駛航空器產(chǎn)品標識要求
- 2024年醫(yī)院產(chǎn)科工作計劃例文(4篇)
- 2024-2025學年九年級英語上學期期末真題復習 專題09 單詞拼寫(安徽專用)
- 無創(chuàng)通氣基本模式
- 江西省贛州市尋烏縣2023-2024學年八年級上學期期末檢測數(shù)學試卷(含解析)
- 2024年認證行業(yè)法律法規(guī)及認證基礎知識 CCAA年度確認 試題與答案
- 2024年浙江省公務員考試結構化面試真題試題試卷答案解析
- 中國音樂史與名作賞析智慧樹知到期末考試答案章節(jié)答案2024年山東師范大學
- 星巴克營銷策劃方案(共24頁)
評論
0/150
提交評論