匯編語言程序設(shè)計(第四版)第2章【課后答案】講解_第1頁
匯編語言程序設(shè)計(第四版)第2章【課后答案】講解_第2頁
匯編語言程序設(shè)計(第四版)第2章【課后答案】講解_第3頁
匯編語言程序設(shè)計(第四版)第2章【課后答案】講解_第4頁
匯編語言程序設(shè)計(第四版)第2章【課后答案】講解_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、-24 -匯編語言程序設(shè)計第四版-囮裑爲(wèi)檤【課后習(xí)題答案】第2章8086的指令系統(tǒng)習(xí)題 2.1已知 DS = 2000H、BX = 0100H、SI = 0002H,存儲單元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)AX =1200H(2

2、)AX = 0100H(3 )AX =4C2AH;偏移地址=bx=0100h(4 )AX = 3412H;偏移地址=bx=0100h(5 )AX =4C2AH;偏移地址=bx+1100h=1200h(6 )AX =7856H;偏移地址=bx+si=0100h+0002h=0102h(7 )AX =65B7H;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h習(xí)題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,

3、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ù)習(xí)題2.3已知數(shù)字09對應(yīng)的格雷碼依次為:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table為首地址(設(shè)為200H )的連續(xù)區(qū)域中。請為如下程序段的每條指令加上注釋,說明每條指令的功能和執(zhí)行結(jié)果。lea bx,tablemov al,8xlat解答lea bx,table;獲取 tab

4、le 的首地址,BX = 200Hmov al,8;傳送欲轉(zhuǎn)換的數(shù)字,AL = 8xlat;轉(zhuǎn)換為格雷碼, AL = 12H P35習(xí)題2.4什么是堆棧,它的工作原則是什么,它的基本操作有哪兩個,對應(yīng)哪兩種指令?解答堆棧是一種按 先進后出”原則存取數(shù)據(jù)的存儲區(qū)域,位于堆棧段中,使用SS段寄存器記錄其段地址;它的工作原則是先進后出;堆棧的兩種基本操作是壓棧和出棧,對應(yīng)的指令是PUSH和POP。習(xí)題2.5已知SS = 2200H、SP = 00B0H,畫圖說明執(zhí)行下面指令序列時,堆棧區(qū)和SP的內(nèi)容如何變化?mov ax,8057hpush axmov ax,0f79hpush axpop bxPO

5、P【bx解答mov ax,8057h push axmov ax,0f79h push ax;bx=0f79hpop bxpop bx;DS:【0f79h=8057hSP=00B0H,SS=2200H習(xí)題2.6給出下列各條指令執(zhí)行后AL值,以及CF、ZF、SF、OF和PF的狀態(tài):mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc al解答mov al,89h;AL=89hCF ZF SF OF PFadd al,al;AL=12h10011;1000 1001+1000 100110001 0010add al,9dh;AL=0

6、afh 00101;0001 0010+ 1001 11011010 1111cmp al,0bch;AL=0afh 10101;1010 1111-1011 1100* 0100 0011sub al,al;AL=00h01001dec al;0000 0000-0000 0001*1111 1111;AL=0ffh00101inc al;AL=00h01001;1111 1111+0000 0001*1111 1111習(xí)題2.7丨設(shè)X、Y、Z均為雙字?jǐn)?shù)據(jù),分別存放在地址為 X、X+2 ; Y、Y+2 ; Z、Z+2的存儲單元中, 它們的運算結(jié)果存入 W單元。閱讀如下程序段,給出運算公式。m

7、ov ax,Xmov dx,X+2add ax,Yadc dx,Y+2add ax,24adc dx,0sub ax,Zsbb dx,Z+2mov W,axmov W+2,dx解答W = X+Y+24-Z習(xí)題2.8請分別用一條匯編語言指令完成如下功能:(1 )把BX寄存器和DX寄存器的內(nèi)容相加,結(jié)果存入DX寄存器。(2) 用寄存器BX和SI的基址變址尋址方式把存儲器的一個字節(jié)與AL寄存器的內(nèi)容相加,并把結(jié) 果送到AL中。(3) 用BX和位移量0B2H的寄存器相對尋址方式把存儲器中的一個字和CX寄存器的內(nèi)容相加, 并把結(jié)果送回存儲器中。(4) 用位移量為0520H的直接尋址方式把存儲器中的一個字

