匯編語言程序設(shè)計(錢曉捷)課后答案_第1頁
匯編語言程序設(shè)計(錢曉捷)課后答案_第2頁
匯編語言程序設(shè)計(錢曉捷)課后答案_第3頁
匯編語言程序設(shè)計(錢曉捷)課后答案_第4頁
匯編語言程序設(shè)計(錢曉捷)課后答案_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選文檔匯編語言程序設(shè)計(第二版)錢曉捷習(xí)題答案第二章()2.1(1)AX1200h (2)AX0100h (3)AX4C2Ah (4)AX3412h (5)AX4C2Ah (6)AX7856h (7)AX65B7h 2.2(1)    兩操作數(shù)類型不匹配 (2)        IP指令指針禁止用戶訪問 (3)    立即數(shù)不允許傳給段寄存器 (4)    段寄存器之間不允許傳送 (5) 

2、0;  兩操作數(shù)類型不匹配 (6)    目的操作數(shù)應(yīng)為 BP (7)    源操作數(shù)應(yīng)為 BX+DI   (8)    立即數(shù)不能作目的操作數(shù)2.3lea bx,table     ;獲取table的首地址,BX200H mov al,8         ;傳送欲轉(zhuǎn)換的數(shù)字,AL8 xl

3、at             ;轉(zhuǎn)換為格雷碼,AL12H 2.4堆棧是一種按“先進后出”原則存取數(shù)據(jù)的存儲區(qū)域。 堆棧的兩種基本操作是壓棧和出棧,對應(yīng)的指令是PUSH和POP。2.5mov ax,8057h push ax mov ax,0f79h push ax pop bx             ;bx=0f79h pop bx &

4、#160;        ;DS:0f79h=8057h 2.6AL=89h       CF       ZF       SF       OF       PF AL=12h    &

5、#160;   1        0        0        1        1 AL=0afh       0        0  

6、60;     1        0        1 AL=0afh       1        0        1        0 

7、;       1 AL=00h        0        1        0        0        1 AL=0ffh    &#

8、160;  0        0        1        0        1 AL=00h        0        1   

9、;     0        0        1        2.7 W=X+Y+24-Z2.8(1)ADD DX,BX (2)ADD AL,BX+SI (3)ADD BX+0B2H,CX (4)ADD WORD PTR 0520H,3412H (5)ADD AL,0A0H 2.9;為了避免與操作數(shù)地址混淆,將題中X,Y,Z,V 字操作數(shù)改為A

10、,B,C,D        mov ax,X       ;ax=A          imul Y         ;dx,ax = A*B      (將操作數(shù)看作符號數(shù),以下同)     

11、60;  mov cx,ax          mov bx,dx      ;bx,ax      <-      dx,ax =A*B         mov ax,Z       

12、;;ax = C         cwd            ;dx,ax =C   (擴展符號后為雙字)        add cx,ax         adc bx,dx    &#

13、160; ;bx,cx <- bx,cx+dx,ax=A*B+C        sub cx,540         sbb bx,0       ;bx,cx<- A*B+C-540          mov ax, V    

14、0; ;ax= D         cwd            ;dx,ax= D   (擴展符號后為雙字)         sub ax, cx         sbb dx, bx &

15、#160;   ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540)        idiv X ;運算結(jié)果:D-(A*B+C-540h)/A ;ax存商,dx存余數(shù) 2.10;(1)xchg的操作數(shù)不能是立即數(shù) (2不能對CS直接賦值 (3)兩個操作數(shù)不能都是存儲單元 (4)堆棧的操作數(shù)不能是字節(jié)量 (5)adc的操作數(shù)不能是段寄存器 (6)沒有確定是字節(jié)還是字操作 (7)in不支持超過FFH的直接尋址 (8)out只能以AL/AX為源操作數(shù)   第

16、二章(02)   2.11;指令A(yù)X的值CFOFSFZFPFMov     ax,1407h1470h-And     ax,ax1470h00000Or      ax,ax1470h00000Xor     ax,ax000011Not      ax0ffffh-Test     ax,0f0f0h0ffffh0

