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

下載本文檔

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

文檔簡介

1、 第2章 8086的指令系統(tǒng)習題2.1已知DS2000H、BX0100H、SI0002H,存儲單元20100H20103H依次存放12 34 56 78H,21200H21203H依次存放2A 4C B7 65H,說明下列每條指令執(zhí)行完后AX寄存器的內(nèi)容。(1) mov ax,1200h(2) mov ax,bx(3) mov ax,1200h(4) mov ax,bx(5) mov ax,bx+1100h(6) mov ax,bx+si(7) mov ax,bxsi+1100h解答(1)AX1200H(2)AX0100H(3)AX4C2AH   ;偏移地址=bx=0100

2、h(4)AX3412H    ;偏移地址=bx=0100h(5)AX4C2AH   ;偏移地址=bx+1100h=1200h(6)AX7856H    ;偏移地址=bx+si=0100h+0002h=0102h(7)AX65B7H    ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h 習題2.2指出下列指令的錯誤(1) mov cx,dl(2) mov ip,ax(3) mov es,1234h(4) mov es,ds(5) mov al

3、,300(6) mov sp,ax(7) mov ax,bx+di(8) mov 20h,ah解答(1)兩操作數(shù)類型不匹配(2)IP指令指針禁止用戶訪問(3)立即數(shù)不允許傳給段寄存器(4)段寄存器之間不允許傳送(5)兩操作數(shù)類型不匹配(6)目的操作數(shù)應(yīng)為 SI (7)源操作數(shù)應(yīng)為 BX+DI  (8)立即數(shù)不能作目的操作數(shù)習題2.3已知數(shù)字0 9對應(yīng)的格雷碼依次為:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table為首地址(設(shè)為200H)的連續(xù)區(qū)域中。請為如下程序段的每條指令加上注釋,說明每條指令的功能和執(zhí)行結(jié)果。  

4、60;         lea bx,table           mov al,8           xlat解答           lea bx,table    

5、60;     ;獲取table的首地址,BX200H           mov al,8               ;傳送欲轉(zhuǎn)換的數(shù)字,AL8           xlat   

6、60;                   ;轉(zhuǎn)換為格雷碼,AL12H  P35習題2.4什么是堆棧,它的工作原則是什么,它的基本操作有哪兩個,對應(yīng)哪兩種指令? 解答堆棧是一種按“先進后出”原則存取數(shù)據(jù)的存儲區(qū)域,位于堆棧段中,使用SS段寄存器記錄其段地址;它的工作原則是先進后出;堆棧的兩種基本操作是壓棧和出棧,對應(yīng)的指令是PUSH和POP。習題2.5已知SS = 2200H、SP = 00B0H,畫圖說明

7、執(zhí)行下面指令序列時,堆棧區(qū)和SP的內(nèi)容如何變化?            mov ax,8057h           push ax           mov ax,0f79h           

8、  push ax           pop bx           pop bx解答           mov ax,8057h           push ax 

9、60;         mov ax,0f79h           push ax           pop bx                ;bx=0f79h&

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

11、;       add al,al           add al,9dh           cmp al,0bch           sub al,al      

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

13、;    ; AL=12h   1   0   0   1   1; 1000 1001+1000 1001 10001 0010  add al,9dh              ; AL=0afh  0   0   1   0   1; 0001 0010

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

15、#160; AL=00h   0   1   0   0   1 dec al                   ; AL=0ffh  0   0   1   0   1; 0000 0000- 0000 0001 *

16、1111 1111 inc al                    ; AL=00h   0   1   0   0   1;1111 1111+0000 0001*1111 1111 習題2.7 解答       

17、 WX+Y+24-Z習題2.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解答       V-(X*Y+Z-540)/X       AX存商,DX存余數(shù) 習題2.10解答(1)xchg的操作數(shù)不能是立即數(shù)(2)不應(yīng)對CS直接賦值(3)兩個操作數(shù)不能都是存儲單元(4)堆棧的操作數(shù)不能是字節(jié)量(5)adc的操作數(shù)不能是段寄存器(6)沒有確

18、定是字節(jié)還是字操作(7)in不支持超過FFH的直接尋址(8)out只能以AL/AX為源操作數(shù)習題2.11            mov ax,1470h          ;AX1470H CF  ZF  SF  OF  PF            

