匯編課后答案_第1頁
匯編課后答案_第2頁
匯編課后答案_第3頁
匯編課后答案_第4頁
匯編課后答案_第5頁
已閱讀5頁,還剩65頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、1、 什么是堆棧?他的工作原則是什么?它的基本操作有哪兩個?對應哪兩種指令? 堆棧是一種按“先進后出”原則存取數據的存儲區域。 堆棧的兩種基本操作是壓棧和出棧,對應的指令是PUSH和POP。第2章 8086的指令系統習題2.1已知DS2000H、BX0100H、SI0002H,存儲單元20100H20103H依次存放12 34 56 78H,21200H21203H依次存放2A 4C B7 65H,說明下列每條指令執行完后AX寄存器的內容。(1) mov ax,1200h(2) mov ax,bx(3) mov ax,1200h(4) mov ax,bx(5) mov ax,bx+1100h(

2、6) mov ax,bx+si(7) mov ax,bxsi+1100h解答(1)AX1200H(2)AX0100H(3)AX4C2AH   ;偏移地址=bx=0100h(4)AX3412H    ;偏移地址=bx=0100h(5)AX4C2AH   ;偏移地址=bx+1100h=1200h(6)AX7856H    ;偏移地址=bx+si=0100h+0002h=0102h(7)AX65B7H    ;偏移地址=bx+si+1100h=0100h+0002h+11

3、00h=1202h 習題2.2指出下列指令的錯誤(1) mov cx,dl(2) mov ip,ax(3) mov es,1234h(4) mov es,ds(5) mov al,300(6) mov sp,ax(7) mov ax,bx+di(8) mov 20h,ah解答(1)兩操作數類型不匹配(2)IP指令指針禁止用戶訪問(3)立即數不允許傳給段寄存器(4)段寄存器之間不允許傳送(5)兩操作數類型不匹配(6)目的操作數應為 SI (7)源操作數應為 BX+DI  (8)立即數不能作目的操作數習題2.3已知數字0 9對應的格雷碼依次為:18H、34H、05H、06H、0

4、9H、0AH、0CH、11H、12H、14H,它存在于以table為首地址(設為200H)的連續區域中。請為如下程序段的每條指令加上注釋,說明每條指令的功能和執行結果。            lea bx,table           mov al,8           xlat解答 

5、          lea bx,table          ;獲取table的首地址,BX200H           mov al,8               ;傳送欲轉

6、換的數字,AL8           xlat                       ;轉換為格雷碼,AL12H  P35習題2.4什么是堆棧,它的工作原則是什么,它的基本操作有哪兩個,對應哪兩種指令? 解答堆棧是一種按“先進后出”原則存取數據的存儲區域,位于堆棧

7、段中,使用SS段寄存器記錄其段地址;它的工作原則是先進后出;堆棧的兩種基本操作是壓棧和出棧,對應的指令是PUSH和POP。習題2.5已知SS = 2200H、SP = 00B0H,畫圖說明執行下面指令序列時,堆棧區和SP的內容如何變化?            mov ax,8057h           push ax      

8、0;    mov ax,0f79h             push ax           pop bx           pop bx解答         &#

9、160; mov ax,8057h           push ax           mov ax,0f79h           push ax           pop bx &

10、#160;              ;bx=0f79h           pop bx              ;DS:0f79h=8057h 習題2.6給出下列各條指令執行后AL值,以及CF、ZF、SF、OF和PF的狀態:

11、           mov al,89h           add al,al           add al,9dh           cmp al,0bch  

12、0;        sub al,al           dec al           inc al解答mov al,89h           ; AL=89h   CF  ZF 

13、SF  OF  PFadd al,al               ; AL=12h   1   0   0   1   1; 1000 1001+1000 1001 10001 0010  add al,9dh          

14、0;   ; AL=0afh  0   0   1   0   1; 0001 0010+ 1001 1101  1010 1111  cmp al,0bch          ; AL=0afh  1   0   1   0   1; 1010 1111-1011 1100* 0100 0011&

15、#160;sub al,al                AL=00h   0   1   0   0   1 dec al                   ; AL=0ff

16、h  0   0   1   0   1; 0000 0000- 0000 0001 *1111 1111 inc al                    ; AL=00h   0   1   0   0 

17、  1;1111 1111+0000 0001*1111 1111 習題2.7設X、Y、Z均為雙字數據,分別存放在地址為X、X+2;Y、Y+2;Z、Z+2的存儲單元中,它們的運算結果存入W單元。閱讀如下程序段,給出運算公式。            mov ax,X           mov dx,X+2      &