17、0101注意: 1. mov, not指令不影響標(biāo)志位           2. 其他邏輯指令使CF=OF=0, 根據(jù)結(jié)果影響其他標(biāo)志位。                               

18、                                       第2章(03)2.12;指令         

19、60;       注釋              執(zhí)行結(jié)果    CF OF SF ZF PF mov si,ax            si=ax        &#

20、160;     si=0008h      -   -   -   -   - shl si,1             si=2*ax            si=0010h  

21、;    0   0   0   0   0 add si,ax            si=3*ax            si=0018h      0   0   0

22、0;  0   1 mov dx,bx            dx=bx              dx=0010h     -   -   -   -   - mov cl,03h  &#

23、160;        cl=03h                          -   -   -   -   - shl dx,cl     

24、;       dx=8*bx            dx=0080h      0   u   0   0   0 sub dx,bx            dx=7*bx &#

25、160;          dx=0070h      0   0   0   0   0 add dx,si            dx=7*bx+3*ax       dx=0088h  

26、;    0   0   0   0   1 注意: 1. 左移N次相當(dāng)于乘于2的N次方,右左移N次相當(dāng)于除乘于2的N次方。 2. 移位指令根據(jù)是否移入“1”到CF,設(shè)置CF,根據(jù)移位后的結(jié)果影響SF,ZF,PF。根據(jù)最高符號位是否改變設(shè)置OF,如改變 OF=1. 3. u 表示無定義, - 表示無影響。2.13; (1) ;不考慮進位mov bl,al mov cl,3 shl al,cl add al,bl     ;shl bl,1 add

27、 al,bl ;考慮進位xor ah,ah mov bx,ax mov cl,3 shl ax,cl add ax,bx     ;shl bx,1 add ax,bx (2) 數(shù)字09的ASCII碼是:30h39h 非壓縮BCD碼的09是:00h09h 方法一: and al,0fh     ;實現(xiàn)ASCII到非壓縮BCD碼的轉(zhuǎn)換 or al,30h     ;實現(xiàn)非壓縮BCD碼到ASCII的轉(zhuǎn)換 方法二: xor al,30h    

28、;;求反D5D4位,其他不變 ;即高4位為3,則變?yōu)?;高4位為0,則變?yōu)? mov cl,4 again: shr dx,1     ;實現(xiàn)邏輯右移 ;采用“sar dx,1”,則實現(xiàn)算術(shù)右移      rcr ax,1      dec cl      jnz again 2.14; (1)用sar編寫 2.20; 8086的條件轉(zhuǎn)移的轉(zhuǎn)移范圍:在當(dāng)前指令地址的 +127- -128之內(nèi)。 如條件轉(zhuǎn)移的轉(zhuǎn)移范圍超出此范圍,可在此范圍

29、內(nèi)安排一條無條件轉(zhuǎn)移,再轉(zhuǎn)移到范圍外的目標(biāo)地址。2.21; (1)JMP Bx        ;轉(zhuǎn)移的有效地址EA=BX=1256h (2)JMP tABLEBx ;轉(zhuǎn)移的有效地址EA=ds:20a1h+1256h=232f7=3280h (3)JMP Bxsi  ;轉(zhuǎn)移的有效地址EA=ds:1256h+528fh=264e5h=2450h2.22; (1) xor ax,1e1eh         je equal 

30、0;   ;AX1e1eh(異或后為0) (2)test al,10000001b        jnz there     ;AL的D0或D7至少有一位為1 (3) cmp cx,64h         jb there     ;CX(無符號數(shù)) 64h 2.23;mov cx,0      不

31、循環(huán),因為一進入循環(huán)就判 cx=0? 如cx=0 就退出循環(huán) delay:loop delay 2.24; (1)若DX > DI,轉(zhuǎn)到above執(zhí)行         cmp dx,di         ja above    ;jnbe above (2)若AX > SI,轉(zhuǎn)到greater執(zhí)行         cmp ax,si &

