2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、匯編語言程序設計,Assembly Language Programming,第七章 高級匯編語言技術,2,教學重點:在掌握基本的匯編語言程序設計方法之后進一步學習如何提高編程效率的各種實用方法:  宏匯編  重復匯編  條件匯編   ——統(tǒng)稱宏結構,宏(Macro)是匯編語言的一個特點,它是與子程序類似又獨具特色的另一種簡化源程序的方法。,3,宏——具有宏名的一段匯編語

2、句序列——宏定義時書寫宏指令——這段匯編語句序列的縮寫——宏調用時書寫宏展開——宏指令處用宏體代替的過程——宏匯編時實現(xiàn),7.1 宏匯編,宏的使用有三個步驟: 宏定義、宏調用、宏展開。,4,macro_name MACRO [啞元表]     (宏定義體)      ENDM,宏定義,啞元 相當于C語言函數(shù)定義中形參,宏的參數(shù) 功能強大,頗具特色; 宏定義體 可以是任何合法

3、的匯編語句,既可以是硬指令序列,又可以是偽指令序列, 也可以使用已經定義過的宏指令或者嵌套進行宏定義; 配合宏,還有宏操作符和與宏有關的偽指令。,7.1.1 宏的使用過程,5,宏定義,mainbegin  MACRO ;;定義名為mainbegin的宏,無參數(shù) mov ax,@data;;宏定義體 mov ds,ax ENDM;;宏定義結束mainend MACRO retnum ;;帶有啞元

4、retnum mov al,retnum ;;宏定義中使用參數(shù) mov ah,4ch int 21h ENDM,宏注釋符,7.1.1 宏的使用過程,6,macro_name [實元表],宏調用,start:mainbegin;宏調用,建立DS內容dispmsg string;宏調用,顯示字符串mainend 0;宏調用,返回DOSend start 宏調用的實質——在匯編過

5、程中進行宏展開; 實元 相當于C語言函數(shù)調用中的實參; 對宏指令的調用必須先定義后調用。,7.1.1 宏的使用過程,7,——在匯編時,用宏定義體的代碼序列替代宏指令的過程,宏展開,宏展開的具體過程——當匯編程序掃描源程序遇到已有定義的宏調用時,即用相應的宏定義體取代源程序的宏指令,同時用位置匹配的實參對形參進行取代; 若實元數(shù)>啞元數(shù),則多余的實元無效; 若實元數(shù)<啞元數(shù),則多余的啞元作“空NULL”處理。,7.

6、1.1 宏的使用過程,8,宏展開 舉例,start: mainbegin;宏指令 1    mov ax,@data;宏展開 1  mov ds,ax  mainend 0;宏指令 1    mov al,0;宏展開 1    mov ah,4ch 1    int 21,7.1.1 宏的使用過程,9,——宏的參數(shù)使用非常靈活,宏的參數(shù),宏定義時, 可以無參數(shù),例如:mainbegin

7、可以帶有一個參數(shù),例如:mainend 也可以具有多個參數(shù), 例如:例7.1 實際參數(shù)可以是常數(shù)、變量、存儲單元、指令(操作碼)或它們的一部分,也可以是表達式。,7.1.2 宏的參數(shù),10,multiply MACRO opr1,opr2,result push dx push ax mov ax, opr1 imul opr2

8、 mov result, ax pop ax pop dx ENDM,宏展開: 1 push dx 1 push ax 1 mov ax, cx 1 imul var 1 mov xyz[bx],ax 1 pop ax 1 pop dx,例7.1 兩

9、個字相乘(多個變元),,,multiply cx, var, xyz[bx],7.1.2 宏的參數(shù),宏定義:,宏調用:,11,,savereg MACRO push ax push bx push cx push dx push si push di ENDM,宏調用:  s

10、avereg宏展開: 1   push ax 1  push bx 1  push cx 1  push dx 1  push si 1  push di,例7.2保存寄存器(無參數(shù)),,,,7.1.2 宏的參數(shù),宏定義:,12,,宏定義:shrot MACRO op,od,num push cx mo

11、v cl,num op od,cl pop cx ENDM,宏展開: 1   push cx 1  mov cl,7 1  shl ax,cl 1  pop cx 1   push cx 1  mov cl,6 1  ror ax,cl 1  pop cx,例7.3統(tǒng)一循環(huán)移位和移位指令