18、#160;     add ax,Y           adc dx,Y+2            add ax,24           adc dx,0       

19、0;    sub ax,Z           sbb dx,Z+2            mov W,ax           mov W+2,dx 解答        WX+

20、Y+24-Z習題2.8請分別用一條匯編語言指令完成如下功能: (1)把BX寄存器和DX寄存器的內容相加,結果存入DX寄存器。(2)用寄存器BX和SI的基址變址尋址方式把存儲器的一個字節與AL寄存器的內容相加,并把結果送到AL中。(3)用BX和位移量0B2H的寄存器相對尋址方式把存儲器中的一個字和CX寄存器的內容相加,并把結果送回存儲器中。(4)用位移量為0520H的直接尋址方式把存儲器中的一個字與數3412H相加,并把結果送回該存儲單元中。(5)把數0A0H與AL寄存器的內容相加,并把結果送回AL中。解答(1)ADD DX,BX(2)ADD AL,BX+SI(3)ADD BX+0B2H,CX(

21、4)ADD WORD PTR 0520H,3412H(5)ADD AL,0A0H習題2.9設X、Y、Z、V均為16位帶符號數,分別裝在X、Y、Z、V存儲單元中,閱讀如下程序段,得出它的運算公式,并說明運算結果存于何處。            mov ax,X     ;ax=X           imul Y    

22、   ;DX.AX=X*Y            mov cx,ax    ;cx=X*Y的低16位           mox bx,dx    ;bx=X*Y的高16位            mo

23、v ax,Z      ax=Z           cwd           add cx,ax    ;cx=Z的低16位+X*Y的低16位           adc bx,dx   

24、0;bx=Z的高16位+X*Y的高16位+低位進位            sub cx,540   ;cx=Z的低16位+X*Y的低16位-540           sbb bx,0       bx=Z的高16位+X*Y的高16位+低位進位-低位借位    

25、0;       mov ax,V      ;ax=V           cwd           sub ax,cx     ax=V的低16位-(Z的低16位+X*Y的低16位-540)     &#

26、160;    sbb dx,bx     dx=V的高16位-(Z的高16位+X*Y的高16位+低位進位-低位借位)-低位借位           idiv X ;/X解答       V-(X*Y+Z-540)/X       AX存商,DX存余數 習題2.10指出下列指令的錯誤: (1) xchg si

27、,30h(2) pop cs(3) sub si,di(4) push ah(5) adc ax,ds(6) add si,80h(7) in al,3fch(8) out dx,ah解答(1)xchg的操作數不能是立即數(2)不應對CS直接賦值(3)兩個操作數不能都是存儲單元(4)堆棧的操作數不能是字節量(5)adc的操作數不能是段寄存器(6)沒有確定是字節還是字操作(7)in不支持超過FFH的直接尋址(8)out只能以AL/AX為源操作數習題2.11給出下列各條指令執行后的結果,以及狀態標志CF、OF、SF、ZF、PF的狀態。      &

28、#160;     mov ax,1470h           and ax,ax           or ax,ax           xor ax,ax        &

29、#160;  not ax           test ax,0f0f0h解答                                  &

30、#160;                       mov ax,1470h          ;AX1470H CF  ZF  SF  OF  PF         

31、;                                                  

32、0;   and ax,ax                 ;AX1470H 0   0   0   0   0            ;0001 0100 0111 0000     &

33、#160;      or ax,ax                   ;AX1470H 0   0   0   0   0           xor ax,ax  

34、0;              ;AX0000H 0   1   0   0   1           not ax               &

35、#160;      ;AXFFFFH 0   1   0   0   1           test ax,0f0f0h         ;AXFFFFH 0   0   1   0   1注意:MOV和NOT指令不影響標志位

36、;其他邏輯指令使CFOF0,根據結果影響其他標志位。習題2.12假設例題2.32的程序段中,AX = 08H,BX = 10H,請說明每條指令執行后的結果和各個標志位的狀態。 解答           指令               執行結果          

37、60;          CF OF SF ZF PF           mov si,ax    ; SI=AX=0008H                -     -  &

38、#160;   -   -     -           shl si,1        ; SI=2*AX=0010H             0    0    0

39、    0    0           add si,ax     ; SI=3*AX=0018H             0    0    0    0    1

40、           mov dx,bx    DX=BX=0010H              0    0    0    0    1        &#