32、#160;       jg greater    ;jnle greater (3)若CX = 0,轉(zhuǎn)到zero執(zhí)行         cmp cx,0       jcxz zero         jz zero     (4)若AXSI產(chǎn)生溢出

33、,轉(zhuǎn)到overflow執(zhí)行;         cmp ax,di         jo overflow (5)若SIAX,轉(zhuǎn)到less_eq執(zhí)行;         cmp si,ax             cmp ax,si    &#

34、160;    jle less_eq             jge less_eq (6)若DIDX,轉(zhuǎn)到below_eq執(zhí)行。         cmp di,dx             cmp dx,di     

35、;    jbe below_eq         jae below_eq2.25; 答:將首地址為array得20個字的數(shù)組求和,并將結(jié)果存入 total 單元中。2.26; (1)       mov si,0       mov dl,stringsi   ;第1個字符送dl寄存器       mov si,5

36、       mov dh,stringsi   ;第6個字符送dh寄存器 (2)       xor si,si                    ;si清零      mov al,buffersi &

37、#160; ;第一字節(jié)      inc si      mov ah,buffersi   ;第二字節(jié)      mov cl,4      shl ah,cl                  ;BCD碼移到高半字節(jié)

38、      or al,ah                     ;組合成壓縮BCD碼      mov dl,al                

39、;   ;存入dl寄.      inc si      mov al,buffersi   ;第三字節(jié)      inc si      mov ah,buffersi   ;第四字節(jié)      mov cl,4      shl ah,cl  &

40、#160;        ;BCD碼移到高半字節(jié)      or al,ah            ;組合成壓縮BCD碼      mov dh,al           ;存入dh寄. (3)  &

41、#160;    test dx,0f000h       jz zero       mov ax,-1       jmp done       zero:    mov ax,0       done:    ret (4)   &#

42、160;   lea bx,buffer1        lea dx,buffer2       mov cx,8               ;8個字節(jié)       xor si,si      

43、        ;si=0        clc                    ;CF=0 (5)       mov ax,0b800h     &#

44、160; mov ds,ax       ;段地址       xor si,si       ;地址偏移量si=0       xor dx,dx       ;和的高字dx=0       mov cx,99  &#

45、160;    ;加的次數(shù)       mov ax,si   ;第一個數(shù) again:    inc si           ;指向下一個字單元       inc si       add ax,si   

46、;  ;加下一個數(shù)       jnc    noc         ;無進位轉(zhuǎn)       inc dx           ;有進位dx=dx+1 noc:    dec cx   &#

47、160;       ;次數(shù)-1       jnz cx,again    ;非0繼續(xù)加        ret (6)       mov si,offset string       mov cx,8000h     

48、;           ;32k=215=8000h again: cmp si,$       jnz next       mov si,20h               ;if si=$ si<-   &#

49、160;next:    inc si       loop again (7)       xor si,si               ;si<-0       mov cx,100      &#

50、160;      ;循環(huán)次數(shù) again: dec arraysi       dec cx       jnz    again (8)        xor si,si          ;si<-0     

51、;   coun:    cmp stringsi,$        je    done        inc si        jmp coun        done: ret        

52、                         2.27; (1)使CF0 :        clc   ;       and ax,ax   ;or ax

53、,ax (2)使AX0 :       xor ax,ax  ;     and ax,0  ;mov ax,0 (3)同時使AX0和CF0: and ax,0 ;xor ax,ax ;sub ax,ax2.29; 壓縮BCD碼加法:AXAXBX 出口參數(shù):AXBCD碼和2.34; okmsg      db OK, $errmsg      db Erro

54、r ! Overflow !, $                 mov ax,X       sub ax,Y       jo overflow       mov dx,offset okmsg       jmp next overflow

55、: mov dx,errmsg next:       mov ah,9       int 21h 錯誤:       mov ax,X       sub ax,Y       jo overflow       mov dx,offset okmsg   

56、;            okmsg      db OK, $           mov dx,errmsg      ;錯誤1:數(shù)據(jù)定義在代碼中       mov ah,9      

57、; int 21h overflow:    errmsg db Error ! Overflow !, $           mov dx,errmsg            ; 錯誤2:缺少JMP指令       mov ah,9       int 2