19、                                                   and

20、ax,ax                 ;AX1470H 0   0   0   0   0            ;0001 0100 0111 0000        &#

21、160;   or ax,ax                   ;AX1470H 0   0   0   0   0           xor ax,ax      

22、;           ;AX0000H 0   1   0   0   1           not ax                  &#

23、160;   ;AXFFFFH 0   1   0   0   1           test ax,0f0f0h         ;AXFFFFH 0   0   1   0   1注意:MOV和NOT指令不影響標志位;其他邏輯指令使CFOF0,根據(jù)結(jié)果影

24、響其他標志位。習題2.12假設(shè)例題2.34的程序段中,AX = 08H,BX = 10H,請說明每條指令執(zhí)行后的結(jié)果和各個標志位的狀態(tài)。 解答           指令               執(zhí)行結(jié)果             

25、0;       CF OF SF ZF PF           mov si,ax    ; SI=AX=0008H                -     -      -

26、   -     -           shl si,1        ; SI=2*AX=0010H             0    0    0    

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

28、#160;       mov dx,bx    DX=BX=0010H              0    0    0    0    1            mo

29、v cl,03h   CL=03H                         0    0    0    0    1        

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

31、X=7*BX=0070H           0    0    0    0    0           add dx,si      DX=7*BX+3*AX=0088H  0   

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

33、字右移4位解答(1) 不考慮進位                   mov bl,al           mov cl,3           shl al,cl    

34、60;          ;*8           add al,bl             ;shl bl,1             add al,bl 

35、0;         ;考慮進位           xor ah,ah           mov bx,ax           mov cl,3      

36、;     shl ax,cl           add ax,bx             ;shl bx,1           add ax,bx(2)數(shù)字09的ASCII碼是:30h39h   

37、60;    非壓縮BCD碼的09是:00h09h方法一:           and al,0fh            ;實現(xiàn)ASCII到非壓縮BCD碼的轉(zhuǎn)換           or al,30h     

38、;        ;實現(xiàn)非壓縮BCD碼到ASCII的轉(zhuǎn)換方法二:           xor al,30h            ;求反D5D4位,其他不變           ;即高4位為3,則變?yōu)?;高4位為0,則變

39、為3(3)   mov cl,4again:  shr dx,1              ;實現(xiàn)邏輯右移                           

40、              ;采用“sar dx,1”,則實現(xiàn)算術(shù)右移             rcr ax,1             dec cl      

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

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

43、-9送al           cbw                   ; 字節(jié)符號擴展位字           mov bl,2       &

44、#160;      ; 注意除數(shù)不可為立即數(shù)           idiv bl               ; 結(jié)果:商為al=fch  (-4)            

45、60;                   ; 余數(shù):ah=ffh (-1) 結(jié)論:符號數(shù)的除法用idiv 準確。  習題2.15指令指針I(yè)P是通用寄存器還是專用寄存器?有指令能夠直接它賦值嗎?哪類指令的執(zhí)行會改變它的值? 解答指令指針I(yè)P不是通用寄存器,不可直接賦值,屬于專用寄存器。有且僅有循環(huán)、轉(zhuǎn)移、子程序調(diào)用和返回、中斷類等指令可以改變它的值。習題2.16控制轉(zhuǎn)移類指令中有哪三種尋址方式? 解答控制轉(zhuǎn)

46、移類指令的尋址方式:相對尋址、直接尋址方式和間接尋址方式(又可以分成寄存器和存儲器間接尋址)。習題2.17什么是短轉(zhuǎn)移short jump、近轉(zhuǎn)移near jump和遠轉(zhuǎn)移far jump?什么是段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移?8086有哪些指令可以實現(xiàn)段間轉(zhuǎn)移? 解答短轉(zhuǎn)移:指段內(nèi)128127之間的轉(zhuǎn)移,位移量用一個字節(jié)表示近轉(zhuǎn)移:指段內(nèi)±32K之間的轉(zhuǎn)移,位移量用一個字表示遠轉(zhuǎn)移:指段間1MB范圍的轉(zhuǎn)移段內(nèi)轉(zhuǎn)移:指在同一個代碼段內(nèi)的轉(zhuǎn)移,可以是短轉(zhuǎn)移或者近轉(zhuǎn)移段間轉(zhuǎn)移:指轉(zhuǎn)移到另外一個代碼段,就是遠轉(zhuǎn)移8086/8088CPU的JMP、CALL和INT n指令可以實現(xiàn)段間轉(zhuǎn)移習題2.1880