8、與數(shù)3412H相加,并把結(jié)果送回該存 儲單元中。(5) 把數(shù)0A0H與AL寄存器的內(nèi)容相加,并把結(jié)果送回AL中。解答(1) ADD DX,BX(2) ADD AL,BX+SI(3) ADD BX+0B2H,CX(4) ADD WORD PTR 0520H,3412H(5) ADD AL,0A0H習(xí)題2.9丨設(shè)X、Y、Z、V均為16位帶符號數(shù),分別裝在 X、Y、Z、V存儲單元中,閱讀如下程序段, 得出它的運算公式,并說明運算結(jié)果存于何處。mov ax,X;ax=Ximul Y ;DX.AX=X*Ymov cx,ax;cx=X*Y的低16位mox bx,dx;bx=X*Y 的高16位mov ax,

9、Z;ax=Zcwdadd cx,ax;cx=Z的低16位+X*Y的低16位adc bx,dx;bx=Z的高16位+X*Y的高16位+低位進位sub cx,540;cx=Z 的低16位+X*Y的低16位-540sbb bx,0;bx=Z的高16位+X*Y的高16位+低位進位-低位借位mov ax,V ;ax=Vcwdsub ax,cx ;ax=V 的低 16 位-(Z 的低 16 位 +X*Y 的低 16 位-540)sbb dx,bx ;dx=V 的高16位-(Z的高16位+X*Y的高16位+低位進位-低位借位)-低位借位idiv X ;/X解答V-(X*Y+Z-540)/XAX存商,DX存余

10、數(shù)習(xí)題2.10丨指出下列指令的錯誤:(1) xchg si,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的操作數(shù)不能是立即數(shù)(2) 不應(yīng)對CS直接賦值(3 )兩個操作數(shù)不能都是存儲單元(4) 堆棧的操作數(shù)不能是字節(jié)量(5) adc的操作數(shù)不能是段寄存器(6) 沒有確定是字節(jié)還是字操作(7) in不支持超過FFH的直接尋址(8) out只能以AL/AX為源操作數(shù)習(xí)題2.11丨給出下列各條指令執(zhí)行后的結(jié)果,以及狀態(tài)標(biāo)志CF、OF、SF、ZF、

11、PF的狀態(tài)mov ax,1470hand ax,axor ax,axxor ax,axnot axtest ax,0f0f0h解答mov ax,1470h; AX = 1470H CF ZF SF OF PFand ax,ax; AX = 1470H 00000;0001 0100 0111 0000or ax,ax; AX = 1470H 00000not ax;AX =FFFFH 01 0 0 1test ax,0f0f0h;AX =FFFFH 00 1 0 1xor ax,ax;AX = 0000H 01001CF = OF = 0,根據(jù)結(jié)果影響其他標(biāo)志位。注意:MOV和NOT指令不影響

12、標(biāo)志位;其他邏輯指令使習(xí)題2.12丨假設(shè)例題2.34的程序段中,AX = 08H,BX = 10H,請說明每條指令執(zhí)行后的結(jié)果和各個標(biāo) 志位的狀態(tài)。解答指令;執(zhí)行結(jié)果CF OF SF ZF PFmov si,ax;SI=AX=0008H-shl si,1;SI=2*AX=0010H00000add si,ax;SI=3*AX=0018H00001mov dx,bx;DX=BX=0010H00001mov cl,03h;CL=03H00001shl dx,cl;DX=8*BX=0080H0u000sub dx,bx;DX=7*BX=0070H00000add dx,si;DX=7*BX+3*AX

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

14、;*8add al,bl;shl bl,1 add al,bl;考慮進位xor ah,ahmov bx,axmov cl,3shl ax,cladd ax,bx;shl bx,1add 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;求反D5D4位,其他不變;即高4位為3,則變?yōu)?;高4位為0,則變?yōu)?(3)mov cl,4again: shr dx,1;實現(xiàn)邏輯右移;采用“ sar dx,1,”則實現(xiàn)

15、算術(shù)右移rcr ax,1dec cljnz again2的程序段,習(xí)題2.14已知AL = F7H (表示有符號數(shù)-9),分別編寫用SAR和IDIV指令實現(xiàn)的除以并說明各自執(zhí)行后,所得的商是什么?解答(1 )用sar編寫mov al,0f7h; -9 送 AL 1111 1001sar al,1;結(jié)果:AL=1111 1100B=0FBH 即-5(2)用idiv編寫mov al,0f7h; -9 送 alcbw;字節(jié)符號擴展位字mov bl,2注意除數(shù)不可為立即數(shù)idiv bl;結(jié)果:商為 al=fch (-4);余數(shù):ah=ffh (-1)結(jié)論:符號數(shù)的除法用idiv準(zhǔn)確。習(xí)題2.15丨指令

