版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
高級匯編技術(shù)1第一頁,共四十三頁,2022年,8月28日本章內(nèi)容簡介本章介紹宏匯編、重復(fù)匯編、條件匯編以及結(jié)構(gòu)與記錄的相關(guān)知識。有利于簡化源程序、減少目標(biāo)代碼以及縮短程序執(zhí)行時間,是編寫高效簡潔的匯編語言程序必不可少的工具。
2第二頁,共四十三頁,2022年,8月28日5.1宏匯編在編寫程序過程中,若遇到一些要多次使用的程序段,為了簡化程序,通常采用定義子程序的方法,同樣,也可以采用宏定義的方法來達(dá)到這個目的。3第三頁,共四十三頁,2022年,8月28日宏匯編宏定義是源程序中一段有獨立功能的程序代碼。先將這一段程序定義為一條宏指令,并具有一個相應(yīng)的宏指令名,在程序中就可以多次調(diào)用它,調(diào)用時只需要引用一個宏指令名來代替這一段程序就可以了。
4第四頁,共四十三頁,2022年,8月28日5.1.1宏指令語句
程序中需要多次重復(fù)的指令序列可用宏指令。宏定義格式宏名MACRO[形參表]…(宏體)
ENDM宏調(diào)用格式宏名[實參表]5第五頁,共四十三頁,2022年,8月28日宏指令語句匯編程序在對源程序作匯編時,若遇到宏調(diào)用,則將對應(yīng)的宏體取代該宏指令,并且用實參順序取代宏定義中的形參。這個過程稱作宏展開。6第六頁,共四十三頁,2022年,8月28日宏指令語句一個宏定義名必須用偽指令PURGE取消后,才能重新定義。PURGE偽指令的格式為:
PURGE宏名[,…]
一條PURGE偽指令可以取消多個宏。退出宏偽指令EXITM表示結(jié)束當(dāng)前宏調(diào)用的展開。格式為:EXITM
7第七頁,共四十三頁,2022年,8月28日5.1.2宏匯編實例分析定義:無參形式POPREGMACROPOPDXPOPCXPOPBXPOPAXENDM調(diào)用:POPREG當(dāng)以后需要恢復(fù)現(xiàn)場時,只需調(diào)用:POPREG匯編程序?qū)⒂盟哪繕?biāo)代碼(即左邊程序段代碼)去替代宏名字的位置。8第八頁,共四十三頁,2022年,8月28日宏匯編實例分析定義:無參形式AX10MACROPUSHDXSALAX,1MOVDX,AXSALAX,1SALAX,1ADDAX,DXPOPDXENDM完成對AX寄存器內(nèi)容乘以10的功能。假設(shè)乘積在16位以內(nèi)。調(diào)用:AX109第九頁,共四十三頁,2022年,8月28日宏匯編實例分析定義:有參形式SHIFTMACROX,YMOVCL,XSALY,CLENDM調(diào)用:SHIFT3,ALSHIFT5,BL宏調(diào)用和展開后:+MOVCL,3+SALAL,CL+MOVCL,5+SALBL,CL10第十頁,共四十三頁,2022年,8月28日宏匯編實例分析定義:兩個字操作數(shù)相加ADD12MACROA1,A2,A3PUSHDXPUSHAXMOVAX,A1ADDAX,A2MOVA3,AXPOPAXPOPDXENDM宏調(diào)用:ADD12CX,DAT,X[SI]
宏展開:
…..+PUSHDX+PUSHAX+MOVAX,CX+ADDAX,DAT+MOVX[SI],AX+POPAX+POPDX….11第十一頁,共四十三頁,2022年,8月28日宏匯編實例分析宏定義和宏調(diào)用可以不使用形參和實參,這是最簡單的一種方式。大多數(shù)宏定義都使用形參,這樣使得宏定義的適用性及靈活性更好。形參可以作為宏體中指令的助記符、操作數(shù)及標(biāo)號等,宏調(diào)用用實參取代形參時必須保證所產(chǎn)生的指令是有效的。12第十二頁,共四十三頁,2022年,8月28日宏匯編實例分析實參可以是常數(shù)、寄存器、存儲變量名以及用尋址方式能找到的地址或表達(dá)式,實參還可以是指令的操作碼或操作碼的一部分等。宏匯編的這一特性是子程序所不及的。13第十三頁,共四十三頁,2022年,8月28日5.1.3宏與子程序宏與子程序都可以用一個名字定義一段程序,以簡化源程序的結(jié)構(gòu)和設(shè)計。一般來說,子程序能實現(xiàn)的功能,用宏也可以實現(xiàn)。但是,宏與子程序有本質(zhì)的區(qū)別,主要反映在調(diào)用方式,另外在傳遞參數(shù)和使用細(xì)節(jié)上也有很多不同。14第十四頁,共四十三頁,2022年,8月28日宏與子程序子程序是在程序執(zhí)行期間由主程序調(diào)用的,它只占有它自身大小的一個空間,它不僅是源程序級別的簡化,還是目標(biāo)程序級的簡化,形成的目標(biāo)代碼較短;而宏調(diào)用則是在匯編期間展開的,每調(diào)用一次就把宏定義體展開一次,它是源程序級的簡化。
15第十五頁,共四十三頁,2022年,8月28日宏與子程序在子程序結(jié)構(gòu)中,為實現(xiàn)轉(zhuǎn)移和返回,保存及恢復(fù)寄存器和參數(shù)傳遞等操作都要增加程序的開銷,這些操作所消耗的時間以及它們所占用的存儲空間,都是為取得子程序結(jié)構(gòu)而增加的額外開銷。
16第十六頁,共四十三頁,2022年,8月28日5.2重復(fù)匯編
在編寫程序時,有時需要連續(xù)重復(fù)編寫一組相同或幾乎相同的指令或偽指令,這時可以使用宏匯編語言提供的重復(fù)匯編偽指令來避免重復(fù)書寫。重復(fù)匯編結(jié)構(gòu)有三種,一種是定重復(fù)匯編結(jié)構(gòu),另兩種是不定重復(fù)匯編結(jié)構(gòu)。分別使用REPT、IRP和IRPC實現(xiàn)。17第十七頁,共四十三頁,2022年,8月28日重復(fù)匯編重復(fù)匯編結(jié)構(gòu)與宏匯編結(jié)構(gòu)的區(qū)別在于重復(fù)匯編適用于連續(xù)重復(fù)的場合,而宏匯編適用于非連續(xù)重復(fù)的場合,但是這兩種方法都可以達(dá)到簡化源程序的目的。18第十八頁,共四十三頁,2022年,8月28日5.2.1定重復(fù)匯編偽指令格式:
REPT整數(shù)表達(dá)式┇(重復(fù)語句序列)
ENDM功能:使匯編程序?qū)χ貜?fù)體作重復(fù)匯編,以整數(shù)表達(dá)式的值作為重復(fù)次數(shù)。19第十九頁,共四十三頁,2022年,8月28日定重復(fù)匯編舉例定義:NUMCHAR=30HREPT10DBNUMCHAR
NUMCHAR=NUMCHAR+1ENDM匯編后:NUMCHAR=30HDBNUMCHARNUMCHAR=NUMCHAR+1DBNUMCHARNUMCHAR=NUMCHAR+1
:
DBNUMCHARNUMCHAR=NUMCHAR+1ENDM等價于:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H20第二十頁,共四十三頁,2022年,8月28日5.2.2不定重復(fù)匯編格式:IRP形參,<參數(shù)表>┇(重復(fù)語句序列)
ENDM
功能:使匯編程序?qū)χ貜?fù)體作重復(fù)匯編,匯編時,依次將參數(shù)表中的參數(shù)取出代替形參,直到參數(shù)用完為止。重復(fù)匯編的次數(shù)等于參數(shù)表中參數(shù)的個數(shù)。21第二十一頁,共四十三頁,2022年,8月28日IRPBUF,<3,17,20,46,87,100>DBBUFENDM等價于:
DB3,17,20,46,87,10022第二十二頁,共四十三頁,2022年,8月28日IRPNUM,<0,1,2,3,4,5,6,7,8,9>DBNUM*NUMENDM等價于:
DB0,1,4,9,16,25,36,49,64,8123第二十三頁,共四十三頁,2022年,8月28日使用IRPC偽指令的重復(fù)匯編格式:IRPC形參,字符串┇(重復(fù)語句序列)
ENDM功能:使匯編程序?qū)χ貜?fù)體作重復(fù)匯編,匯編時,依次將字符串中的一個字符取出代替形參,直到字符串替代完畢。重復(fù)匯編的次數(shù)等于字符串中字符的個數(shù)。24第二十四頁,共四十三頁,2022年,8月28日IRPCBUF,12345DBBUFENDM等價于DB1,2,3,4,525第二十五頁,共四十三頁,2022年,8月28日
當(dāng)重復(fù)體中的形參代表指令助記符、操作數(shù)或標(biāo)號等內(nèi)容的一部分時,需要使用“&”將其與其余部分連接起來,以免用字符取代形參時該字符與其余部分相分離。IPRCREG,DCBAPOPREG&XENDM等價于:
POPDXPOPCXPOPBXPOPAX26第二十六頁,共四十三頁,2022年,8月28日5.3條件匯編匯編程序在對匯編源程序進(jìn)行匯編時,能夠根據(jù)條件將程序段有選擇地進(jìn)行匯編,從而根據(jù)實際情況得到滿足要求的目標(biāo)代碼。如此可增強(qiáng)用戶編程的靈活性。通過偽指令實現(xiàn)。27第二十七頁,共四十三頁,2022年,8月28日5.3.1條件匯編概述格式:IFXX條件語句塊1[ELSE
語句塊2]ENDIF說明:IFXX和ENDIF必須配對,ELSE為可選項。匯編程序檢測IFXX偽指令給定的條件,如果條件為真則匯編語句塊1,否則匯編語句塊2。28第二十八頁,共四十三頁,2022年,8月28日偽指令功能IF表達(dá)式IFE表達(dá)式IFDEF符號IFNDEF符號IFB<參數(shù)>IFNB<參數(shù)>IFIDN<字符串1>,<字符串2>IFDIF<字符串1>,<字符串2>IF1IF2表達(dá)式非0,條件為真表達(dá)式為0,條件為真
符號已被定義或被說明為EXTRN,條件為真符號無定義或未被說明為EXTRN,條件為真如果參數(shù)為空格,條件為真如果參數(shù)不為空格,條件為真如果字符串1和字符串2相同,條件為真如果字符串1和字符串2不相同,條件為真如果是第一遍掃描,條件為真如果是第二遍掃描,條件為真第二十九頁,共四十三頁,2022年,8月28日條件匯編用法舉例1.IF和IFE偽指令
IF偽指令的表達(dá)式值不為0時,認(rèn)為匯編條件成立,否則認(rèn)為不成立。
IFE偽指令的表達(dá)式值為0時,認(rèn)為匯編條件成立,執(zhí)行匯編。5-15如果VALUE的值大于10,則對語句1匯編,否則對語句2匯編。IFVALUEGT10CALLDEBUG1ELSECALLDEBUG2ENDIF30第三十頁,共四十三頁,2022年,8月28日條件匯編用法舉例1.IF和IFE偽指令
IF偽指令的表達(dá)式值不為0時,認(rèn)為匯編條件成立,否則認(rèn)為不成立。
IFE偽指令的表達(dá)式值為0時,認(rèn)為匯編條件成立,執(zhí)行匯編。5-16設(shè)AL中存放了1個字母的ASCII碼。由條件決定是否將AL中的字母進(jìn)行大小寫轉(zhuǎn)換。:CHANGDB0:IFECHANGORAL,20HELSEANDAL,0DFHENDIF:31第三十一頁,共四十三頁,2022年,8月28日條件匯編用法舉例2.IFDEF和IFNDEF偽指令
IFDEF中給定符號已經(jīng)在本模塊中定義或在本模塊中用EXTRN說明為外部符號,則認(rèn)為匯編條件成立。
IFNDEF與IFDEF相反。IFDEFSUBSYMSUBAPROCFARELSESUBAPROCNEARENDIF32第三十二頁,共四十三頁,2022年,8月28日5.4結(jié)構(gòu)與記錄
當(dāng)變量的數(shù)據(jù)類型是單一的字節(jié)、兩字節(jié)、四字節(jié)時,可以用DB、DW、DD這樣的偽指令來定義,稱為簡單數(shù)據(jù)結(jié)構(gòu);若將簡單數(shù)據(jù)結(jié)構(gòu)的變量組合在一起,形成一個復(fù)合型的數(shù)據(jù),再給這個復(fù)合型的數(shù)據(jù)起一個名字,得到一種新的數(shù)據(jù)類型,稱為復(fù)雜數(shù)據(jù)類型,在80x86匯編語言中,這樣的數(shù)據(jù)類型包括結(jié)構(gòu)和記錄。33第三十三頁,共四十三頁,2022年,8月28日結(jié)構(gòu)與記錄結(jié)構(gòu):邏輯上互相關(guān)聯(lián)的一組數(shù)據(jù),以某種形式組合在一起,使之成為一個整體,并可單獨訪問其中的某個數(shù)據(jù)元素,以便進(jìn)行數(shù)據(jù)處理。記錄:功能和用法與結(jié)構(gòu)類似,兩者的主要區(qū)別是記錄以二進(jìn)制位為單位組成字段,定義每個字段時都要指出位寬,這樣能更好地利用內(nèi)存空間。
34第三十四頁,共四十三頁,2022年,8月28日5.4.1結(jié)構(gòu)的定義及引用用戶在編程時可能會遇到不同數(shù)據(jù)類型構(gòu)造的組合數(shù)據(jù),如學(xué)生信息,包括學(xué)號、姓名、身高、體重、年齡等,每個學(xué)生都具有這樣的信息。如能將這些數(shù)據(jù)集成在一個數(shù)據(jù)結(jié)構(gòu)里,將優(yōu)化程序結(jié)構(gòu)。
35第三十五頁,共四十三頁,2022年,8月28日1.結(jié)構(gòu)類型的說明定義結(jié)構(gòu)名,把結(jié)構(gòu)的有關(guān)信息明確,以便匯編語言在匯編時對結(jié)構(gòu)分配存儲單元及存放初值一旦定義了結(jié)構(gòu)名,便可以多次用這一結(jié)構(gòu)名定義若干個結(jié)構(gòu)實體,即具有具體數(shù)值,有實際的存儲區(qū)的結(jié)構(gòu)變量名對結(jié)構(gòu)變量名進(jìn)行引用,即對某一結(jié)構(gòu)變量名的整體或部分字段進(jìn)行處理和存取。36第三十六頁,共四十三頁,2022年,8月28日結(jié)構(gòu)偽指令STRUC語句格式:
結(jié)構(gòu)名STRUC[字段名]數(shù)據(jù)類型定義語句
…
結(jié)構(gòu)名ENDS37第三十七頁,共四十三頁,2022年,8月28日定義舉例STUDENTSTRUC
NUMBERDB‘XX’NAMEDB6DUP(?)HEIGHTDB?WEIGHTDB?AGEDB?STUDENTENDS38第三十八頁,共四十三頁,2022年,8月28日2.結(jié)構(gòu)變量的定義定義格式結(jié)構(gòu)變量名結(jié)構(gòu)名<字段值表>PERS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《不同持續(xù)時間的振蕩運動對雌鼠乳腺癌癌因性疲乏的影響》
- 《城管執(zhí)法中小販合法權(quán)益保護(hù)問題研究》
- 用字母表示數(shù)-課件
- 慢性胰腺炎健康教育課件
- 2024-2025學(xué)年滬粵版物理八年級下冊導(dǎo)學(xué)案:7.1-怎樣描述運動
- 春天的作文300字6篇001
- 2013年中考政治九年級專題四-先進(jìn)文化民族精神
- 核心專題一 光學(xué)作圖 學(xué)案 -2024-2025學(xué)年物理滬粵版八年級上冊
- 【教無憂】高考二輪復(fù)習(xí)課件地理微專題33冰雪運動
- 做時代新人課程設(shè)計
- 柴油存放告知書范本
- 食材配送服務(wù)方案(技術(shù)方案)
- 處方點評工作表
- 價值流PSI拉動暢流
- 課程教學(xué)目標(biāo)達(dá)成度評價表
- 造紙行業(yè)崗位安全操作規(guī)程匯編
- 郭錫良《古代漢語》課件
- 教研室主任崗位申請書
- 陜西西安浐灞生態(tài)區(qū)管理委員會招聘考試真題2022
- 保安先進(jìn)班組事跡范文(28篇)
- DRG付費改革理論考核試題題庫與答案
評論
0/150
提交評論