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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第七章 高級(jí)匯編語(yǔ)言技術(shù),子程序結(jié)構(gòu)有很多優(yōu)點(diǎn) 提供模塊化程序設(shè)計(jì)的條件,便于程序調(diào)試及維護(hù)等。編程效率高,可以節(jié)省存儲(chǔ)空間及程序設(shè)計(jì)所花的時(shí)間。 但使用子程序也有一些不足:  增加了一些額外開(kāi)銷,包括轉(zhuǎn)子及返回、保存及恢復(fù)寄存器現(xiàn)場(chǎng)以及參數(shù)的傳送等。,§7.1 宏匯編§7.2 重復(fù)匯編§7.3 條件匯編,宏(Macro)是匯編語(yǔ)言的一個(gè)特點(diǎn),它是與子程序類似又獨(dú)具特色的另一

2、種簡(jiǎn)化源程序的方法,——統(tǒng)稱宏結(jié)構(gòu),,§7.1 宏匯編,宏定義源程序中一段有獨(dú)立功能的程序代碼組成宏。它只需定義一次,就可以用一條宏指令多次調(diào)用它?! 『甓x用一組偽操作來(lái)實(shí)現(xiàn)?! 「袷剑骸 『甓x名 MACRO [ 啞元表 ]         .         .(宏定義體)         .        ENDM,§7.1 宏匯編,例7.1 用宏指令定義兩個(gè)字操作數(shù)相乘,得到一個(gè)16

3、位的第三個(gè)操作數(shù)作為結(jié)果。宏定義: MULTIPLY   MACRO    OPR1,OPR2,RESULT           PUSH     DX             PUSH     AX                 MOV     AX, OPR1   

4、            IMUL     OPR2                 MOV     RESULT, AX              POP     AX                 

5、 POP     DX          ENDM,§7.1 宏匯編,宏調(diào)用           .          .           . MULTIPLY   CX, VAR, XYZ[BX] ;第一次宏調(diào)用          .           . MULTIPLY   240, BX

6、, SAVE  ;第二次宏調(diào)用          .          .,§7.1 宏匯編,PUSH     DX1 PUSH     AX MOV      AX,CX  ;第一個(gè)操作數(shù)在CX中1 IMUL     VAR      ??;第二個(gè)操作數(shù)是變量VAR MOV      XYZ[BX], AX  ??;結(jié)果存入實(shí)參XYZ[BX]1 POP     

7、AX1   POP      DX,2PUSH     DXPUSH     AX2MOV      AX,240  ;第一個(gè)操作數(shù)是立即數(shù)240IMUL     BX       ;第二個(gè)操作數(shù)在BX中2MOV      SAVE, AX    ;結(jié)果存入變量SAVE2POP      AX2POP      DX,§7.1 宏匯編,一般說(shuō)來(lái),實(shí)元的個(gè)數(shù)和啞元的個(gè)數(shù)相等

8、,但匯編程序并不要求它們必須相等。若實(shí)元個(gè)數(shù)大于啞元個(gè)數(shù),則多余的實(shí)元不予考慮;若實(shí)元個(gè)數(shù)小于啞元個(gè)數(shù),則多余的啞元作"空"處理?! ×硗庑枰⒁獾氖牵暾归_(kāi)后,即用實(shí)元取代啞元后,所得到的語(yǔ)句應(yīng)該是有效的,即匯編語(yǔ)法應(yīng)是正確的,否則匯編程序?qū)?huì)指示出錯(cuò)。,§7.1 宏匯編,TESTMACROVAR1,VAR2mov ah,var1mov bh,var2cmp ah,bh

9、jne exitmov ah,01hexit:mov ah,02hENDM,§7.1 宏匯編,,,,僅是源程序級(jí)的簡(jiǎn)化:宏調(diào)用在匯編時(shí)進(jìn)行程序語(yǔ)句的展開(kāi),不需要返回;不減小目標(biāo)程序,執(zhí)行速度沒(méi)有改變通過(guò)形參、實(shí)參結(jié)合實(shí)現(xiàn)參數(shù)傳遞,簡(jiǎn)捷直觀、靈活多變,還是目標(biāo)程序級(jí)的簡(jiǎn)化:子程序調(diào)用在執(zhí)行時(shí)由CALL指令轉(zhuǎn)向、RET指令返回;形成的目標(biāo)代碼較短,執(zhí)行速度減慢需要利用寄存器、存儲(chǔ)單元或堆棧等傳遞參數(shù),