16、指針I(yè)P是通用寄存器還是專用寄存器?有指令能夠直接它賦值嗎?哪類指令的執(zhí)行會 改變它的值?解答指令指針I(yè)P不是通用寄存器,不可直接賦值,屬于專用寄存器。有且僅有循環(huán)、轉(zhuǎn)移、子程序調(diào)用 和返回、中斷類等指令可以改變它的值。習(xí)題2.16丨控制轉(zhuǎn)移類指令中有哪三種尋址方式?解答控制轉(zhuǎn)移類指令的尋址方式:相對尋址、直接尋址方式和間接尋址方式(又可以分成寄存器和存儲 器間接尋址)。習(xí)題2.17什么是短轉(zhuǎn)移 short jump 、近轉(zhuǎn)移neaump 和遠轉(zhuǎn)移far jump ?什么是段內(nèi)轉(zhuǎn)移和段間 轉(zhuǎn)移? 8086有哪些指令可以實現(xiàn)段間轉(zhuǎn)移?解答短轉(zhuǎn)移:指段內(nèi)128127之間的轉(zhuǎn)移,位移量用一個字節(jié)表示

17、近轉(zhuǎn)移:指段內(nèi) 出2K之間的轉(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)移習(xí)題2.188086的條件轉(zhuǎn)移指令的轉(zhuǎn)移范圍有多大?實際編程時,你如何處理超出范圍的條件轉(zhuǎn)移? 解答8086的條件轉(zhuǎn)移的轉(zhuǎn)移范圍:在當(dāng)前指令地址的+127-128之內(nèi)。如條件轉(zhuǎn)移的轉(zhuǎn)移范圍超出此范圍,可在此范圍內(nèi)安排一條無條件轉(zhuǎn)移,再轉(zhuǎn)移到范圍外的目標(biāo)地 址。習(xí)題 2.19 丨假設(shè) DS=2000H,BX=1256H,SI=528FH,位

18、移量 TABLE=20A1H ,232F7H=3280H264E5H=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)移的有效地址EA= DS:20A1H+1256H=232F7=3280H(3 )轉(zhuǎn)移的有效地址EA= DS:1256H+528FH=264E5H=2450H習(xí)題2.20判斷下列程序段跳轉(zhuǎn)的條件(1) xor ax,1e1ehje equal(2) test al,10000001bjnz there(3) cmp cx,

19、64h jb there解答(1) AX = 1e1eh (異或后為 0)(2) AL的D0或D7至少有一位為 1(3) CX (無符號數(shù))v 64h習(xí)題2.21丨設(shè)置CX = 0 ,_則LOOP指令將循環(huán)多少次?例如:mov cx,0delay: loop delay解答216 次。DX和DI存放的是無符號數(shù),請用比較指令和條件轉(zhuǎn)移執(zhí)行;習(xí)題2.22丨假設(shè)AX和SI存放的是有符號數(shù), 指令實現(xiàn)以下判斷:(1 )若DX DI,轉(zhuǎn)到above執(zhí)行;(2)若 AX SI,轉(zhuǎn)到 greater 執(zhí)行;(3 )若CX = 0,轉(zhuǎn)到zero執(zhí)行;(4) 若AX SI產(chǎn)生溢出,轉(zhuǎn)到 oveflow(5 )

20、若 SI WAX,轉(zhuǎn)到 less_eq 執(zhí)行;(6)若 DIWDX,轉(zhuǎn)到 below_eq 執(zhí)行解答(1 )若DX DI,轉(zhuǎn)到above執(zhí)行cmp dx,dija above;= jnbe above(2)若 AX SI,轉(zhuǎn)到 greater 執(zhí)行cmp ax,sijg greater; = jnle greater(3 )若CX = 0,轉(zhuǎn)到zero執(zhí)行cmp cx,0jz zero; = jcxz zero(4)若AX SI產(chǎn)生溢出,轉(zhuǎn)到 oveflow 執(zhí)行;cmp ax,sijo overflow(5 )若 SI WAX,轉(zhuǎn)到 less_eq 執(zhí)行;cmp si,ax;cmp ax,s

21、ijle less_eq;jge less_eq(6)若DIWDX,轉(zhuǎn)到below_eq 執(zhí)行。cmp di,dxjbe below_eq;cmp dx,di;jae below_eq習(xí)題2.23丨有一個首地址為 array的20個字的數(shù)組,說明下列程序段的功能mov cx,20mov ax,0mov si,axsum_loop:add ax,arraysiadd si,2loop sum_loopmov total,ax解答將首地址為array得20個字的數(shù)組求和,并將結(jié)果存入total單元中習(xí)題2.24按照下列要求,編寫相應(yīng)的程序段:(1) 起始地址為string的主存單元中存放有一個字符