12、 (變元是操作碼),宏調用:  shrot shl, ax,7 shrot ror,x,6,,,7.1.2 宏的參數(shù),,13,,宏定義:shift MACRO op,od,num push cx mov cl,num s&op od,cl pop cx ENDM,例7.4 統(tǒng)一移位指令(變元是操作碼的一部分),宏調用:  shift al, ax

13、,4 shift hr ax,4,,,宏展開: 1   push cx 1  mov cl,4 1  sal ax,cl 1  pop cx 1   push cx 1  mov cl,4 1  shr ax,cl 1  pop cx,,7.1.2 宏的參數(shù),14,與宏有關的偽操作,局部標號偽操作——LOCAL

14、 標號列表宏定義體采用了標號,應使用LOCAL加以說明,它必須是宏定義MACRO語句之后的第一條語句,宏展開時, LOCAL定義的標號也由??0000~??FFFF替代宏定義刪除偽操作——PURGE 宏名表不需要某個宏定義時,可以把它刪除宏定義退出偽操作——EXITM偽指令EXITM表示結束當前宏調用的展開,7.1.3與宏有關的偽操作,15,宏定義:absol MACRO oper LOCAL

15、next cmp oper, 0 jge next neg opernext: ENDM宏調用:absol var……absol bx,宏展開:1 cmp var, 01 jge ??00001 neg var??0000:

16、 ……1   cmp bx, 01 jge ??00011 neg bx1 ??0001: ……,例7.5 求絕對值(使用LOCAL偽操作),,7.1.3與宏有關的偽操作,16,宏定義:add MACRO opr1, opr2, result …… …… ENDM宏調用:……add xx, yy,

17、zzpurge add ; 取消宏定義……,宏指令名與指令助記符或偽操作名相同,宏指令的優(yōu)先級最高。,7.1.3與宏有關的偽操作,17,;;——宏注釋符,用于表示在宏定義中的注釋。采用這個符號的注釋,在宏展開時不出現(xiàn)。&——替換操作符,用于將參數(shù)與其他字符分開。如果參數(shù)緊接在其他字符之前或之后,或者參數(shù)出現(xiàn)在帶引號的字符串中,就必須使用該偽操作符。%——表達式操作符,用在宏調用中,表示將后跟的一個表

18、達式的值作為實參,而不是將表達式本身作為參數(shù)。,宏操作符,7.1.4 宏操作符,18,——字符串傳遞操作符,用于括起字符串。在宏調用中,如果傳遞的字符串實參數(shù)含有逗號、空格等間隔符號,則必須用這對操作符,以保證字符串的完整。!——轉義操作符,用于指示其后的一個字符作為一般字符,不含特殊意義。,宏操作符,7.1.4 宏操作符,19,,例7.6 ( 使用 ;; 注釋),Q MACRO m ; display a

19、message 每次展開保留此注釋 ;; m is a string 每次展開不保留此注釋 ……  ENDM,7.1.4 宏操作符,20,,leap macro cond, lab j&cond lab endm,,宏定義:,宏調用:,leap z, there……leap nz, here,,宏展開:,1

20、 jz there ……1 jnz here,,例7.7(變元是操作碼的一部分),7.1.4 宏操作符,21,msggen macro lab,num,xyz lab&num db ‘Hello MR. &XYZ’ endm,,宏定義:,宏調用:,Msggen msg,1,Wang,,宏展開:,例7.8(變元是ASCII串),msg1 db ‘Hello MR.

21、Wang’,,7.1.4 宏操作符,22,,,宏定義DATA1 MACRO A,B DW A,B ENDM宏調用 X=10 Y=20 DATA1 %X,%Y DATA2 X,Y,例7.9(使用 %),宏展開 1 DW 10,20 1 DW X,Y,,,,7.1.4 宏操作符,23,,dstringmacro string

22、db ’&string&’,0dh,0ah,’$’endm,,,宏定義:,宏調用:,dstringdstring,,宏展開:,1 db ’This is a example.’, 0dh,0ah,’$’1 db ’0 < Number < 10’, 0dh,0ah, ’$’,,例7.10 (使用和!),傳遞操作符,,!轉義操作符,,,,7.1.4 宏操作符,24,7.1.5 在宏定義內使用宏