10、,,宏與子程序具有各自的特點(diǎn),程序員應(yīng)該根據(jù)具體問(wèn)題選擇使用那種方法通常,當(dāng)程序段較短或要求較快執(zhí)行時(shí),應(yīng)選用宏;當(dāng)程序段較長(zhǎng)或?yàn)闇p小目標(biāo)代碼時(shí),要選用子程序,§7.1 宏匯編,宏定義中的參數(shù)宏定義可以無(wú)變?cè) ?  SAVEREG    MACRO     ??;啞元表為空           PUSH     AX                 PUSH     BX                 PUSH

11、     CX           PUSH     DX                 PUSH     SI           PUSH     DI          ENDM    宏調(diào)用:          SAVEREG,§7.1 宏匯編,宏定義中的參數(shù)變?cè)梢允遣僮鞔a  TEST   MACRO    P1,P2,P3   MOV      AX,P1   P2      P3   ??;

12、變?cè)狿2為操作碼ENDM 宏調(diào)用:TEST     WORD_VAR,INC,AX 宏展開(kāi):1  MOV     AX,WORD_VAR1  INC      AX    ;用實(shí)元INC取代啞元 P2,形成INC指令,§7.1 宏匯編,宏定義中的參數(shù)LP    MACRO

13、     COND,LAB J&COND    LAB  ??;J與啞元COND由&相連,形成該指令 操作碼ENDM    宏調(diào)用:   LP    Z,THERE                LP    NZ,HERE              宏展開(kāi):   

14、              1  JZ     THERE   ;J與實(shí)元Z形成JZ條件指令                 1  JNZ     HERE  ??;J與實(shí)元NZ形成JNZ條件指令,§7.1 宏匯編,例7.5 宏定義:    FO    MACRO   P1         JMP    TA&P1   ;TA與啞元P1形成無(wú)條件跳轉(zhuǎn)

15、 指令中的標(biāo)號(hào)         ENDM    宏調(diào)用:        FO     WORD_VAR    宏展開(kāi):      1  JMP    TAWORD_VAR ;TA與實(shí)元

16、 WORD_VAR形成標(biāo)號(hào) TAWORD_VAR     在這里,如果宏定義寫(xiě)為    FO     MACRO P1         JMP    TAP1         ENDM 則在展開(kāi)時(shí),匯編程

17、序把TAP1看作是一個(gè)獨(dú)立的標(biāo)號(hào),并不把TAP1中的P1作為啞元看待,這樣就不能得到預(yù)期的結(jié)果。,§7.1 宏匯編,ABSOL   MACRO   OPER     CMP    OPER,0     JGE    NEXT     NEG    OPER    NEXT: ADD AX,OPERENDM ABSOL BX

18、 ABSOL CX,§7.1 宏匯編,LOCAL偽操作ABSOL  MACRO  OPER  ??;求某操作數(shù)的絕對(duì)值    LOCAL   NEXT   CMP    OPER,0    JGE    NEXT   NEG    OPER   ;如果是負(fù)數(shù),則求補(bǔ)  NEXT: ADD AX,OPERENDMABSOL BXABSOL CX,§7.1 宏匯編,在宏

19、定義內(nèi)使用宏 DIF    MACRO   X,Y  ??;求二 數(shù)之差  MOV    AX,X  SUB    AX,Y ENDMDIFSQR   MACRO   OPR1,OPR2,RESULT ;求二數(shù)之差的平方    PUSH    DX    PUSH    AX    DIF

20、    OPR1,OPR2    IMUL    AX    MOV    RESULT,AX    POP    AX    POP    DXENDM    宏調(diào)用:   DIFSQR   VAR1,VAR2,VAR3,宏展開(kāi):1  PUSH    DX1  PUSH    AX2  MOV    AX,VAR12  SUB    AX,VAR21  IMUL    AX1  MOV    VAR3,AX

21、1  POP    AX1  POP    DX,§7.1 宏匯編,宏庫(kù)的建立與調(diào)用 有時(shí),程序里定義了較多宏,或者可以把自己編程中常用的宏定義建立成一個(gè)獨(dú)立的文件,這個(gè)只包含若干宏定義的文件稱為宏庫(kù),通常用擴(kuò)展名MAC或INC來(lái)表示。當(dāng)應(yīng)用程序中需要用到宏庫(kù)中的某些宏定義時(shí),只需要在該程序的開(kāi)始用INCLUDE語(yǔ)句說(shuō)明如下: INCLUDE C: \ MACRO . MAC,§7.1 宏匯編,PU