47、86的條件轉(zhuǎn)移指令的轉(zhuǎn)移范圍有多大?實際編程時,你如何處理超出范圍的條件轉(zhuǎn)移? 解答8086的條件轉(zhuǎn)移的轉(zhuǎn)移范圍:在當前指令地址的 +127-128之內(nèi)。如條件轉(zhuǎn)移的轉(zhuǎn)移范圍超出此范圍,可在此范圍內(nèi)安排一條無條件轉(zhuǎn)移,再轉(zhuǎn)移到范圍外的目標地址。習題2.19假設(shè)DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,232F7H=3280H,264E5H=2450H,試問執(zhí)行下列段內(nèi)間接尋址的轉(zhuǎn)移指令后,轉(zhuǎn)移的有效地址是什么? (1) JMP BX(2) JMP TABLEBX(3) JMP BXSI解答(1)轉(zhuǎn)移的有效地址EA= BX=1256H(2)轉(zhuǎn)移的有效地址

48、EA= DS:20A1H+1256H=232F7=3280H(3)轉(zhuǎn)移的有效地址EA= DS:1256H+528FH=264E5H=2450H習題2.20判斷下列程序段跳轉(zhuǎn)的條件            (1) xor ax,1e1eh                       je eq

49、ual           (2)test al,10000001b                     jnz there           (3)cmp cx,64h   

50、;                  jb there解答(1)AX1e1eh(異或后為0)(2)AL的D0或D7至少有一位為1(3)CX(無符號數(shù)) 64h習題2.21設(shè)置CX = 0,則LOOP指令將循環(huán)多少次?例如:              mov cx,0delay:  

51、; loop delay解答   216次。習題2.22假設(shè)AX和SI存放的是有符號數(shù),DX和DI存放的是無符號數(shù),請用比較指令和條件轉(zhuǎn)移指令實現(xiàn)以下判斷: (1)若DX > DI,轉(zhuǎn)到above執(zhí)行;(2)若AX > SI,轉(zhuǎn)到greater執(zhí)行;(3)若CX = 0,轉(zhuǎn)到zero執(zhí)行;(4)若AXSI產(chǎn)生溢出,轉(zhuǎn)到overflow執(zhí)行;(5)若SIAX,轉(zhuǎn)到less_eq執(zhí)行;(6)若DIDX,轉(zhuǎn)到below_eq執(zhí)行。解答(1)若DX > DI,轉(zhuǎn)到above執(zhí)行      

52、60;    cmp dx,di           ja above              ;jnbe above(2)若AX > SI,轉(zhuǎn)到greater執(zhí)行           cmp ax,si  &#

53、160;        jg greater            ;jnle greater(3)若CX = 0,轉(zhuǎn)到zero執(zhí)行           cmp cx,0           jz zero &

54、#160;             ; jcxz zero   (4)若AXSI產(chǎn)生溢出,轉(zhuǎn)到overflow執(zhí)行;           cmp ax,si           jo overflow(5)若SIAX,轉(zhuǎn)到less_eq執(zhí)行; 

55、60;         cmp si,ax             ; cmp ax,si           jle less_eq           ; jge less_eq(6)若DIDX,

56、轉(zhuǎn)到below_eq執(zhí)行。           cmp di,dx             ; cmp dx,di           jbe below_eq          ; jae

57、 below_eq習題2.23有一個首地址為array的20個字的數(shù)組,說明下列程序段的功能。            mov cx,20           mov ax,0           mov si,axsum_loop:  add ax,arraysi  &

58、#160;        add si,2           loop sum_loop           mov total,ax解答將首地址為array得20個字的數(shù)組求和,并將結(jié)果存入 total 單元中。習題2.24按照下列要求,編寫相應(yīng)的程序段: (1)起始地址為string的主存單元中存放有一個字符串(長度大于6