22、串(長度大于6),把該字符串中的第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中,編寫程序段完成 buffer1 buffer2 功能。(5) 假設(shè)從B800h : 0開始存放有100個16位無符號數(shù),編程求它們的和,并把32位的和保存 在DX.AX中。(6) 已知字符串string包含有3

23、2KB內(nèi)容,將其中的瞄號替換成空格。(7) 有一個100個字節(jié)元素的數(shù)組,其首地址為array,將每個元素減1 (不考慮溢出)存于原處。(8)統(tǒng)計以$結(jié)尾的字符串srting的字符個數(shù)。解答(1)解答:mov si,0mov dl,stringsi;第1個字符送dl寄存器:mov dl,stirng0mov si,5mov dh,stringsi;第6個字符送dh寄存器:mov dl,stirng5(2)解答:xor si,si;si清零mov al,buffersi;第一字節(jié)inc simov ah,buffersi;第二字節(jié)mov cl,4shl ah,cl;BCD碼移到高半字節(jié)or al

24、,ah;組合成壓縮BCD碼mov dl,al;存入dl寄.inc simov al,buffersi;第三字節(jié)inc simov ah,buffersi;第四字節(jié)mov cl,4shl ah,clor al,ahmov dh,al(3) 解答:test dx,OfOOOhjz nextmov ax,-1jmp again next: mov ax,0 again: .(4) 解答:;BCD碼移到高半字節(jié);組合成壓縮BCD碼;存入dh寄.;test dh,0f0h;jnz next;mov ax,0;mov ax,0ffffhmov ax, word ptr buffer1;先減低16位sub

25、ax, word ptr buffer2 mov dx, word ptr buffer1+2;后減高16位,需減低16位的借位sbb dx, word ptr buffer2+2(5) 解答:mov ax,0b800hmov ds,axxor si,sixor dx,dxmov cx,99mov ax,si again: inc siinc siadd ax,si jnc noc inc dxnoc: dec cx;段地址;地址偏移量si=0;和的高字dx=0;加的次數(shù);第一個數(shù);指向下一個字單元;加下一個數(shù);無進位轉(zhuǎn);有進位dx=dx+1;次數(shù)-1jnz cx,again;非 0繼續(xù)加(6

26、) 解答1:不使用串操作指令(更好)mov si,offset stringmov cx,8000h; 32k=2T5=8000hagain:cmp byte ptr si,jnz next;不要采用jz進行分支mov byte ptr si,;=20hnext:inc si;dec cxloop again;jnz again(6) 解答2:使用串操作指令mov di,offset stringmov al, $mov cx,8000hcldagain:scasbjnz nextmov byte ptr es : di- 1,next:loop again(7) 解答1:mov si,off

27、set arraymov cx,100again:dec byte ptr siinc siloop again(7) 解答2:xor si,si; si-0循環(huán)次數(shù)mov cx,100again:dec arraysiinc siloop again(7)解答3:mov si,offset arraymov di,simov ax,dsmov es,axmov cx,100cldagain: lodsbdec alstosbloop again(8)解答:xor si,si;si-0coun:cmp stringsi,$je doneinc sijmp coundone:.習(xí)題2.25丨對下

28、面要求,分別給出3種方法,每種方法只用一條指令。(1 )使 CF=0 ( 2 )使 AX=0( 3)同時使 AX=0 和 CF=0解答(1)解答:clcand ax,axor ax,ax(2)解答:xor ax,ax and ax,0mov ax,0(3) 解答:and ax,0xor ax,axsub ax,ax習(xí)題2.26參照本習(xí)題的示意圖,分析調(diào)用序列,畫出每次調(diào)用及返回時的堆棧狀態(tài)。其中CALL前是該指令所在的邏輯地址;另外,段內(nèi)直接調(diào)用指令的機器代碼的字節(jié)數(shù)為3,段間直接調(diào)用指令則為 5個字節(jié)。解答主程序轉(zhuǎn)子suba時段內(nèi)調(diào)用:斷點 1為2000h : 0400h+3,轉(zhuǎn)子是只將IP壓棧。suba轉(zhuǎn)子subb時段間調(diào)用:斷點 2為2000h : 0840h+5,轉(zhuǎn)子時須將cs段地址和IP壓棧suba轉(zhuǎn)子subc時段內(nèi)調(diào)用:斷點 3為2000h : 0c021h+3,轉(zhuǎn)子是只將IP壓棧。注:壓棧時先修改sp再

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論