22、RGE偽操作PURGE偽操作用來(lái)刪除不用的宏定義?! ±?,用INCLUDE語(yǔ)句調(diào)用宏庫(kù)時(shí)可以用PURGE偽操作刪除在調(diào)用程序中不用的宏定義。當(dāng)然它只在調(diào)用程序中起作用而不會(huì)影響宏庫(kù)的內(nèi)容。  它的格式是: PURGE 宏定義名 [ , 宏定義名 , … ],§ 7.2重復(fù)匯編,有時(shí)匯編語(yǔ)言程序需要連續(xù)地重復(fù)完成相同的或者幾乎完全相同的一組代碼,這時(shí)可使用重復(fù)匯編。    REPT 表達(dá)式  .  . (

23、重復(fù)塊 )  .  ENDM 其中表達(dá)式的值用來(lái)確定重復(fù)塊的重復(fù)次數(shù),表達(dá)式中如包含外部或未定義的項(xiàng)則匯編指示出錯(cuò)。,§ 7.2重復(fù)匯編,例7.15     X = 0     REPT 10      X = X + 1       DB X     ENDM  則匯編后產(chǎn)生     1   DB   1     1   DB   2     1   DB   3        

24、.        .        .     1   DB   10,§ 7.2重復(fù)匯編,例7.16 把字符A到Z的ASCII碼填入數(shù)組TABLE?!    ?CHAR = ‘A’      TABLE   LABLE   BYTE      REPT    26            DB     CHAR       CHAR  = CHAR + 1      EN

25、DM   經(jīng)匯編產(chǎn)生     1   DB   41H     1   DB   42H        .        .        .     1   DB   5AH,§7.2重復(fù)匯編,例7.18 要求建立一個(gè)100字的數(shù)組,其中每個(gè)字的內(nèi)容是下一個(gè)字的地址,而最后一個(gè)字的內(nèi)容是第一個(gè)字的地址?!   ?ARRAY   LABLE   WORD          REPT    99      

26、    DW     $ + 2           ENDM          DW     ARRAY     經(jīng)匯編后得        1 DW     $+2         1 DW     $+2           .          .          .        1 DW     $+2           DW     ARRAY,§7.2重復(fù)匯編,不定重復(fù)偽操作I

27、RP偽操作 不定重復(fù)是指匯編程序把重復(fù)塊的代碼重復(fù)幾次,每次重復(fù)把重復(fù)塊中的啞元用自變量表中的一項(xiàng)來(lái)取代,下一次取代下一項(xiàng),重復(fù)次數(shù)由自變量表中的自變量個(gè)數(shù)來(lái)確定。自變量表必須用尖括號(hào)括起來(lái),它可以是常數(shù)、符號(hào)和字符串等。,§7.2重復(fù)匯編,IRP parameter, (重復(fù)塊) ENDM例7.19    IRP  X,     DB   X    ENDM 

28、 匯編后得:     1   DB   0     1  DB   1        .        .        .     1   DB   9,§7.2重復(fù)匯編,不定重復(fù)偽操作IRPC偽操作 IRPC和IRP類似,但自變量表必須是字符串。重復(fù)次數(shù)由字符串中的字符個(gè)數(shù)確定,每次重復(fù)用字符串中的下一個(gè)字符取代重復(fù)塊中的啞元。,§7.2重復(fù)匯編,例7.22    IRPC   K,A

29、BCD    PUSH   K&X    ENDM  匯編后展開(kāi)成:    1    PUSH AX    1    PUSH BX    1    PUSH CX    1    PUSH DX,§7.2重復(fù)匯編,例7.23 宏定義:  XSUB  MACRO   VAR1:REQ,VARS:VARARG      SUB   AX,VAR1      IRP   SUBS,       S

30、UB   AX,SUBS      ENDM  ENDM   其中VAR1加上 :REQ后表示在調(diào)用時(shí)必須指定實(shí)元,VARS在加上 :VARARG后表示該啞元在調(diào)用時(shí)可以使用不同數(shù)目的實(shí)元。IRP與頭一個(gè)ENDM組成循環(huán),SUBS不斷地用VARS中的一項(xiàng)替代。,§7.2重復(fù)匯編,宏調(diào)用:     XSUB   5,10,15     XSUB   AX,BX,CX,DX,ELEMENT  宏展開(kāi):    1