41、160;   mov cl,03h   CL=03H                         0    0    0    0    1    

42、0;       shl dx,cl       ; DX=8*BX=0080H          0    u    0    0    0            sub dx,bx

43、60;   ; DX=7*BX=0070H           0    0    0    0    0           add dx,si      DX=7*BX+3*AX=0088H  0

44、    0    0    0    1注意:邏輯左移N次相當于無符號整數乘以2的N次方,邏輯右移N次相當于無符號整數除以2的N次方。移位指令根據移位的數據設置CF,根據移位后的結果影響SF,ZF,PF。在進行一位移位時,根據最高符號位是否改變設置OF,如改變則OF1。另外,程序注釋用“u”表示標志無定義(不確定),“-”表示無影響。習題2.13編寫程序段完成如下要求: (1)用位操作指令實現AL(無符號數)乘以10(2)用邏輯運算指令實現數字0 9的ASCII碼與非壓縮BC

45、D碼的互相轉換(3)把DX.AX中的雙字右移4位解答(1) 不考慮進位                   mov bl,al           mov cl,3           shl al,cl &#

46、160;             ;*8           add al,bl             ;shl bl,1            

47、add al,bl           ;考慮進位           xor ah,ah           mov bx,ax           mov cl,3  

48、0;        shl ax,cl           add ax,bx             ;shl bx,1           add ax,bx(2)數字09的ASCII碼是:30h39h&#

49、160;       非壓縮BCD碼的09是:00h09h方法一:           and al,0fh            ;實現ASCII到非壓縮BCD碼的轉換           or al,30h 

50、0;           ;實現非壓縮BCD碼到ASCII的轉換方法二:           xor al,30h            ;求反D5D4位,其他不變           ;即

51、高4位為3,則變為0;高4位為0,則變為3(3)   mov cl,4again:  shr dx,1              ;實現邏輯右移                        

52、;                 ;采用“sar dx,1”,則實現算術右移             rcr ax,1             dec cl  

53、0;          jnz again習題2.14已知AL = F7H(表示有符號數-9),分別編寫用SAR和IDIV指令實現的除以2的程序段,并說明各自執行后,所得的商是什么? 解答(1)用sar編寫           mov al,0f7h           ; -9送AL 1111 1001 &

54、#160;         sar al,1              ; 結果:AL=1111 1100B=0FBH  即-5(2)用idiv編寫           mov al,0f7h       &#

55、160;   ; -9送al           cbw                   ; 字節符號擴展位字           mov bl,2    

56、          ; 注意除數不可為立即數           idiv bl               ; 結果:商為al=fch  (-4)         &#

57、160;                      ; 余數:ah=ffh (-1) 結論:符號數的除法用idiv 準確。  習題2.15已知數據段500h 600h處存放了一個字符串,說明下列程序段執行后的結果:           mov si,600h  

58、;         mov di,601h           mov ax,ds           mov es,ax           mov cx,256    

59、0;      std           rep movsb解答 習題2.16說明下列程序段的功能           cld           mov ax,0fefh     

60、60;     mov cx,5           mov bx,3000h           mov es,bx           mov di,2000h        

61、   rep stosw解答 將es:di (即3000:2000h或32000h)開始的5個單元的內容置為0fefh。習題2.17指令指針IP是通用寄存器還是專用寄存器?有指令能夠直接它賦值嗎?哪類指令的執行會改變它的值? 解答指令指針IP不是通用寄存器,不可直接賦值,屬于專用寄存器。有且僅有循環、轉移、子程序調用和返回、中斷類等指令可以改變它的值。習題2.18控制轉移類指令中有哪三種尋址方式? 解答控制轉移類指令的尋址方式:相對尋址、直接尋址方式和間接尋址方式(又可以分成寄存器和存儲器間接尋址)。習題2.19什么是短轉移short jump、近轉移near j

62、ump和遠轉移far jump?什么是段內轉移和段間轉移?8086有哪些指令可以實現段間轉移? 解答短轉移:指段內128127之間的轉移,位移量用一個字節表示近轉移:指段內±32K之間的轉移,位移量用一個字表示遠轉移:指段間1MB范圍的轉移段內轉移:指在同一個代碼段內的轉移,可以是短轉移或者近轉移段間轉移:指轉移到另外一個代碼段,就是遠轉移8086/8088CPU的JMP、CALL和INT n指令可以實現段間轉移習題2.208086的條件轉移指令的轉移范圍有多大?實際編程時,你如何處理超出范圍的條件轉移? 解答8086的條件轉移的轉移范圍:在當前指令地址的 +127-128之內。如條