23、,宏定義體中可以使用宏,有兩種情形:宏定義中可以使用宏調用,前提是必須先定義后調用宏體中包含宏定義,25,例7.11 在宏定義內使用宏調用,宏定義:dif MACRO x, y mov ax,x sub ax,y ENDMdifsqr MACRO x, y, z push dx push ax dif x,y imul ax

24、 mov z,ax pop ax pop dx ENDM,宏調用:  difsqr v1, v2, v3宏展開: 1   push dx 1  push ax 2  mov ax,v1 2  sub ax,v2 1  imul ax 1 mov z,ax 1

25、  pop ax 1 pop dx,,,,26,例7.12 在宏定義內使用宏調用,宏定義:dfmac MACRO mnam, op mnam MACRO x, y, z push ax mov ax,x op ax,y mov z,ax pop ax

26、 ENDM ENDM,宏調用:  dfmac addition, add dfmac logor, or,,,則形成兩條宏指令:addition, logor,,宏調用宏展開:  addtion x,y,z1 pushax1 movax,x1 addax,y1 movz,ax1 popax logorx,

27、y,z1 pushax1 movax,x1 orax,y1 movz,ax1 popax,,,,27,源程序(ASM文件)經匯編程序匯編,主要輸出是OBJ文件和LST文件(列表文件)。LST文件同時列出源程序和機器語言程序清單,并給出符號表。.LALL—在LST清單中列出宏展開后的全部語句.SALL—在LST清單中不列出任何宏展開后的語句.XALL—只

28、列出產生目標代碼的語句Page256~257 例7.12,列表偽操作,7.1.6 列表偽操作,28,1.縮短源代碼2.擴充指令集3.改變某些助記符的意義,匯編語言程序指令,指令偽指令(偽操作)宏指令,,宏指令的用途,7.1 宏匯編,29,,子程序:在程序執(zhí)行期間被調用,只占用自身大小的一段空間,主程序,……call sub1……call sub1……call sub1……,子程序 sub1,…

29、… …… …… ret,,,,,,,宏調用與子程序調用的區(qū)別,7.1 宏匯編,30,,宏定義,宏調用,宏展開,Q macro x,y endm,,,…… Q a,b …… Q c,d …… Q e,f ……,…… …… …… ……,,,,,,,,,宏調用:在匯編期間被展開,每調用一次就把宏定義體展開一次。,7.1 宏匯編,31,比較,僅是源程

30、序級的簡化:宏調用在匯編時進行程序語句的展開,不需要返回;不減小目標程序,執(zhí)行速度沒有改變通過形參、實參結合實現(xiàn)參數(shù)傳遞,簡捷直觀、靈活多變,還是目標程序級的簡化:子程序調用在執(zhí)行時由CALL指令轉向、RET指令返回;形成的目標代碼較短,執(zhí)行速度減慢需要利用寄存器、存儲單元或堆棧等傳遞參數(shù),宏,子程序,,,7.1 宏匯編,32,7.2 重復匯編,重復匯編指在匯編過程中,重復展開一段(基本) 相同的語句重復匯編沒有名字

31、,不能被調用重復匯編常用在宏定義體中,也可以在一般匯編語句中使用,重復匯編偽指令有三個: REPT——按參數(shù)值重復 IRP——按參數(shù)個數(shù)重復 IRPC——按參數(shù)的字符個數(shù)重復最后,用ENDM結束,7.2 重復匯編,33,,REPT格式: REPT 表達式 …… ; 重復塊 ENDM,例7.13X=0

32、 REPT 10X=X+1 DB X ENDM,,1 DB 11 DB 21 DB 3 ……1 DB 10,,匯編后:,7.2.1 重復偽操作REPT,7.2 重復匯編,34,CHAR=‘a’TABLE LABEL BYTE REPT 26

33、 DB CHARCHAR=CHAR+1 ENDM,,1 DB 61H1 DB 62H1 DB 63H ……1 DB 7AH,,匯編后:,例7.14 把字符‘A’到‘Z’的 ASCII 碼填入數(shù)組TABLE,35,IRP格式: IRP 啞元, …… ; 重復塊

