新版匯編語言程序設計【課后習題答案】錢曉捷主編電子工業(yè)出版社.doc
《新版匯編語言程序設計【課后習題答案】錢曉捷主編電子工業(yè)出版社.doc》由會員分享,可在線閱讀,更多相關《新版匯編語言程序設計【課后習題答案】錢曉捷主編電子工業(yè)出版社.doc(21頁珍藏版)》請在裝配圖網上搜索。
新版匯編語言程序設計【課后習題答案】 錢曉捷 主編 電子工業(yè)出版社 第2章 8086的指令系統(全)第2章 8086的指令系統習題2.1已知DS2000H、BX0100H、SI0002H,存儲單元20100H20103H依次存放12 34 56 78H,21200H21203H依次存放2A 4C B7 65H,說明下列每條指令執(zhí)行完后AX寄存器的內容。(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=0100h(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,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、09H、0AH、0CH、11H、12H、14H,它存在于以table為首地址(設為200H)的連續(xù)區(qū)域中。請為如下程序段的每條指令加上注釋,說明每條指令的功能和執(zhí)行結果。 lea bx,table mov al,8 xlat解答 lea bx,table ;獲取table的首地址,BX200H mov al,8 ;傳送欲轉換的數字,AL8 xlat ;轉換為格雷碼,AL12H P35習題2.4什么是堆棧,它的工作原則是什么,它的基本操作有哪兩個,對應哪兩種指令? 解答堆棧是一種按“先進后出”原則存取數據的存儲區(qū)域,位于堆棧段中,使用SS段寄存器記錄其段地址;它的工作原則是先進后出;堆棧的兩種基本操作是壓棧和出棧,對應的指令是PUSH和POP。習題2.5已知SS = 2200H、SP = 00B0H,畫圖說明執(zhí)行下面指令序列時,堆棧區(qū)和SP的內容如何變化? mov ax,8057h push ax mov ax,0f79h push ax pop bx pop bx解答 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop bx ;DS:0f79h=8057h習題2.6給出下列各條指令執(zhí)行后AL值,以及CF、ZF、SF、OF和PF的狀態(tài): mov al,89h add al,al add al,9dh cmp al,0bch sub al,al dec al inc al解答mov al,89h ; AL=89h CF ZF SF OF PFadd al,al ; 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+ 1001 1101 1010 1111 cmp al,0bch ; AL=0afh 1 0 1 0 1; 1010 1111-1011 1100* 0100 0011sub al,al ; AL=00h 0 1 0 0 1dec al ; AL=0ffh 0 0 1 0 1; 0000 0000- 0000 0001*1111 1111inc al ; AL=00h 0 1 0 0 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 add ax,Y adc dx,Y+2 add ax,24 adc dx,0 sub ax,Z sbb dx,Z+2 mov W,axmov W+2,dx 解答 WX+Y+24-Z習題2.8請分別用一條匯編語言指令完成如下功能: (1)把BX寄存器和DX寄存器的內容相加,結果存入DX寄存器。(2)用寄存器BX和SI的基址變址尋址方式把存儲器的一個字節(jié)與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(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 ;DX.AX=X*Y mov cx,ax ;cx=X*Y的低16位 mox bx,dx ;bx=X*Y的高16位 mov ax,Z ;ax=Z cwd add 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位-540 sbb bx,0 ;bx=Z的高16位+X*Y的高16位+低位進位-低位借位 mov ax,V ;ax=V cwd sub 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)/X AX存商,DX存余數 習題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的操作數不能是立即數(2)不應對CS直接賦值(3)兩個操作數不能都是存儲單元(4)堆棧的操作數不能是字節(jié)量(5)adc的操作數不能是段寄存器(6)沒有確定是字節(jié)還是字操作(7)in不支持超過FFH的直接尋址(8)out只能以AL/AX為源操作數習題2.11給出下列各條指令執(zhí)行后的結果,以及狀態(tài)標志CF、OF、SF、ZF、PF的狀態(tài)。 mov ax,1470h and ax,ax or ax,ax xor ax,ax not ax test ax,0f0f0h解答 mov ax,1470h ;AX1470H CF ZF SF OF PF and ax,ax ;AX1470H 0 0 0 0 0 ;0001 0100 0111 0000 or ax,ax ;AX1470H 0 0 0 0 0 xor ax,ax ;AX0000H 0 1 0 0 1 not ax ;AXFFFFH 0 1 0 0 1 test ax,0f0f0h ;AXFFFFH 0 0 1 0 1注意:MOV和NOT指令不影響標志位;其他邏輯指令使CFOF0,根據結果影響其他標志位。習題2.12假設例題2.32的程序段中,AX = 08H,BX = 10H,請說明每條指令執(zhí)行后的結果和各個標志位的狀態(tài)。 解答 指令 ; 執(zhí)行結果 CF OF SF ZF PF mov si,ax ; SI=AX=0008H - - - - - shl si,1 ; SI=2*AX=0010H0 0 0 0 0 add si,ax ; SI=3*AX=0018H 0 0 0 0 1 mov dx,bx; DX=BX=0010H 0 0 0 0 1 mov cl,03h; CL=03H0 0 0 0 1 shl dx,cl ; DX=8*BX=0080H 0 u 0 0 0 sub dx,bx ; DX=7*BX=0070H 0 0 0 0 0 add dx,si; DX=7*BX+3*AX=0088H0 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碼與非壓縮BCD碼的互相轉換(3)把DX.AX中的雙字右移4位解答(1);不考慮進位 mov bl,al mov cl,3 shl al,cl ;*8 add al,bl ;shl bl,1 add al,bl ;考慮進位 xor ah,ah mov bx,ax mov cl,3 shl ax,cl add ax,bx ;shl bx,1 add ax,bx(2)數字09的ASCII碼是:30h39h 非壓縮BCD碼的09是:00h09h方法一: and al,0fh ;實現ASCII到非壓縮BCD碼的轉換 or al,30h ;實現非壓縮BCD碼到ASCII的轉換方法二: xor al,30h ;求反D5D4位,其他不變 ;即高4位為3,則變?yōu)?;高4位為0,則變?yōu)?(3) mov cl,4again:shr dx,1 ;實現邏輯右移 ;采用“sar dx,1”,則實現算術右移 rcr ax,1dec cl jnz again習題2.14已知AL = F7H(表示有符號數-9),分別編寫用SAR和IDIV指令實現的除以2的程序段,并說明各自執(zhí)行后,所得的商是什么? 解答(1)用sar編寫 mov al,0f7h ; -9送AL 1111 1001 sar al,1 ; 結果:AL=1111 1100B=0FBH 即-5(2)用idiv編寫 mov al,0f7h ; -9送al cbw ; 字節(jié)符號擴展位字 mov bl,2 ; 注意除數不可為立即數 idiv bl ; 結果:商為al=fch (-4) ; 余數:ah=ffh (-1) 結論:符號數的除法用idiv 準確。 習題2.15已知數據段500h 600h處存放了一個字符串,說明下列程序段執(zhí)行后的結果: mov si,600h mov di,601h mov ax,ds mov es,ax mov cx,256 std rep movsb解答習題2.16說明下列程序段的功能 cld mov ax,0fefh mov cx,5 mov bx,3000h mov es,bx mov di,2000h rep stosw解答將es:di (即3000:2000h或32000h)開始的5個單元的內容置為0fefh。習題2.17指令指針I(yè)P是通用寄存器還是專用寄存器?有指令能夠直接它賦值嗎?哪類指令的執(zhí)行會改變它的值? 解答指令指針I(yè)P不是通用寄存器,不可直接賦值,屬于專用寄存器。有且僅有循環(huán)、轉移、子程序調用和返回、中斷類等指令可以改變它的值。習題2.18控制轉移類指令中有哪三種尋址方式? 解答控制轉移類指令的尋址方式:相對尋址、直接尋址方式和間接尋址方式(又可以分成寄存器和存儲器間接尋址)。習題2.19什么是短轉移short jump、近轉移near jump和遠轉移far jump?什么是段內轉移和段間轉移?8086有哪些指令可以實現段間轉移? 解答短轉移:指段內128127之間的轉移,位移量用一個字節(jié)表示近轉移:指段內32K之間的轉移,位移量用一個字表示遠轉移:指段間1MB范圍的轉移段內轉移:指在同一個代碼段內的轉移,可以是短轉移或者近轉移段間轉移:指轉移到另外一個代碼段,就是遠轉移8086/8088CPU的JMP、CALL和INT n指令可以實現段間轉移習題2.208086的條件轉移指令的轉移范圍有多大?實際編程時,你如何處理超出范圍的條件轉移? 解答8086的條件轉移的轉移范圍:在當前指令地址的 +127-128之內。如條件轉移的轉移范圍超出此范圍,可在此范圍內安排一條無條件轉移,再轉移到范圍外的目標地址。習題2.21假設DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,232F7H=3280H,264E5H=2450H,試問執(zhí)行下列段內間接尋址的轉移指令后,轉移的有效地址是什么? (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判斷下列程序段跳轉的條件 (1) xor ax,1e1eh je equal (2)test al,10000001b jnz there (3)cmp cx,64h jb there解答(1)AX1e1eh(異或后為0)(2)AL的D0或D7至少有一位為1(3)CX(無符號數) 64h習題2.23設置CX = 0,則LOOP指令將循環(huán)多少次?例如: mov cx,0delay:loop delay解答 216次。習題2.24假設AX和SI存放的是有符號數,DX和DI存放的是無符號數,請用比較指令和條件轉移指令實現以下判斷: (1)若DX DI,轉到above執(zhí)行;(2)若AX SI,轉到greater執(zhí)行;(3)若CX = 0,轉到zero執(zhí)行;(4)若AXSI產生溢出,轉到overflow執(zhí)行;(5)若SIAX,轉到less_eq執(zhí)行;(6)若DIDX,轉到below_eq執(zhí)行。解答(1)若DX DI,轉到above執(zhí)行 cmp dx,di ja above ;jnbe above(2)若AX SI,轉到greater執(zhí)行 cmp ax,si jg greater ;jnle greater(3)若CX = 0,轉到zero執(zhí)行 cmp cx,0 jz zero ; jcxz zero (4)若AXSI產生溢出,轉到overflow執(zhí)行; cmp ax,si jo overflow(5)若SIAX,轉到less_eq執(zhí)行; cmp si,ax ; cmp ax,si jle less_eq ; jge less_eq(6)若DIDX,轉到below_eq執(zhí)行。 cmp di,dx ; cmp dx,di jbe below_eq ; jae below_eq習題2.25有一個首地址為array的20個字的數組,說明下列程序段的功能。 mov cx,20 mov ax,0 mov si,axsum_loop: add ax,arraysi add si,2 loop sum_loop mov total,ax解答將首地址為array得20個字的數組求和,并將結果存入 total 單元中。習題2.26按照下列要求,編寫相應的程序段: (1)起始地址為string的主存單元中存放有一個字符串(長度大于6),把該字符串中的第1個和第6個字符(字節(jié)量)傳送給DX寄存器。(2)從主存buffer開始的4個字節(jié)中保存了4個非壓縮BCD碼,現按低(高)地址對低(高)位的原則,將它們合并到DX中。(3)編寫一個程序段,在DX高4位全為0時,使AX = 0;否則使AX = -1。(4)有兩個64位數值,按“小端方式”存放在兩個緩沖區(qū)buffer1和buffer2中,編寫程序段完成buffer1buffer2功能。(5)假設從B800h : 0開始存放有100個16位無符號數,編程求它們的和,并把32位的和保存在DX.AX中。(6)已知字符串string包含有32KB內容,將其中的$符號替換成空格。(7)有一個100個字節(jié)元素的數組,其首地址為array,將每個元素減1(不考慮溢出)存于原處。(8)統計以 $ 結尾的字符串srting的字符個數。解答(1)解答: mov si,0 mov dl,stringsi ;第1個字符送dl寄存器:mov dl,stirng0 mov si,5 mov dh,stringsi ;第6個字符送dh寄存器:mov dl,stirng5(2)解答: xor si,si ;si清零 mov al,buffersi ;第一字節(jié) inc si mov ah,buffersi ;第二字節(jié) mov cl,4 shl ah,cl ;BCD碼移到高半字節(jié) or al,ah ;組合成壓縮BCD碼 mov dl,al ;存入dl寄. inc si mov al,buffersi ;第三字節(jié) inc si mov ah,buffersi ;第四字節(jié) mov cl,4 shl ah,cl ;BCD碼移到高半字節(jié) or al,ah ;組合成壓縮BCD碼 mov dh,al ;存入dh寄.(3)解答: test dx,0f000h ; test dh,0f0h jz next ; jnz next mov ax,-1 ; mov ax,0 jmp againnext:mov ax,0 ; mov ax,0ffffhagain: .(4)解答: mov ax, word ptr buffer1 sub ax, word ptr buffer2 ;先減低16位 mov dx, word ptr buffer1+2 sbb dx, word ptr buffer2+2 ;后減高16位,需減低16位的借位(5)解答: mov ax,0b800h mov ds,ax ;段地址 xor si,si ;地址偏移量si=0 xor dx,dx ;和的高字dx=0 mov cx,99 ;加的次數 mov ax,si ;第一個數again: inc si ;指向下一個字單元 inc si add ax,si ;加下一個數 jnc noc ;無進位轉 inc dx ;有進位dx=dx+1 noc: dec cx ;次數-1 jnz cx,again ;非0繼續(xù)加 (6)解答1:不使用串操作指令(更好) mov si,offset string mov cx,8000h ; 32k=215=8000hagain: cmp byte ptr si, $ ;$ 24h jnz next ; 不要采用 jz 進行分支 mov byte ptr si, ; 20hnext: inc si loop again ; dec cx ; jnz again(6)解答2:使用串操作指令 mov di,offset string mov al,$ mov cx,8000h cldagain: scasb jnz next mov byte ptr es : di-1, next: loop again(7)解答1: mov si,offset array mov cx,100again: dec byte ptr si inc si loop again(7)解答2: xor si,si ; si-0 mov cx,100 ; 循環(huán)次數again: dec arraysi inc si loop again(7)解答3: mov si,offset array mov di,si mov ax,ds mov es,ax mov cx,100 cldagain:lodsb dec al stosb loop again(8)解答: xor si,si ;si-0coun: cmp stringsi,$ je done inc si jmp coundone: . 習題2.27對下面要求,分別給出3種方法,每種方法只用一條指令。 (1)使CF=0 (2)使AX=0 (3)同時使AX=0和CF=0解答(1)解答: clc and ax,ax or ax,ax(2)解答: xor ax,ax and ax,0 mov ax,0(3)解答: and ax,0 xor ax,ax sub ax,ax習題2.28參照本習題的示意圖,分析調用序列,畫出每次調用及返回時的堆棧狀態(tài)。其中CALL前是該指令所在的邏輯地址;另外,段內直接調用指令的機器代碼的字節(jié)數為3,段間直接調用指令則為5個字節(jié)。 解答主程序轉子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 daa xchg al,ah adc al,bh daa xchg al,ah ret解答 壓縮BCD碼加法:AXAXBX 出口參數:AXBCD碼和習題2.30AAD指令是用于除法指令之前,進行非壓縮BCD碼調整的。實際上,處理器的調整過程是:ALAH10AL,AH0。如果指令系統沒有AAD指令,請用一個子程序完成這個調整工作。 解答 shl ah,1 ;ah=2*a (設原ah=a) mov dl,ah ;dl=2*a mov cl,2 ;設定移位次數 shl ah,cl ;ah=8*a add ah,dl ;ah=10*a add al,ah ;al=10*a+al xor ah,ah ;清零ah int 3 ;返回DOS 注意: 入口:AX中存放有“和”(兩非壓縮BCD碼) 出口:AL中 已為調整后的二進制數習題2.31解釋如下有關中斷的概念: (1) 內部中斷和外部中斷(2) 單步中斷和斷點中斷(3) 除法錯中斷和溢出中斷(4) 中斷向量號和中斷向量表解答(1)內部中斷是由于8086CPU內部執(zhí)行程序引起的程序中斷;外部中斷是來自8086CPU之外的原因引起的程序中斷;(2)單步中斷是若單步標志TF為1,則在每條指令執(zhí)行結束后產生的中斷;斷點中斷是供調試程序使用的,它的中斷類型號為3通常調試程序時,把程序按程序的任務分成幾段,然后,每段設一個段點;(3)除法錯中斷是在執(zhí)行除法指令時,若除數為0或商超過了寄存器所能表達的范圍產生的中斷;溢出中斷是在執(zhí)行溢出中斷指令INTO時,若溢出標志OF為1時產生的中斷;(4)中斷向量號是 中斷類型號;中斷向量表是中斷向量號與它所對應的中斷服務程序起始地址的轉換表。習題2.32試比較INT n和段間CALL指令、IRET和段間RET指令的功能。 解答INT n 響應中斷時,除象CALL保護斷點外,還應保護FR;段間CALL指令用在主程序中實現子程序的調用。IRET 返回時,除象RET恢復斷點外,還應恢復FR;子程序執(zhí)行完成后,應返回主程序中繼續(xù)執(zhí)行,這一功能由RET指令完成。 習題2.33什么是系統功能調用?匯編語言中,它的一般格式是怎樣的? 解答系統功能調用是用戶在程序一級請示操作系統服務的一種手段,它不是一條簡單的硬指令,而是帶有一定功能號的“訪指令”,它的功能并非由硬件直接提供,而是由操作系統操作系統中的一段程序完成的,即由軟件方法實現的匯編語言中,它的一般格式是分如下四步進行:(1)在AH寄存器置系統功能調用號;(2)在指定的寄存器中設置 入口參數;(3)用INT21H(或ROMBIOS的中斷向量號)指令執(zhí)行功能調用;(4)據出口參數分析功能調用運行情況。習題2.34補充例2.40,當有溢出時顯示“Error! Overflow!”,無溢出時顯示“OK”。 解答okmsg db OK, $errmsg db Error ! Overflow !, $ mov ax,X sub ax,Y jo overflow mov dx,offset okmsg jmp nextoverflow: mov dx,errmsg next: mov ah,9 int 21h錯誤解答: mov ax,X sub ax,Y jo overflow mov dx,offset okmsg okmsgdb OK, $ mov dx,errmsg ;錯誤1:數據定義在代碼中 mov ah,9 int 21hoverflow: errmsg db Error ! Overflow !, $ mov dx,errmsg ; 錯誤2:缺少JMP指令 mov ah,9 int 21h習題2.35補充例2.42,顯示“1”的個數;注意首先將個數轉換為ASCII碼。 解答 and al,7fh ;使d7=0 mov dl,al ;轉存于dl jnp next ;奇數個1轉 or al,80h ;偶數個1 使d7=1 next: xor bl,bl ;紀錄1的個數 dl=0 mov cx,8 ;移位次數 again: shl dl,1 ;邏輯左移1次 jnc desp ;如cf=0 轉 inc bl;否則cf=1 個數加1 desp: loop again ;cx=cx-1 如cx不等于0,循環(huán) or bl,30h ;個數變?yōu)锳SCII碼 mov ah,02h ;在CRT上顯示個數 mov dl,bl int 21h ret習題2.36先提示輸入數字“Input Number:0 9”,然后在下一行顯示輸入的數字,結束;如果不是鍵入了0 9數字,就提示錯誤“Error!”,繼續(xù)等待輸入數字。 解答 ; 數據段str1 db Input Number:09 : ,0dh,0ah,$ str2 db Error!,0dh,0ah,$ ; 代碼段 mov ah,09h ; 顯示str1字符串 mov dx,offset str1 int 21hgetkey: mov ah,1 ; 調用DOS功能 int 21h cmp al,0 jb error ; 小于0,出錯處理 cmp al,9 ja error ; 大于9,出錯處理 mov ah,02h ; 調用DOS顯示字符功能,顯示該數字 mov dl,al int 21h . ; 終止程序執(zhí)行,返回DOSerror: mov ah,09h ; 出錯,調用DOS 功能顯示str2字符串 mov dx,offset str2 int 21h jmp getkey ; 返回按鍵習題2.37從鍵盤輸入一個字符串(不超過255個),將其中的小寫字母轉換成大寫字母,然后按原來的順序在屏幕上顯示。 解答思路:參考P67 例2.52用0ah號DOS系統功能調用,從鍵盤輸入一個字符串,然后從鍵盤緩沖區(qū)逐個取字符,在“a”與“z”之間的字符為小寫字母,需要轉換為大寫字母(減去20h),其他不變。 ;xt237.asm .model small .stack .dataarray db 255 db 0array1 db 255 dup($)array2 db 0dh,0ah,$ .code .startup mov ah,0ah ; 鍵盤輸入字符串 mov dx,offset array int 21h mov dx,offset array2 ; 回車換行 mov ah,09h int 21h mov bx,offset array1again: mov al,bx cmp al,$ jz done cmp al,a ; 小于a和大于z的字符不是小寫字母 jb next cmp al,z ja next sub al,20h ; 在a和z之間的字符才是小寫字母,轉換為大寫 mov bx,al ; 保存到原位置next: inc bx jmp againdone: mov dx,offset array1 mov ah,09h int 21h .exit 0 end習題2.38指令對狀態(tài)標志的作用可以分成多種情況,例如無影響、無定義、按結果影響、特別說明的影響等,你能區(qū)別這些情況嗎?分別用具體的指令來說明。 解答習題2.398086指令系統分成哪6個功能組?各組主要包含什么指令,舉例說明。解答8086指令系統分成的6個功能組是(1)數據傳送類令:通用數據傳送指令如傳送指令MOV、交換指令XCHG、換碼指令XLAT堆棧操作指令如進棧指令PUSH出棧指令POP標志傳送指令如標志寄存器傳送;標志位操作地址傳送指令如有效地址傳送指令LEA、指針傳送指令LDS指針傳送指令LES輸入輸出指令如輸入指令IN、輸出指令OUT(2)算術運算指令加法指令如加法指令ADD、帶進位加法指令ADC、增量指令INC減法指令如減法指令SUB、帶借位指令SBB、減量指令DEC、求補指令NEG、比較指令CMP乘法指令如無符號乘法指令MUL、有符號乘法指令IMUL除法指令如無符號數除法指令DIV、有符號數除法指令IDIV符號擴展指令如字節(jié)轉換字指令CBW、字轉換字節(jié)指令CWD十進制調整指令如壓縮BCD碼調整指令、非壓縮BCD碼調整指令(3)位操作類指令邏輯運算指令如邏輯指令AND、邏輯或指令OR、邏輯異或指令XOR、邏輯非指令NOT、測試指令TEST移位指令如邏輯移位指令SHL和SHR、算術移位指令SAL和SAR循環(huán)移位指令如不帶移位指令XOL和ROR、帶移位指令RCL和RCR(4)控制轉移類指令無條件轉移指令JMP條件轉移指令如判斷單個標志狀態(tài)JZ/JE、JNZ/JNE、JS/JNS、JP/JPE、JNP/JPO、JC/JB、JNC/JNB/JAE,用于比較無符號數高低JB(JNAE)、JNB(JAE)、JBE(JNA)、JNBE(JA),用于比較有符號數大小JL(JNGE)、JNL(JGE)、JLE(JNG)、JNLE(JG)循環(huán)指令LOOP子程序指令如子程序調用指令CALL、子程序返回指令RET中斷指令如INT N(5)串操作類指令串傳送指令MOVS串存儲指令STOS串讀取指令LODS串比較指令CMPS- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 課后習題答案 新版 匯編 語言程序設計 課后 習題 答案 錢曉捷 主編 電子工業(yè) 出版社
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.appdesigncorp.com/p-2845963.html