63、件轉移的轉移范圍超出此范圍,可在此范圍內安排一條無條件轉移,再轉移到范圍外的目標地址。習題2.21假設DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,232F7H=3280H,264E5H=2450H,試問執行下列段內間接尋址的轉移指令后,轉移的有效地址是什么? (1) JMP BX(2) JMP TABLEBX(3) JMP BXSI解答(1)轉移的有效地址EA= BX=1256H(2)轉移的有效地址EA= DS:20A1H+1256H=232F7=3280H(3)轉移的有效地址EA= DS:1256H+528FH=264E5H=2450H習題2.22判斷

64、下列程序段跳轉的條件            (1) xor ax,1e1eh                       je equal           (2)test al,1000

65、0001b                     jnz there           (3)cmp cx,64h                

66、     jb there解答(1)AX1e1eh(異或后為0)(2)AL的D0或D7至少有一位為1(3)CX(無符號數) 64h習題2.23設置CX = 0,則LOOP指令將循環多少次?例如:              mov cx,0delay:   loop delay解答   216次。習題2.24假設AX和SI存放的是有符號數,DX和DI存放的是無符號數,請用比較指令

67、和條件轉移指令實現以下判斷: (1)若DX > DI,轉到above執行;(2)若AX > SI,轉到greater執行;(3)若CX = 0,轉到zero執行;(4)若AXSI產生溢出,轉到overflow執行;(5)若SIAX,轉到less_eq執行;(6)若DIDX,轉到below_eq執行。解答(1)若DX > DI,轉到above執行           cmp dx,di        

68、   ja above              ;jnbe above(2)若AX > SI,轉到greater執行           cmp ax,si           jg greater   

69、0;        ;jnle greater(3)若CX = 0,轉到zero執行           cmp cx,0           jz zero               ;

70、 jcxz zero   (4)若AXSI產生溢出,轉到overflow執行;           cmp ax,si           jo overflow(5)若SIAX,轉到less_eq執行;           cmp si,ax   

71、          ; cmp ax,si           jle less_eq           ; jge less_eq(6)若DIDX,轉到below_eq執行。           cmp d

72、i,dx             ; cmp dx,di           jbe below_eq          ; jae below_eq習題2.25有一個首地址為array的20個字的數組,說明下列程序段的功能。      &

73、#160;     mov cx,20           mov ax,0           mov si,axsum_loop:  add ax,arraysi           add si,2    

74、;       loop sum_loop           mov total,ax解答將首地址為array得20個字的數組求和,并將結果存入 total 單元中。習題2.26按照下列要求,編寫相應的程序段: (1)起始地址為string的主存單元中存放有一個字符串(長度大于6),把該字符串中的第1個和第6個字符(字節量)傳送給DX寄存器。(2)從主存buffer開始的4個字節中保存了4個非壓縮BCD碼,現按低(高)地址對低(高)位

75、的原則,將它們合并到DX中。(3)編寫一個程序段,在DX高4位全為0時,使AX = 0;否則使AX = -1。(4)有兩個64位數值,按“小端方式”存放在兩個緩沖區buffer1和buffer2中,編寫程序段完成buffer1buffer2功能。(5)假設從B800h : 0開始存放有100個16位無符號數,編程求它們的和,并把32位的和保存在DX.AX中。(6)已知字符串string包含有32KB內容,將其中的$符號替換成空格。(7)有一個100個字節元素的數組,其首地址為array,將每個元素減1(不考慮溢出)存于原處。(8)統計以 $ 結尾的字符串srting的字符個數。解答(1)解答:

76、           mov si,0           mov dl,stringsi   ;第1個字符送dl寄存器:mov dl,stirng0           mov si,5       

77、0;   mov dh,stringsi   ;第6個字符送dh寄存器:mov dl,stirng5(2)解答:           xor si,si           ;si清零           mov al,buffersi  

78、 ;第一字節           inc si           mov ah,buffersi   ;第二字節           mov cl,4           shl

79、 ah,cl             ;BCD碼移到高半字節           or al,ah              ;組合成壓縮BCD碼        

80、0;  mov dl,al                   ;存入dl寄.           inc si           mov al,buffersi   ;第三字節 

81、;          inc si           mov ah,buffersi   ;第四字節           mov cl,4           shl ah,cl 

82、;            ;BCD碼移到高半字節           or al,ah              ;組合成壓縮BCD碼           mo