58、1h 2.37; ;xt237.asm.model small.stack.dataarray db 255db 0array1 db 255 dup('$')array2 db 0dh,0ah,'$' .code.startupmov ah,0ah    ; 鍵盤輸入字符串mov dx,offset arrayint 21hmov dx,offset array2 ; 回車換行mov ah,09hint 21hmov bx,offset array1again: mov al,bxcmp al,'$'jz done

59、cmp al,'a'    ; 小于a和大于z的字符不是小寫字母jb nextcmp al,'z'ja nextsub al,20h    ; 在a和z之間的字符才是小寫字母,轉(zhuǎn)換為大寫mov bx,al    ; 保存到原位置next: inc bxjmp againdone: mov dx,offset array1mov ah,09hint 21h.exit 0end第三章(01) 3.1; 硬指令:每個硬指令就是一個處理器指令,在CPU執(zhí)行時產(chǎn)生相應(yīng)功能; 偽指令:

60、偽指令并不產(chǎn)生處理器指令,它通常用于輔助匯編程序?qū)υ闯绦蜻M行匯編。3.2;3.5;   編輯     文本編輯程序      匯編語言源程序.asm   匯編     匯編程序          目標(biāo)模塊文件.obj   連接    

61、60;連接程序          可執(zhí)行文件.exe或.com   調(diào)試     調(diào)試程序          應(yīng)用程序3.6; ;xt236.asm  簡化段定義格式          .model small ;定義程序的存儲模

62、式(小模式)          .stack      ;定義堆棧段(默認1024個字節(jié))          .data       ;定義數(shù)據(jù)段 str1    ab Input Number:09 : ,0dh,0ah,$   str2 

63、;   ab Error!,0dh,0ah,$           .cade       ;定義代碼段           .startup    ;說明程序的起始點,建立ds,ss的內(nèi)容。      

64、60;     mov ah,09h        ;顯示str1字符串           mov dx,offset str1           int 21h gtekey: mov ah,1        &#

65、160;  ;調(diào)用BIOS判斷按鍵功能           int 16h           jz    getkey          ;如 zf = 0,無鍵按下,等待         

66、;  cmp    al,0       ;有鍵按下,鍵值與0比較           jb error          ;如 < 0,出錯處理           cmp al, 9  &#

67、160;    ;有鍵按下,鍵值與 9比較           ja error          ;如 9,出錯處理           mov ah,02h      ;調(diào)用DOS顯示字符功能,顯示該數(shù)字  

68、;         mov dl,al           int 21h          .exit 0              ;終止程序執(zhí)行,返回DOS error: mov ah,09h 

69、   ; 出錯,調(diào)用DOS 功能顯示str2字符串           mov dx,offset str2           int 21h           jmp getkey        ;等待按鍵 

70、60;         end        ; 匯編結(jié)束3.7; ;xt307.asmstack    segment           dw 512 dup(?) stack    endsdata     segmentarray db 25

71、5db 0array1 db 255 dup('$')array2 db 0dh,0ah,'$' data endscode segment 'code'assume cs:code, ds:data, ss:stackstart: mov ax,data          mov ds,ax mov ah,0ah    ; 鍵盤輸入字符串mov dx,offset arrayint 21hmov dx,offset array

72、2 ; 回車換行mov ah,09hint 21hmov bx,offset array1again: mov al,bxcmp al,'$'jz donecmp al,'a'    ; 小于a和大于z的字符不是小寫字母jb nextcmp al,'z'ja nextsub al,20h    ; 在a和z之間的字符才是小寫字母,轉(zhuǎn)換為大寫mov bx,al    ; 保存到原位置next: inc bxjmp againdone: mov dx,offse

73、t array1mov ah,09hint 21hmov ax,4c00hint 21hcode endsend start3.9; (1) mov byte ptr bx,1000  ;1000超出了一個字節(jié)范圍 (2) mov bx,offset mywordsi;寄存器的值只有程序執(zhí)行時才能確定,       ;而offset是匯編過程計算偏移地址,故無法確定       ;可以改為lea bx,mywordsi (3) cmp mybyte1,my