59、),把該字符串中的第1個和第6個字符(字節(jié)量)傳送給DX寄存器。(2)從主存buffer開始的4個字節(jié)中保存了4個非壓縮BCD碼,現(xiàn)按低(高)地址對低(高)位的原則,將它們合并到DX中。(3)編寫一個程序段,在DX高4位全為0時,使AX = 0;否則使AX = -1。(4)有兩個64位數(shù)值,按“小端方式”存放在兩個緩沖區(qū)buffer1和buffer2中,編寫程序段完成buffer1buffer2功能。(5)假設(shè)從B800h : 0開始存放有100個16位無符號數(shù),編程求它們的和,并把32位的和保存在DX.AX中。(6)已知字符串string包含有32KB內(nèi)容,將其中的$符號替換成空格。(7)有

60、一個100個字節(jié)元素的數(shù)組,其首地址為array,將每個元素減1(不考慮溢出)存于原處。(8)統(tǒng)計以 $ 結(jié)尾的字符串srting的字符個數(shù)。解答(1)解答:           mov si,0           mov dl,stringsi   ;第1個字符送dl寄存器:mov dl,stirng0      

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

62、60;         mov al,buffersi   ;第一字節(jié)           inc si           mov ah,buffersi   ;第二字節(jié)         

63、  mov cl,4           shl ah,cl             ;BCD碼移到高半字節(jié)           or al,ah          &#

64、160;   ;組合成壓縮BCD碼           mov dl,al                   ;存入dl寄.           inc si   &#

65、160;       mov al,buffersi   ;第三字節(jié)           inc si           mov ah,buffersi   ;第四字節(jié)           mov

66、cl,4           shl ah,cl             ;BCD碼移到高半字節(jié)           or al,ah             

67、 ;組合成壓縮BCD碼           mov dh,al             ;存入dh寄.(3)解答:           test dx,0f000h        ; test dh,

68、0f0h           jz next               ; jnz next           mov ax,-1          

69、60;  ; mov ax,0           jmp againnext:  mov ax,0              ; mov ax,0ffffhagain:     .(4)解答:         

70、;  mov ax, word ptr buffer1           sub ax, word ptr buffer2     ;先減低16位           mov dx, word ptr buffer1+2           sbb

71、 dx, word ptr buffer2+2   ;后減高16位,需減低16位的借位(5)解答:           mov ax,0b800h             mov ds,ax       ;段地址       &#

72、160;     xor si,si       ;地址偏移量si=0             xor dx,dx       ;和的高字dx=0             mov cx,99 

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

74、 inc si            add ax,si     ;加下一個數(shù)            jnc  noc         ;無進位轉(zhuǎn)        

75、0;   inc dx           ;有進位dx=dx+1     noc:  dec cx           ;次數(shù)-1            jnz cx,again   &#

76、160;;非0繼續(xù)加 (6)解答1:不使用串操作指令(更好)           mov si,offset string           mov cx,8000h              ; 32k=215=8000h again:  

77、60;  cmp byte ptr si, $   ;$ 24h           jnz next                  ; 不要采用 jz 進行分支            mov b

78、yte ptr si,     ; 20hnext:      inc si           loop again                ; dec cx          &#

79、160;                         ; jnz again(6)解答2:使用串操作指令           mov di,offset string        &#

80、160;  mov al,$           mov cx,8000h           cldagain:     scasb           jnz next      

81、60;    mov byte ptr es : di-1,    next:      loop again(7)解答1:           mov si,offset array              mov cx,100again:   

82、  dec byte ptr si           inc si           loop again(7)解答2:           xor si,si          

83、60;     ; si<-0           mov cx,100               ; 循環(huán)次數(shù) again:    dec arraysi           inc si&

84、#160;          loop again(7)解答3:           mov si,offset array           mov di,si           mov ax,ds

85、60;                     mov es,ax           mov cx,100           cldagain:  lodsb   &

86、#160;         dec al           stosb           loop again(8)解答:           xor si,si     &#

87、160;         si<-0coun:      cmp stringsi,'$'           je  done           inc si      &#

88、160;    jmp coundone:      .                                習題2.25對下面要求,分別給出3種方法,每種方法只用一條指令。 (1)使CF=0

89、0;   (2)使AX=0    (3)同時使AX=0和CF=0解答(1)解答:         clc         and ax,ax         or ax,ax(2)解答:         xor ax,ax        

溫馨提示

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

評論

0/150

提交評論