31、SUB    AX,5    2 SUB    AX,10    2 SUB   AX,15    1 SUB   AX,AX    2 SUB   AX,BX    2 SUB   AX,CX    2 SUB   AX,DX    2 SUB   AX,ELEMENT,§7.3條件匯編,匯編程序能根據(jù)條件把一段源程序包括在匯編語(yǔ)言程序內(nèi)或者把它排除在外,這里就用到條件偽操作。,§7.3條件匯編,IF

32、** 自變量   .   . }自變量滿足給定條件匯編此塊   . [ ELSE ]   .   . }自變量不滿足給定條件匯編此塊   . ENDIF,§7.3條件匯編,條件偽操作中的**表示條件如下: IF  表達(dá)式   匯編程序求出表達(dá)式的值,如此值不為0則滿足條件。 IFE 表達(dá)式   如求出表達(dá)式的值為0則滿足條件。 IFDEF 符號(hào)   如符號(hào)已在程序中定義,或者已用EXTRN偽操作說(shuō)明

33、 該符號(hào)是在外部定義的,則滿足條件。 IFNDEF 符號(hào)   如符號(hào)未定義或未通過(guò) EXTRN 說(shuō)明為外部符號(hào)則滿足 條件。IFB   如自變量為空則滿足條件。IFNB  如自變量不為空則滿足條件。IFIDN , 如果字符串 和字符串

34、相同,則滿足條件。IFDIF , 如果字符串 和字符串不相 同,則滿足條件。,§7.3條件匯編,條件偽操作IF的使用舉例 例7.24 宏指令MAX把三個(gè)變?cè)械淖畲笾捣旁贏X中,而且使變?cè)獢?shù)不同時(shí)產(chǎn)生不同的程序段?!  『甓x:MAX    MACRO    N , A , B , CLOCAL   NEXT,OUTMOV    AX,AIF    N-1IF   

35、 N-2CMP    C,AXJLE    NEXTMOV    AX,CENDIFNEXT: CMP    B,AXJLE    OUTMOV    AX,BENDIFOUT:ENDM,宏調(diào)用:      MAX    1,P      MAX    2,P,Q      MAX    3,P,Q,R,§7.3條件匯編,宏展開(kāi):MAX    1,P ;N

36、-1 = 0,第一層IF不滿足條件1 MOV    AX,P1 OUT: MAX    2,P,Q ;N-2 = 0,第二層IF不滿足條件1 MOV    AX,P1 NEXT: 1 CMP    Q,AX1 JLE    OUT1 MOV    AX,Q 1 OUT:,§7.3條件匯編,MAX    3,P,Q,R ;第一、第二層均滿足條件     1 MOV    AX,P     1 CMP   

37、 R,AX      1 JLE    NEXT      1 MOV    AX,R      1 NEXT:      1 CMP    Q,AX      1 JLE    OUT      1 MOV    AX,Q      1 OUT:,§7.3條件匯編,例7.25 宏指令BRANCH產(chǎn)生一條轉(zhuǎn)向X的轉(zhuǎn)移指令。當(dāng)它相對(duì)于X的距離小于128字節(jié)時(shí)產(chǎn)生JMP SHORT X;否則產(chǎn)生JMP NEAR P

38、TR X。   宏定義:      BRANCH    MACRO   X             IF    ( $-X ) LT 128             JMP    SHORT X             ELSE             JMP    NEAR PTR X             ENDIF      ENDM       宏調(diào)用:             BRANCH   A

39、A       宏展開(kāi):        1     JMP    SHORT AA      否則產(chǎn)生        1     JMP    NEAR PTR AA,§7.3條件匯編,例7.26 宏指令POWER可以用來(lái)實(shí)現(xiàn)X和2N相乘。這只需對(duì)X左移N次即可實(shí)現(xiàn),可以設(shè)COUNT為遞歸次數(shù)的計(jì)數(shù)值,當(dāng)該數(shù)與N相乘時(shí)就可結(jié)束遞歸調(diào)用。   宏定義:     POWER    MACRO   X, N    

40、       SAL    X, 1      COUNT = COUNT + 1           IF     COUNT - N           POWER   X, N           ENDIF     ENDM    宏調(diào)用:      COUNT = 0           POWER   AX,3    宏展開(kāi):       1    SAL    AX,1       2

溫馨提示

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

評(píng)論

0/150

提交評(píng)論