74、byte2    ;兩個都是存儲單元,指令不允許 (4) mov al,mybyte1+mybyte2 ;變量值只有執(zhí)行時才確定,匯編過程不能計算 (5) sub al,myword          ;字節(jié)量AL與字量myword,類型不匹配 (6) jnz myword             ;Jcc指令只有相對尋址方式,

75、不支持間接尋址方式3.10; 前者為“與”操作硬指令助記符,可匯編成機器代碼。 后者為邏輯運算符,在匯編時進行“與”運算,產(chǎn)生具體數(shù)值。3.11; 注:對于邏輯運算,有關(guān)操作數(shù)可化為二進制數(shù)。 (1)mov al,23h AND 45h OR 67h          ; 67h (2)mov ax,1234h/16 + 1Oh              ;

76、 133h (3)mov ax,NOT(65535 XOR 1234h)        ; 1234h (4)mov al, LOW 1234h OR HIGH 5678h     ; 76h (5)mov ax,23h SHL 4                   ; 023

77、4h (6)mov ax, 1234h SHR 6                 ; 0048h (7)mov al,a AND (NOT(a-A) ; 41h (8)mov al,H OR 00100000b           ; 68h (9)mov ax,(76543 LT 32768) XOR 7654h&

78、#160;  ; 7654h3.12; 假設(shè)block開始的數(shù)據(jù)塊有32個字節(jié)數(shù)據(jù):16個正數(shù)+100 (64h),16個負數(shù) -48 (0doh) 分別連續(xù)分布: block      db 16 dup(100),16 dup(-48) ;也可以是任意字節(jié)數(shù)據(jù),隨意分布。 dplus      db 32 dup(?)             

79、       ;為正數(shù)預(yù)留存儲空間 dminus     db 32 dup(?)                    ;為負數(shù)預(yù)留存儲空間 count      equ 32     &

80、#160;                     ;字節(jié)數(shù)3.15; mydataseg      segment my1b      db Personal Computer my2b      db 20 my3b 

81、0;    db 14h      ;20h my4b      db 00010100b my5w      dw 20 dup(?) my6c      equ 100      ;my6c = 100 my7c      equ <Personal Comp

82、uter> mydataseg      ends3.18; 段地址:表示標(biāo)號所在代碼段的段地址; 偏移地址:表示標(biāo)號所在代碼段的段內(nèi)偏移地址; 類型:引用該標(biāo)號時,表示它所在同一個段near類型,還是另外一個段far類型。3.19; mydata    segment        ORG lO0h VARW DW l234H,5678H VARB DB 3,4        AGLIN

83、4 VARD DD 12345678H         EVEN BUFF DB 10 DUP(?) MESS DB    HELLO     MOV AX, OFFSET VARB + OFFSET MESS  ;AX = 4+16H = 1AH     MOV AX, TYFE TYPE BUFF+TYPE MESS+TYPE VARD;AX = 1+1+4 = 06H   

84、0; MOV AX,SIZE VARW+SIZE BUFF+SIZE MESS;AX = 4+10+5 = 19 = 13H     MOV AX,LENGTH VARW + LENGTH VARD    ;AX = 2+1 = 03H     MOV AX,LENGTH BUFF + SIZE VARW      ;AX = 10+4 =14 = 0EH     MOV AX,TYPE BIGIN

85、0;                  ;AX = FF02H (近)     MOV AX,OFFSET BEGIN                 ;AX = 1BH  3.22; 段定義偽指令&

86、#160; 段名    定位    組合    類別    組名 .CODE         _TEXT      WORD    PUBLIC    CODE     .DATA 

87、;        _DATA      WORD    PUBLIC    DATA    DGROUP .STACK        STACK    PARA    STACK     STACK DGROU

88、P 3.25; .model small      .stack      .data num    equ 5 datalist dw -1,0,2,5,4,?      .code      .startup       mov bx,offset datalist       mov cx,num &#

89、160;     xor ax,ax again: add ax,bx       inc bx       inc bx       loop again       mov bx,ax      .exit 0       end3.26; stack &

90、#160;    segment para stack     dw    512 dup(?) stack      ends data      segment dword array      db 100 dup(?) data      ends code  

91、    segment code assume cs:code,ds:data,es:data,ss:stack org 100h start: mov ax,data       mov ds,ax       mov es,ax           mov di,offset array       mov al,

92、64h       mov cx,100       cld       rep stosb       mov ax,4c00h       int 21h code      ends       end start3.27;解答;xt327.a

93、sm          .model    small      .stack    256         ;定義堆棧段大小為256個字節(jié)      .data anum    dd    11223344h 

94、;      ;定義兩個雙字的數(shù)(隨意) bnum    dd    77553311h sum     dd    ?               ;定義結(jié)果,執(zhí)行后為:88776655h      .code 

95、60;    .startup       xor    si, si         ;相對于變量的位移量清零       mov    cx, 2          ;分高低字分別相加,共兩次   

96、;    clc                 ;清零cf again:mov ax, anumsi    ;取第一個數(shù)的一個字(先低字后高字)       adc ax, bnumsi    ;取第二個數(shù)的一個字(先低字后高字)    

97、   mov sumsi, ax     ;存和的一個字(先低字后高字)       inc si              ;修改位移量指向下一個字(加2)       inc si       loop   

98、; again         ;cx=cx-1 ,if cx<>0 ,jump again      .exit 0       end 3.28;    .startup        xor     si, si     

99、        ;位移量清零        mov al, bdatasi        ;取第一個數(shù)        mov cx, num-1            ;累加次數(shù) again: inc

100、    si                  ;指向下一個數(shù)        adc al,    bdatasi       ;累加        loop 

101、   again              ;如未完,繼續(xù)累加        mov    sum, al             ;完了,存結(jié)果       .exit

102、 0        end4.3; 思路:設(shè)這四組從低位到高位分別放在AL、BL、CL和DL寄存器中。這里僅列出代碼段:          mov bl, al        ;將al中的兩組分開          and al, 0fh     &

103、#160; ;屏蔽高四位后送al          mov cl, 4         ;原al中的數(shù)據(jù)邏輯右移4次送bl          shr bl, cl          mov dl, ah     

104、;   ;將ah中的兩組分開          and dl, 0f0h      ;屏蔽低高四位后送dl          mov cl, 4         ;原ah中的數(shù)據(jù)邏輯右移4次送dl      &

105、#160;   shr dl, cl          mov cl, ah        ;屏蔽高四位后送cl          and cl, 0fh4.4; getkey: mov ah, 1        ;從鍵盤輸入,出口:al存鍵值  &

106、#160;        int 21h           cmp    al, a     ;判鍵值是小寫字母?           jb    getkay       &#

107、160;   cmp    al, z           ja    getkay           sub al,20h        ;是小寫字母轉(zhuǎn)換為大寫字母        

108、60;  mov ah, 09h       ;顯示           int 21h4.8; (1) 將jmp tablebx指令改為:mov dx, tablebx  (2) 去掉源程序中:.exit 0-end之間的語句4.17; .model small       .stack 256      

109、 .data stri1 db please input number:1-9,odh,oah,$        .code       .startup again: mov    dx,offset stri1   ;顯示stri1,提示輸入        mov ah,09h        i

110、nt 21h        mov ah,01h             ;調(diào)用輸入一個字符        int    21h               ;輸入一個字

111、符存在al中        cmp al, 1            ;判該字符,如不在1-9        jb    again              ;重新輸入  

112、60;     cmp al, 9        ja    again        and al,0fh             ;在1-9,屏蔽高4位        mov cx, al  &#

113、160;          ;振鈴次數(shù)送cx       .repeat        mov dl, 07h            ;調(diào)用一次振鈴        mov ah, 02h   

114、;     int 21h        mov dx ,0ffffh         ;延時 abc: dec dx        jnz abc       .untilcxz          

115、    ;cx=cx-1,cx=0 退出       .exit 0        end4.22;crazy     PROC    ;crazy      PROC           push ax  &

116、#160; ;               xor ax,ax    ;      xor ax,ax           xor dx,dx    ;      xor dx,d

117、x again:    add ax,bx    ;again:      add ax,bx           adc dx,0    ;      adc dx,0           inc bx

118、60;   ;      inc bx           inc bx    ;      inc bx           loop again    ;    &#

119、160; loop again           ret    ;      ret           ENDP crazy    ; crazy      ENDP425;子程序中又調(diào)用子程序就形成子程序嵌套。 子程序中直接或間接調(diào)用

120、該子程序本身就形成子程序遞歸。426;      .model small        .stack 256         .data stdng    db HeLLO eveRyboDy ! , 0         .code      &#

121、160; .startup         mov bx, offset atring again: mov al, bx          call chan             ;調(diào)用過程         mov bx , al n

122、ext: inc bx         jmp again  done: .exit 0  chan    proc                  ;大寫轉(zhuǎn)換為小寫字母的過程         or al,

123、al          jz done          cmp al,A         jb next         cmp al, Z         ja next    

124、;     or al, 20h         ret chan     endp         end 427;astob    proc          and dh, 0fh    ;十位數(shù)的ASCII碼轉(zhuǎn)為二進制數(shù)

125、         mov al, dh          mul 10         ;al= 10*dh          and dl, 0fh    ;個位數(shù)的ASCII碼轉(zhuǎn)為二進制數(shù)    

126、      add al, dl     ;al= 10*dh + dl          ret astob    endp51; cmp X, 5        je    abc        jmp   done

127、 abc: cmp ax, bx        jne   cde        jmp   done cde: inc ax done:.52;cmp X, 5          je    abc          jmp  

128、 done          cmp ax, bx          jne   abc          jmp   done abc:    inc ax done:   .54;宏定義采用一對偽指令實現(xiàn),格式如下(其中方括號表示可選): 宏名  

129、;  macro   形參表       宏定義體        endm 宏調(diào)用時,利用宏名帶上實參即可,格式如下:       宏名 實參表56;宏的參數(shù)功能非常強大,即可以沒有參數(shù),也可以帶有一個或多個參數(shù);而且參數(shù)的形式非常靈活,可以是常量、變量、存儲單元、指令或它們的一部分,還可以是表達式等。   宏展開時的形參與實參結(jié)合是用位置匹配的實參對形參進行取代。實

130、參個數(shù)與形參個數(shù)不同時,多余的實參沒有作用,缺少的實參則用空格代替。取代時,不進行有效性等檢查。57;宏匯編的特點是在匯編階段進行語句展開,無需返回,不減少目標(biāo)程序代碼,執(zhí)行速度沒有改變;通過形參、實參結(jié)合傳遞參數(shù)。宏匯編適合于程序段較短或要求執(zhí)行速度快的場合。    子程序在執(zhí)行階段需要由主程序執(zhí)行調(diào)用指令CALL進行調(diào)用,進而轉(zhuǎn)入子程序執(zhí)行,子程序執(zhí)行結(jié)束執(zhí)行返回指令RET返回主程序。子程序如果被多次使用,則會減少目標(biāo)程序代碼;主程序與子程序之間主要采用寄存器、存儲單元、堆棧等傳遞參數(shù)。子程序適合于程序段較長或為減少目標(biāo)代碼的場合。59;shrot word

131、ptr bx,4,ror 1     push cx 1    mov cl,4 1     ror word ptr bx,cl 1     pop cx5.10;logical     macro lcode,dopd,sopd             lcode dopd,sopd  

132、;           endm 例如,如果使用“and ax,bx”指令,可以利用該宏定義,寫出宏指令如下:      logical and,ax,bx 初看起來,這個問題似乎比較難解決。實際上,這4條邏輯指令都具有相同的指令操作數(shù)格式,所以可以歸納為如上宏定義。5.12; move     MACRO doprnd,soprnd      push ax  &#

133、160;   mov ax,soprnd      mov doprnd,ax      pop ax      ENDM                                       

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論