版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1,第七章 高級匯編語言技術(shù),宏匯編 重復(fù)匯編 條件匯編,2,方法2、當(dāng)這組指令較短或不適合把它寫成一個子程序 時,可以把它義成一個宏,每次需要執(zhí)行時就去調(diào)用這個宏。,問 如果在一個程序中多次使用同一組指令時,為了避免每次都要重寫,該如何解決?,方法1、把這組指令寫成一個子程序,每次需要執(zhí)行時 只要調(diào)用這個子程序就可以了。,3,7.1 宏匯編 為用戶提供更加容易、更加靈活、更加向高級語言靠攏的匯編工具。 宏:源程序中一段有獨立功能的程序代碼。 宏指令:用戶自定義的指令。在編程時,將多次使用的功能 用一條宏指令來代替。,匯編語言程序語句,指令 偽指令(偽操作) 宏指令,4,子程序: 優(yōu)點:模塊化
2、,節(jié)省內(nèi)存,可被多次調(diào)用,編程效率高。 缺點:額外開銷(保存返回地址,計算轉(zhuǎn)向地址,傳遞參 數(shù)等)大,增加了執(zhí)行時間。適用于子功能代碼較 長、調(diào)用比較頻繁的情況。 宏調(diào)用: 優(yōu)點:參數(shù)傳送簡單,執(zhí)行效率高。 缺點:不節(jié)省空間,適用于子功能代碼較短、傳參較多的 情況。,5,宏定義 macro_name MACRO 啞元表 ; 形參/虛參 LOCAL 標(biāo)號表 ENDM * macro_name 宏指令名(宏名),調(diào)用時用。 第一個符號必須是字母(注意與名稱的差異) * 啞元表 形參表,啞元之間用逗號隔開 * 如果宏定義體有一個或多個標(biāo)號,則必須用LOCAL偽操作列出所有的標(biāo)號。?,(宏定義體),一
3、段有獨立功能的程序代碼,6,宏調(diào)用 macro_name 實元表 ; 實參 * 實元表中的實元與啞元表中的啞元在位置上一一對應(yīng); * 若實元數(shù)啞元數(shù),則多余的實元無效; * 若實元數(shù)啞元數(shù),則多余的啞元作“空(NUL)”處理; * 對宏指令的調(diào)用必須先定義后調(diào)用。 * 應(yīng)當(dāng)注意,宏展開后,即用實參取代形式參數(shù)之后,所得到的語句應(yīng)該是有效的,否則匯編時會出錯。,7,宏展開 源程序被匯編時,匯編程序把宏調(diào)用展開,也就是把宏定義體復(fù)制到調(diào)用宏指令的位置上,同時用實元取代啞元,由LOCAL定義的標(biāo)號也由?0000?FFFF替代。,8,實元(在使用上要比子程序靈活) 常數(shù)、寄存器、存貯單元 用尋址方式能
4、找到的地址、表達式 指令的操作碼、操作碼的一部分,9,宏調(diào)用與子程序調(diào)用的區(qū)別: 子程序:在程序執(zhí)行期間被調(diào)用,只占用自身大小的一段空間。,主程序, call sub1 call sub1 call sub1 ,子程序 sub1, ret,10,宏調(diào)用:在匯編期間被展開,每調(diào)用一次就把宏定義體 展開一次。,宏定義,宏調(diào)用,宏展開,Q macro x,y endm, Q a,b Q c,d Q e,f , ,11,(1)子程序調(diào)用是在程序執(zhí)行期間進行的,主程序通過CALL指令轉(zhuǎn)入于程序的入口地址去執(zhí)行子程序,子程序執(zhí)行完后RET指令返回到主程序的調(diào)用處(斷點處);而宏調(diào)用是通過宏指令名和實在參數(shù)
5、(如果有要傳遞的參數(shù)的話)進行調(diào)用的,而且是在匯編期間展開宏定義體的。,(2)子程序中的這組指令的機器碼在存儲器中只需要存放一次;而宏調(diào)用則不同,每調(diào)用一次就把宏定義體展開一次,因而它占有的存儲空間與調(diào)用次數(shù)有關(guān),調(diào)用次數(shù)越多則占有的存儲空間就越大。,(3)子程序調(diào)用時需要用堆棧,調(diào)用子程序和返回主程序都要開銷必要的時間;而宏調(diào)用其宏定義體展開是插入在調(diào)用程序中,因此避免了調(diào)用時跳到宏和由宏返回所開銷的時間。,子程序與宏調(diào)用工作方式的差異,如何選擇用子程序還是用宏調(diào)用呢?,12,可以無變元 可以是操作碼 可以是操作碼的一部分,但在宏定義體中必須用 ; 注釋 ; 宏展開時,;后面的注釋不予展開。
6、,源程序(ASM文件)經(jīng)匯編程序匯編,主要輸出是OBJ文件和LST文件(列表文件)。LST文件同時列出源程序和機器語言程序清單,并給出符號表。,16,7.1.6 宏庫的建立與調(diào)用,宏庫:只包含若干宏定義的文件,擴展名為MAC或LIB 宏庫的調(diào)用: 在程序的開始用INCLUDE語句說明,例如 INCLUDE C:MACRO.MAC INCLUDE D:AAAEEE.LIB 注:INCLUDE語句可以不放在程序的最前面,但必須放在所有的宏 調(diào)用之前,宏庫的建立: 由定義即可,17,7.1.7 PURGE偽操作,宏指令名可與指令助記符和偽指令名同名,但這時宏指令的優(yōu)先級最高,而同名的指令和偽操作便失
7、效。,格式: PURGE 宏指令名,宏指令名, PURGE可取消多個宏定義,而各宏指令名之間應(yīng)以逗號分 隔。 功能:取消宏定義,使該宏定義為空。,偽指令PURGE可取消宏定義,恢復(fù)指令的原來功效。,18,例7.1 兩個字相乘 宏定義: multiply MACRO opr1,opr2,result push dx push ax mov ax, opr1 imul opr2 mov result, ax pop ax pop dx ENDM 宏調(diào)用: multiply cx, var, xyzbx,宏展開: + push dx + push ax + mov ax, cx + imul var
8、 + mov xyzbx, ax + pop ax + pop dx,19,例7.2 保存寄存器 宏定義: savereg MACRO push ax push bx push cx push dx push si push di ENDM 宏調(diào)用: savereg,宏展開: + push ax + push bx + push cx + push dx + push si + push di,20,例 宏指令名與指令助記符或偽操作名相同,宏指令 的優(yōu)先級最高。 宏定義: add MACRO opr1, opr2, result ENDM 宏調(diào)用: add xx, yy, zz purge a
9、dd ; 取消宏定義 ,21,例 求絕對值(使用LOCAL偽操作) 宏定義: absol MACRO oper LOCAL next cmp oper, 0 jge next neg oper next: ENDM 宏調(diào)用: absol var absol bx ,宏展開: + cmp var, 0 + jge ?0000 + neg var + ?0000: + cmp bx, 0 + jge ?0001 + neg bx + ?0001: ,22,宏匯編操作符 宏展開時,合并前后兩個符號形成一個符號。,leap macro cond, lab j; 注釋 ; 宏展開時,;后面的注釋不予展開
10、。 例:Q MACRO m ; display a message 每次展開保留此注釋 ; m is a string 每次展開不保留此注釋 ENDM % 表達式 ; 匯編程序?qū)?后面的表達式轉(zhuǎn)換為數(shù)字,并在展開期間用這個數(shù)取代啞元。,24,7.2 重復(fù)匯編,在編寫匯編語言程序中,有時需要進行連續(xù)地重復(fù)完成相同的或幾乎完全相同的操作,這時可以使用重復(fù)匯編,使書寫的程序變得相當(dāng)簡潔。,重復(fù)匯編有兩種格式,重復(fù)偽操作 不定重復(fù)偽操作,25,說明 其中,REPT和ENDM為偽指令,它們必須成對出現(xiàn),中間是要重復(fù)的指令體,重復(fù)的次數(shù)由表達式的值來決定。 注意:重復(fù)偽操作并不一定要用在宏定義體內(nèi)。,格式
11、 RCPT 表達式 . RNDM,7.2.1 重復(fù)偽操作,26,IPR偽操作 格式 IRP 形式參數(shù),參數(shù)表 (指令體) ENDM,說明其中,IRP和ENDM偽指令必須成對出現(xiàn),其間是要重復(fù)的指令體。重復(fù)的次數(shù)由參數(shù)表中參數(shù)的個數(shù)所決定,而且每重復(fù)一次,依次用參數(shù)表中的參數(shù)來代替形式參數(shù)。參數(shù)表必須用尖括號括起來,參數(shù)間用逗號分隔。,7.2.2 不定重復(fù)偽操作 IPR偽操作,27,IPRC偽操作 格式 IRPC 形式參數(shù),字符串(或字符串) (指令體) ENDM,說明其中,偽指令I(lǐng)RPC和ENDM必須成對出現(xiàn),其間是重復(fù)的指令體,重復(fù)的次數(shù)取決于字符串中字符的個數(shù),在每次重復(fù)時,依次用字符串的字符代替形式參數(shù)。,7.2.2 不定重復(fù)偽操作 IPRC偽操作,28,7.3 條件匯編,匯編語言提供了一組條件偽操作,用來指示編程序?qū)o定的條件進行測試,并根據(jù)測試的結(jié)果有選擇地對一段語句進行匯編處理。換句話說,匯編程序根據(jù)給定的條件是否為真來決定對一段語句是否進行匯編。,29,格式 IF xxxx 表達式 條件為真匯編此塊 ELSE 條件為假匯編此塊 ENDIF,說明其中,IF xxxx表示條件偽操作命令,它
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年橋梁行業(yè)安全生產(chǎn)風(fēng)險管理體系研究
- 2026春招:銷售經(jīng)理題目及答案
- 貨車司機安全培訓(xùn)內(nèi)容課件
- 皮膚科臨床診療研究匯報
- 醫(yī)療物聯(lián)網(wǎng)技術(shù)在醫(yī)院管理中的應(yīng)用
- 醫(yī)療影像分析技術(shù)在疾病診斷中的應(yīng)用
- 貨拉拉加強安全培訓(xùn)課件
- 醫(yī)院耳鼻喉科職業(yè)行為準(zhǔn)則
- 2026年廣東省外語藝術(shù)職業(yè)學(xué)院單招綜合素質(zhì)考試備考試題帶答案解析
- 口腔門診服務(wù)提升總結(jié)
- 洗衣液宣傳課件
- “五個帶頭”方面對照發(fā)言材料二
- 在線網(wǎng)課學(xué)習(xí)課堂《人工智能(北理 )》單元測試考核答案
- 教育部研究生、本科、高職學(xué)科分類及專業(yè)目錄
- 國開2023春計算機組網(wǎng)技術(shù)形考任務(wù)一參考答案
- 醫(yī)療器械公司任職文件
- 輸電線路基礎(chǔ)知識輸電線路組成與型式
- 南昌工程學(xué)院施工組織設(shè)計
- GA 1808-2022軍工單位反恐怖防范要求
- 《中國特色社會主義》期末試卷
- 某煤礦防治水分區(qū)管理論證報告
評論
0/150
提交評論