![四川大學(xué)計(jì)算機(jī)學(xué)院 匯編語言ch9課件_第1頁](http://file4.renrendoc.com/view/5811b880d89e250d79dcf66366dc9189/5811b880d89e250d79dcf66366dc91891.gif)
![四川大學(xué)計(jì)算機(jī)學(xué)院 匯編語言ch9課件_第2頁](http://file4.renrendoc.com/view/5811b880d89e250d79dcf66366dc9189/5811b880d89e250d79dcf66366dc91892.gif)
![四川大學(xué)計(jì)算機(jī)學(xué)院 匯編語言ch9課件_第3頁](http://file4.renrendoc.com/view/5811b880d89e250d79dcf66366dc9189/5811b880d89e250d79dcf66366dc91893.gif)
![四川大學(xué)計(jì)算機(jī)學(xué)院 匯編語言ch9課件_第4頁](http://file4.renrendoc.com/view/5811b880d89e250d79dcf66366dc9189/5811b880d89e250d79dcf66366dc91894.gif)
![四川大學(xué)計(jì)算機(jī)學(xué)院 匯編語言ch9課件_第5頁](http://file4.renrendoc.com/view/5811b880d89e250d79dcf66366dc9189/5811b880d89e250d79dcf66366dc91895.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第九章高級宏匯編語言學(xué)習(xí)目的:通過這一章的學(xué)習(xí),掌握結(jié)構(gòu)、記錄等復(fù)雜數(shù)據(jù)類型的定義和使用方法;掌握匯編語言中“宏”的概念,能夠在程序設(shè)計(jì)中正確使用宏指令;掌握條件匯編和重復(fù)匯編的概念,并且能夠在程序設(shè)計(jì)中正確使用。宏指令在程序設(shè)計(jì)中,遇到功能獨(dú)立、又經(jīng)常使用的功能模塊,可以選擇做成子程序的形式,也可以選擇做成宏指令的形式。宏指令的概念和子程序有相似之處,但是也有較大的差別。宏指令的使用必須經(jīng)過三個過程:宏定義、宏調(diào)用、宏展開。(1)宏定義格式1(不帶入口參數(shù)的宏定義)宏指令名稱 MACRO …… ;指令和偽指令序列,稱為宏體 ENDM宏定義的特征:宏定義允許嵌套,在一個宏定義中可以引用另一個宏。如果宏定義是帶參數(shù)的,那么在引用該宏指令時必須給出相應(yīng)的實(shí)參。例子:P202注意,宏定義是由程序員在源程序中完成的。(2)宏調(diào)用在宏指令定義之后,就可以在源程序中調(diào)用已定義的宏指令,調(diào)用格式很簡單,直接給出宏指令名稱就行,如果該宏定義時是帶形參的,那么調(diào)用時一定按照定義時的順序給出各個實(shí)參。格式:宏指令名稱宏指令名稱 實(shí)參1,實(shí)參2,……例子:P203宏調(diào)用這個過程也是由程序員在源程序中實(shí)現(xiàn)的。(3)宏展開在匯編過程中,源程序中的宏指令會被替換為它所代表的程序片段,使用的形參會被替換為調(diào)用時指定的實(shí)參。宏展開這一個過程是由匯編程序完成的,宏展開的具體情況可以參見教材P203。9.2.2宏操作符宏操作符主要用于宏展開時對實(shí)參的靈活解釋。(1)連接操作符&用于把實(shí)參和其他字符串連接成一個整體,進(jìn)而表達(dá)新的含義,一般在宏定義時使用。(2)文本操作符<>如果實(shí)參由比較復(fù)雜的字符串組成,包含逗號、空格等分隔字符,那么就需要使用文本操作符把它括起來,避免匯編程序把一個復(fù)雜的實(shí)參解釋為多個實(shí)參。一般在宏調(diào)用時使用。例如:宏定義:STRING MACRO STR DB ‘&STR&’ ENDM注意,不能寫成’STR’,如果這樣寫,它將被解釋為普通的字符串,不會被解釋為對STR形參的引用。(3)表達(dá)式操作符%%操作符把后面的文本解釋為表達(dá)式,它的功能是取表達(dá)式的最終的值。使用這個操作符可以把表達(dá)式的值作為實(shí)參引用,而不是引用表達(dá)式文本本身。一般在宏調(diào)用時使用。例如:宏定義:TEST MACRO NUMPROMPT&NUM DB ’WARNING&NUM&’ ENDM(4)字符操作符!用于把緊跟其后的宏操作符解釋為普通字符。例如:宏定義:STRING MACRO STR PROMPT DB ‘&STR&’ ENDM宏調(diào)用:STRING <INPUTNUMBER!>1:>宏展開:PROMPT DB ‘INPUTNUMBER>1:’如果大于符號前面不使用!操作符,那么它將被解釋為文本操作符<>的后半部分。9.2.3局部符號偽指令先看一個例子:宏定義:ERROR MACRO CMP AX,BX JA L1 MOV AX,0 JMP L2 L1: MOV AX,0FFH L2: LABEL NEAR ENDM這個宏體中使用了標(biāo)號,那么在多次進(jìn)行宏調(diào)用以后,會出現(xiàn)重復(fù)定義的標(biāo)號L1和L2,從而導(dǎo)致語法錯誤。對于這種情況,一種解決方法是把標(biāo)號設(shè)置為形參,在宏調(diào)用時指定實(shí)際的標(biāo)號,這種方法比較麻煩。因?yàn)橛脩舯旧頉]有通過實(shí)參指定標(biāo)號的需求。另一種方法是把標(biāo)號作為局部符號,在宏展開時所有局部符號都會自動取和上一次展開不同的值。宏展開時局部符號的自動生成格式為:??XXXX。其中XXXX是四位整數(shù)組成的字符串。例子:P2069.2.4宏庫的制作宏庫就是把多個常用的宏指令定義在一個以.LIB為后綴名的文件中。這個文件就稱為宏庫文件。在源程序中使用INCLUDE偽指令裝入指定的宏庫文件以后,就可以在源程序中調(diào)用宏庫中定義的宏指令。多使用已有的宏指令,可以提高編程效率。INCLUDE偽指令的格式:INCLUDE 庫文件名一般在源程序最開始使用。例子:P207宏指令特征:1)宏指令定義完畢以后,在源程序中使用宏指令名稱對其進(jìn)行調(diào)用,不需要重新編制。2)宏指令的展開過程是由匯編程序在匯編過程中自動完成的,在程序執(zhí)行過程中沒有調(diào)用、返回、參數(shù)傳遞等等過程,程序執(zhí)行時,花費(fèi)CPU時間相對較少。3)宏指令所占用的空間由調(diào)用次數(shù)決定,調(diào)用一次就要重新把對應(yīng)代碼展開一次,如果宏指令對應(yīng)的代碼片段比較長,調(diào)用次數(shù)又比較多,那么將耗費(fèi)大量的內(nèi)存空間。相對而言,子程序在程序執(zhí)行階段會花費(fèi)較多的CPU時間,但是它會很節(jié)約內(nèi)存空間。宏指令在程序執(zhí)行階段花費(fèi)較少的CPU時間,因?yàn)樗鄬ψ映绦蚴∪チ艘恍┻^程,但是它可能很花費(fèi)內(nèi)存空間。二者有一個共同點(diǎn):不需要重復(fù)編制對應(yīng)功能模塊的代碼。子程序的優(yōu)點(diǎn)在于節(jié)約空間,調(diào)用時不會再分配空間,那么子程序越長,優(yōu)勢越大。綜合上面的分析:參數(shù)較少,代碼較長的功能模塊適合于組織成子程序的形式。宏指令的優(yōu)點(diǎn)在于程序執(zhí)行階段沒有調(diào)用、返回、參數(shù)傳遞的過程,不需要花費(fèi)額外的CPU時間。缺點(diǎn)在于每次調(diào)用都要重新分配代碼空間。綜合分析的結(jié)果:參數(shù)較多,且代碼較短的功能模塊適合組織為宏指令的形式。上面的判斷標(biāo)準(zhǔn)都是相對的標(biāo)準(zhǔn),不是絕對的,具體程序設(shè)計(jì)時應(yīng)當(dāng)如何取舍,由程序員根據(jù)實(shí)際情況決定。(1)定重復(fù)匯編偽指令REPT/ENDM格式:REPT 表達(dá)式…… ;語句序列ENDM功能:重復(fù)匯編REPT和ENDM之間的語句序列,表達(dá)式的值決定了重復(fù)匯編的次數(shù)。例子:見教材P209例9.3.1和例9.3.2例:使用無條件跳轉(zhuǎn)指令實(shí)現(xiàn)跳轉(zhuǎn)表,原來的方法在P107,現(xiàn)在使用重復(fù)匯編來實(shí)現(xiàn)。JMPTABLE MACRO NUM JMP BRAN&NUM ENDMNUMBER=0REPT 10JMPTABLE NUMBERNUMBER=NUMBER+1ENDM (2)不定重復(fù)匯編偽指令I(lǐng)RP/ENDM格式:IRP 形參,<實(shí)參1,實(shí)參2,…>…… ;語句序列ENDM把IRP和ENDM之間的語句重復(fù)匯編,每一次重復(fù)都取一個新的實(shí)參取代語句中的形參,重復(fù)匯編的次數(shù)由實(shí)參個數(shù)決定。9.4條件匯編條件匯編是指有選擇的對程序片段進(jìn)行匯編,條件滿足時才對程序片段進(jìn)行匯編,否則不匯編。這里所說的條件是匯編過程中所使用的條件判斷,不是程序執(zhí)行階段所使用的分支結(jié)構(gòu)。條件匯編是通過條件匯編偽指令實(shí)現(xiàn)的。條件匯編格式1:IFXX 表達(dá)式…… ;語句序列1ELSE…… ;語句序列2ENDIF其中XX表示某種判斷類型,表達(dá)式是具體需要判斷的對象。如果條件成立,則對語句序列1進(jìn)行匯編,否則,匯編語句序列2。條件匯編格式2:IFXX 表達(dá)式…… ;語句序列ENDIF如果條件成立,對其中的語句序列進(jìn)行匯編,否則不匯編。IFXX中的XX為具體的判斷類型,可以參見教材P212表9-1。條件匯編和重復(fù)匯編可以在源程序中直接使用,也可以在宏定義中使用。例子:P211例9.4.1和P212例9.4.29.5匯編過程這里簡要說明一下匯編程序解釋源程序的大致過程。和人閱讀文章的過程相似,匯編程序要完全理解一個源程序,需要閱讀源程序三次,也就是說,對源程序?qū)嵭腥螔呙?,最后才能生成正確的目標(biāo)代碼。(1)第一次掃描匯編程序第一次掃描源程序主要完成的工作是建立若干線性表,對進(jìn)一步解釋源程序作準(zhǔn)備。所建立的線性表主要有如下這些:1)段表每個表項(xiàng)的字段組成如下:段名,段基值,段類型源程序中所有關(guān)于定義段的信息都統(tǒng)計(jì)在這個表格中。2)變量表每個表項(xiàng)的字段組成如下:變量名,所在段名,偏移量,類型,數(shù)組長度,初始值。源程序中所有關(guān)于定義變量的信息都統(tǒng)計(jì)在這個表中。3)標(biāo)號表每個表項(xiàng)的字段組成:標(biāo)號名,所在段名,偏移量、類型源程序中所有關(guān)于定義標(biāo)號的信息都統(tǒng)計(jì)在這個表中。4)不可重定義替換表每個表項(xiàng)的字段組成:替換文本,原始文本源程序中所有用EQU偽指令定義的常量都統(tǒng)計(jì)在這個表中。5)可重定義替換表每個表項(xiàng)字段組成如下:替換文本,原始文本所有用“=”定義的常量都統(tǒng)計(jì)在這個表格中,由于可以重新定義,在以后的源程序掃描中,這個表可能被修改。注意,除了這個表在后面的掃描過程中可以修改以外,其他的表在第一次掃描以后就確定下來,以后的掃描過程只能進(jìn)行查表的操作,不能再修改這些表。第一次掃描過程實(shí)際上是在統(tǒng)計(jì)源程序中所有用戶定義的標(biāo)識符,并且分類別給它們建立線性表,為后面的掃描過程做準(zhǔn)備。所有有關(guān)符號定義的語法錯誤都是在第一次掃描中被發(fā)現(xiàn)的。(2)第二次掃描匯編程序進(jìn)行第二次掃描所要完成的工作是常量替換,計(jì)算表達(dá)式。1)常量替換查找第一次掃描中建立的不可重復(fù)替換表、可重復(fù)替換表,把常量標(biāo)識符替換為它對應(yīng)的原始文本(現(xiàn)在還不會解釋文本的具體含義);同時根據(jù)“=”提供的重新定義,可能會修改可重復(fù)替換表中的相關(guān)內(nèi)容。2)計(jì)算表達(dá)式在替換常量的同時,匯編程序會識別源程序中的所有表達(dá)式,計(jì)算它們的最終運(yùn)算結(jié)果,并用運(yùn)算結(jié)果替換原來的表達(dá)式文本。如果在表達(dá)式中出現(xiàn)變量名稱或者段名稱,那么這個過程可能需要查找由第一次掃描生成的變量表和段表。第二次掃描主要完成常量和表達(dá)式的替換,需要查找第一次掃描建立的表格。(3)第三次掃描匯編程序第三次掃描掃描源
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年五年級數(shù)學(xué)下冊 7 折線統(tǒng)計(jì)圖第1課時 單式折線統(tǒng)計(jì)圖配套說課稿 新人教版001
- 2025城鎮(zhèn)土地開發(fā)和商品房借款合同協(xié)議書范本范文
- 9 生活離不開規(guī)則 (說課稿)2023-2024學(xué)年統(tǒng)編版道德與法治三年級下冊001
- 2025工地集控室裝飾裝修工程分包合同
- 2025原料玉原料玉米電FEGN子交易合同文本
- 2025二手房交易合同(合同版本)
- 2024年五年級數(shù)學(xué)上冊 3 小數(shù)除法練習(xí)課說課稿 新人教版
- 2024年高中歷史 第三單元 從人文精神之源到科學(xué)理性時代 第13課 挑戰(zhàn)教皇的權(quán)威說課稿 岳麓版必修3
- Unit 6 Growing Up(說課稿)2023-2024學(xué)年人教新起點(diǎn)版英語五年級下冊001
- 2024秋七年級英語下冊 Module 8 Story time Unit 3 Language in use說課稿 (新版)外研版
- 【重慶長安汽車公司績效管理現(xiàn)狀、問題及優(yōu)化對策(7600字論文)】
- 計(jì)算機(jī)網(wǎng)絡(luò)畢業(yè)論文3000字
- 2023年大學(xué)物理化學(xué)實(shí)驗(yàn)報(bào)告化學(xué)電池溫度系數(shù)的測定
- 農(nóng)村公共基礎(chǔ)知識
- 腦出血的護(hù)理課件腦出血護(hù)理查房PPT
- 煤礦機(jī)電運(yùn)輸安全培訓(xùn)課件
- 扣繳個人所得稅報(bào)告表-(Excel版)
- Unit+4+History+and+Traditions單元整體教學(xué)設(shè)計(jì)課件 高中英語人教版(2019)必修第二冊單元整體教學(xué)設(shè)計(jì)
- 提高預(yù)埋螺栓安裝一次驗(yàn)收合格率五項(xiàng)qc2012地腳
- 2023年全國自學(xué)考試00054管理學(xué)原理試題答案
- 六年級譯林版小學(xué)英語閱讀理解訓(xùn)練經(jīng)典題目(附答案)
評論
0/150
提交評論