34、 ENDM 每次重復用自變量表中的一項取代啞元,重復次數(shù)由自變量的個數(shù)決定。,例7.15 IRP REG, PUSH REGENDM,,1 PUSH AX1 PUSH BX1 PUSH CX1 PUSH DX,,匯編后:,7.2.2 不定重復偽操作 IRP,,36,data segment array la

35、bel byte IRP K, db ‘NO.&K’ ENDMdata ends,data segment array label byte 1 db ‘NO.1’ 1 db ‘NO.2’ 1 db ‘NO.3’ 1 db ‘NO.4’

36、 1 db ‘NO.5’data ends,,匯編后:,例7.16:在數(shù)據(jù)段產生字符區(qū)array,包括5個字符串‘NO.K’,37,IRPC格式: IRPC 啞元,字符串 …… ; 重復塊 ENDM 每次重復用字符串中的一個字符取代啞元,重復次數(shù)等于字符串中的字符數(shù)。例:在數(shù)據(jù)段產生字符區(qū)arra

37、y,包括5個字符串‘NO.K’,7.2.3 不定重復偽操作 IRPC,38,按參數(shù)字符個數(shù)重復,IRPC regad,dcba pop &regad&xENDM,1pop dx 1pop cx 1pop bx 1pop ax,39,data segment array label byte IRPC K, 12345

38、 db ‘NO.&K’ ENDMdata ends,data segment array label byte 1 db ‘NO.1’ 1 db ‘NO.2’ 1 db ‘NO.3’ 1 db ‘NO.4’ 1 db ‘NO.5’data ends,,匯

39、編后:,例7.17:在數(shù)據(jù)段產生字符區(qū)array,包括5個字符串‘NO.K’,,40,根據(jù)條件把一段源程序包括在匯編語言范圍內,或者排除在外 一般格式: IF?? 自變量 ; ??為條件 …… ; 自變量滿足條件則匯編此塊 [ELSE] ……  ; 自變量不滿足條件

40、則匯編此塊 ENDIF,7.3 條件匯編,41,,IF 表達式IFE 表達式IFDEF 符號IFNDEF 符號IFB IFNB IFIDN ,IFDIF ,,詳見Page 266,常見條件匯編語句,42,pdatamacro num IF num lt 100;;如果num < 100,則匯編如下語句db num d

41、up (?) ELSE;;否則,匯編如下語句db 100 dup (?) ENDIFendmpdata 12 ;宏調用①db 12 dup(?) ;宏匯編結果①pdata 102 ;宏調用②db 100 dup(?) ;宏匯編結果②,例7.18,,,43,宏結構的作用,宏匯編、重復匯編和條件匯編為源程序的編寫提供了很多方便,靈活運用它們可以編寫出非常

42、良好的源程序來匯編系統(tǒng)中有些以圓點起始的 偽指令(如.startup、.exit等)實際上是一種宏結構,44,dstringMACRO string;;定義字符串db '&string&',0dh,0ah,'$'ENDMmainbeginMACRO dsseg;;設置數(shù)據(jù)段地址mov ax,dssegmov ds,axENDMd

43、ispmsgMACRO messagemov dx,offset messagemov ah,09hint 21hENDM,45,mainendMACRO retnum;;返回DOS,可不帶參數(shù)ifb mov ah,4ch;;沒有參數(shù)else mov ax,4c00h+(retnum AND 0ffh);; 有參數(shù)endifint 21hENDM,46,.model smal

44、l.stack 256.datamsg1equ this bytedstringmsg2equ this bytedstring.codestart:mainbegin @data;建立DS內容dispmsg msg1;顯示msg1字符串dispmsg msg2;顯示msg2字符串mainend;返回DOSend start,47,宏定義:MAX MACRO K, A,

45、B, C LOCAL NEXT, OUT MOV AX, A IF K-1 IF K-2 CMP C, AX JLE NEXT MOV AX, C ENDIFNEXT: CMP B, AX

46、JLE OUT MOV AX, B ENDIFOUT: ENDM,宏調用:MAX 1, PMAX 2, P, QMAX 3, P, Q, R,1 MOV AX, P1 ??0002: CMP Q, AX1 JLE ??00031 MOV AX, Q

47、1 ??0003:,1 MOV AX, P1 CMP R, AX1 JLE ??00041 MOV AX, R1 ??0004: CMP Q, AX1 JLE ??00051 MOV AX, Q1 ??0005:,,1 MOV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論