83、v dh,al             ;存入dh寄.(3)解答:           test dx,0f000h        ; test dh,0f0h           jz next &

84、#160;             ; jnz next           mov ax,-1             ; mov ax,0          

85、; jmp againnext:  mov ax,0              ; mov ax,0ffffhagain:     .(4)解答:           mov ax, word ptr buffer1        

86、;   sub ax, word ptr buffer2     ;先減低16位           mov dx, word ptr buffer1+2           sbb dx, word ptr buffer2+2   ;后減高16位,需減低16位的借位(5)解答:   &#

87、160;       mov ax,0b800h             mov ds,ax       ;段地址             xor si,si       ;地址偏

88、移量si=0             xor dx,dx       ;和的高字dx=0             mov cx,99       ;加的次數        

89、;     mov ax,si     ;第一個數again:  inc si           ;指向下一個字單元             inc si            

90、add ax,si     ;加下一個數            jnc  noc         ;無進位轉            inc dx         

91、;  ;有進位dx=dx+1     noc:  dec cx           ;次數-1            jnz cx,again    ;非0繼續加 (6)解答1:不使用串操作指令(更好)        &

92、#160;  mov si,offset string           mov cx,8000h              ; 32k=215=8000h again:     cmp byte ptr si, $   ;$ 24h     &#

93、160;     jnz next                  ; 不要采用 jz 進行分支            mov byte ptr si,     ; 20hnext:      inc si 

94、          loop again                ; dec cx                       

95、60;            ; jnz again(6)解答2:使用串操作指令           mov di,offset string           mov al,$          

96、 mov cx,8000h           cldagain:     scasb           jnz next           mov byte ptr es : di-1,    next:  

97、60;   loop again(7)解答1:           mov si,offset array              mov cx,100again:     dec byte ptr si         

98、60; inc si           loop again(7)解答2:           xor si,si                ; si<-0       

99、0;   mov cx,100               ; 循環次數 again:    dec arraysi           inc si           loop again(7)解答3:&#

100、160;          mov si,offset array           mov di,si           mov ax,ds              

101、60;       mov es,ax           mov cx,100           cldagain:  lodsb             dec al   &

102、#160;       stosb           loop again(8)解答:           xor si,si               si<-0coun:  &

103、#160;   cmp stringsi,'$'           je  done           inc si           jmp coundone:      .  

104、0;                             習題2.27對下面要求,分別給出3種方法,每種方法只用一條指令。 (1)使CF=0    (2)使AX=0    (3)同時使AX=0和CF=0解答(1)解答:  &#

105、160;      clc         and ax,ax         or ax,ax(2)解答:         xor ax,ax         and ax,0    &#

106、160;    mov ax,0(3)解答:         and ax,0         xor ax,ax         sub ax,ax習題2.28參照本習題的示意圖,分析調用序列,畫出每次調用及返回時的堆棧狀態。其中CALL前是該指令所在的邏輯地址;另外,段內直接調用指令的機器代碼的字節數為3,段間直接調用指令則

107、為5個字節。 解答主程序轉子suba時段內調用:斷點1為2000h:0400h+3,轉子是只將IP壓棧。suba轉子subb時段間調用:斷點2為2000h:0840h+5, 轉子時須將cs段地址和IP壓棧suba轉子subc時段內調用:斷點3為2000h:0c021h+3,轉子是只將IP壓棧。注:壓棧時先修改sp再壓入斷點,彈棧時先彈出斷點再修改sp。習題2.29已知AX 、BX存放的是4位壓縮BCD表示的十進制數,請說明如下子程序的功能和出口參數。            add al,bl&#

108、160;          daa           xchg al,ah           adc al,bh           daa     

109、60;     xchg al,ah           ret解答     壓縮BCD碼加法:AXAXBX    出口參數:AXBCD碼和習題2.30AAD指令是用于除法指令之前,進行非壓縮BCD碼調整的。實際上,處理器的調整過程是:ALAH×10AL,AH0。如果指令系統沒有AAD指令,請用一個子程序完成這個調整工作。 解答    &

110、#160;      shl ah,1         ah=2*a  (設原ah=a)             mov dl,ah        dl=2*a          

111、   mov cl,2         設定移位次數             shl ah,cl        ah=8*a             add ah,dl 

112、       ah=10*a             add al,ah        al=10*a+al             xor ah,ah       &#

113、160;清零ah             int 3             返回DOS      注意: 入口:AX中存放有“和”(兩非壓縮BCD碼)            出口:AL中 已為調整后

