IBM-PC匯編語言程序設(shè)計實例講解_第1頁
IBM-PC匯編語言程序設(shè)計實例講解_第2頁
IBM-PC匯編語言程序設(shè)計實例講解_第3頁
IBM-PC匯編語言程序設(shè)計實例講解_第4頁
IBM-PC匯編語言程序設(shè)計實例講解_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論