114、的二進制數習題2.31解釋如下有關中斷的概念: (1) 內部中斷和外部中斷(2) 單步中斷和斷點中斷(3) 除法錯中斷和溢出中斷(4) 中斷向量號和中斷向量表解答(1)內部中斷是由于8086CPU內部執行程序引起的程序中斷;外部中斷是來自8086CPU之外的原因引起的程序中斷;(2)單步中斷是若單步標志TF為1,則在每條指令執行結束后產生的中斷;斷點中斷是供調試程序使用的,它的中斷類型號為3通常調試程序時,把程序按程序的任務分成幾段,然后,每段設一個段點;(3)除法錯中斷是在執行除法指令時,若除數為0或商超過了寄存器所能表達的范圍產生的中斷;溢出中斷是在執行溢出中斷指令INTO時,若溢出標志O

115、F為1時產生的中斷;(4)中斷向量號是 中斷類型號;中斷向量表是中斷向量號與它所對應的中斷服務程序起始地址的轉換表。習題2.32試比較INT n和段間CALL指令、IRET和段間RET指令的功能。 解答INT n 響應中斷時,除象CALL保護斷點外,還應保護FR;段間CALL指令用在主程序中實現子程序的調用。IRET 返回時,除象RET恢復斷點外,還應恢復FR;子程序執行完成后,應返回主程序中繼續執行,這一功能由RET指令完成。 習題2.33什么是系統功能調用?匯編語言中,它的一般格式是怎樣的? 解答系統功能調用是用戶在程序一級請示操作系統服務的一種手段,它不是一條簡單的硬指令,而是帶有一定功

116、能號的“訪指令”,它的功能并非由硬件直接提供,而是由操作系統操作系統中的一段程序完成的,即由軟件方法實現的匯編語言中,它的一般格式是分如下四步進行:(1)在AH寄存器置系統功能調用號;(2)在指定的寄存器中設置 入口參數;(3)用INT21H(或ROMBIOS的中斷向量號)指令執行功能調用;(4)據出口參數分析功能調用運行情況。習題2.34補充例2.40,當有溢出時顯示“Error! Overflow!”,無溢出時顯示“OK”。 解答okmsg      db OK, $errmsg     db Err

117、or ! Overflow !, $                                        mov ax,X          

118、;      sub ax,Y                jo overflow                mov dx,offset okmsg        

119、        jmp nextoverflow:  mov dx,errmsg    next:      mov ah,9                   int 21h錯誤解答:      

120、       mov ax,X             sub ax,Y             jo overflow             mov dx,offset okmsg  &

121、#160;     okmsg  db OK, $                  mov dx,errmsg                        

122、       錯誤1:數據定義在代碼中               mov ah,9               int 21hoverflow:  errmsg db Error ! Overflow !, $    

123、                  mov dx,errmsg                                錯誤2:缺少J

124、MP指令           mov ah,9           int 21h習題2.35補充例2.42,顯示“1”的個數;注意首先將個數轉換為ASCII碼。 解答             and al,7fh      ;使

125、d7=0             mov dl,al        ;轉存于dl             jnp next         ;奇數個1轉       &#

126、160;       or al,80h         ;偶數個1 使d7=1     next:   xor bl,bl       ;紀錄1的個數 dl=0             mov cx,8   

127、       ;移位次數     again:  shl dl,1         ;邏輯左移1次             jnc desp           ;如cf=0 轉 

128、            inc bl                 ;否則cf=1 個數加1    desp:   loop again     ;cx=cx-1 如cx不等于0,循環   

129、0;        or bl,30h             ;個數變為ASCII碼            mov ah,02h        ;在CRT上顯示個數     &#

130、160;      mov dl,bl            int 21h            ret習題2.36先提示輸入數字“Input Number:0 9”,然后在下一行顯示輸入的數字,結束;如果不是鍵入了0 9數字,就提示錯誤“Error!”,繼續等待輸入數字。 解答    

131、       ; 數據段str1       db 'Input Number:09 : ',0dh,0ah,'$'  str2       db 'Error!',0dh,0ah,'$'            ; 代碼段   

132、;         mov ah,09h            ; 顯示str1字符串           mov dx,offset str1           int 21hgetkey: &#

133、160;  mov ah,1              ; 調用DOS功能             int 21h           cmp  al,'0'     

134、60;      jb error              ; 小于0,出錯處理           cmp al,'9'           ja error              ; 大于9,出錯處理       

溫馨提示

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

評論

0/150

提交評論