版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
新版匯編語言程序設(shè)計(jì)【課后習(xí)題答案】鈔票曉捷主編電子工業(yè)出版社第2章8086的指令系統(tǒng)〔全〕
第2章8086的指令系統(tǒng)
〔習(xí)題2.1〕DS=2000H、BX=0100H、SI=0002H,存儲(chǔ)單元[20210H]~[20213H]依次存放12345678H,[21200H]~[21203H]依次存放2A4CB765H,講明以下每條指令執(zhí)行完后AX存放器的內(nèi)容?!?〕movax,1200h〔2〕movax,bx〔3〕movax,[1200h]〔4〕movax,[bx]〔5〕movax,[bx+1100h]〔6〕movax,[bx+si]〔7〕movax,[bx][si+1100h]〔解答〕〔1〕AX=1200H〔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〕指出以下指令的錯(cuò)誤〔1〕movcx,dl〔2〕movip,ax〔3〕moves,1234h〔4〕moves,ds〔5〕moval,300〔6〕mov[sp],ax〔7〕movax,bx+di〔8〕mov20h,ah〔解答〕〔1〕兩操作數(shù)類型不匹配〔2〕IP指令指針禁止用戶訪咨詢〔3〕立即數(shù)不準(zhǔn)許傳給段存放器〔4〕段存放器之間不準(zhǔn)許傳送〔5〕兩操作數(shù)類型不匹配〔6〕目的操作數(shù)應(yīng)為[SI]〔7〕源操作數(shù)應(yīng)為[BX+DI]
〔8〕立即數(shù)不能作目的操作數(shù)
〔習(xí)題2.3〕數(shù)字0~9對(duì)應(yīng)的格雷碼依次為:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table為首地址〔設(shè)為200H〕的連續(xù)區(qū)域中。請(qǐng)為如下程序段的每條指令加上注釋,講明每條指令的功能和執(zhí)行結(jié)果。leabx,tablemoval,8xlat〔解答〕leabx,table
;獵取table的首地址,BX=200Hmoval,8
;傳送欲轉(zhuǎn)換的數(shù)字,AL=8xlat
;轉(zhuǎn)換為格雷碼,AL=12H
P35
〔習(xí)題2.4〕什么是堆棧,它的工作原那么是什么,它的全然操作有哪兩個(gè),對(duì)應(yīng)哪兩種指令?〔解答〕堆棧是一種按“先進(jìn)后出〞原那么存取數(shù)據(jù)的存儲(chǔ)區(qū)域,位于堆棧段中,使用SS段存放器記錄其段地址;它的工作原那么是先進(jìn)后出;堆棧的兩種全然操作是壓棧和出棧,對(duì)應(yīng)的指令是PUSH和POP。
〔習(xí)題2.5〕SS=2200H、SP=00B0H,畫圖講明執(zhí)行下面指令序列時(shí),堆棧區(qū)和SP的內(nèi)容如何變化?movax,8057hpushaxmovax,0f79h
pushaxpopbxpop[bx]〔解答〕movax,8057hpushaxmovax,0f79hpushaxpopbx
;bx=0f79hpop[bx]
;DS:[0f79h]=8057h〔習(xí)題2.6〕給出以下各條指令執(zhí)行后AL值,以及CF、ZF、SF、OF和PF的狀態(tài):moval,89haddal,aladdal,9dhcmpal,0bchsubal,aldecalincal〔解答〕moval,89h
;AL=89h
CF
ZF
SF
OF
PFaddal,al
;AL=12h
1
0
0
1
1;10001001+10001001100010010addal,9dh
;AL=0afh
0
0
1
0
1;00010010+1001110110101111cmpal,0bch
;AL=0afh
1
0
1
0
1;10101111-10111100*01000011subal,al
;AL=00h
0
1
0
0
1decal
;AL=0ffh
0
0
1
0
1;00000000-00000001
*11111111incal
;AL=00h
0
1
0
0
1;11111111+00000001*11111111〔習(xí)題2.7〕設(shè)X、Y、Z均為雙字?jǐn)?shù)據(jù),分不存放在地址為X、X+2;Y、Y+2;Z、Z+2的存儲(chǔ)單元中,它們的運(yùn)算結(jié)果存進(jìn)W單元。閱讀如下程序段,給出運(yùn)算公式。movax,Xmovdx,X+2addax,Yadcdx,Y+2addax,24adcdx,0subax,Zsbbdx,Z+2movW,ax
movW+2,dx〔解答〕W=X+Y+24-Z
〔習(xí)題2.8〕請(qǐng)分不用一條匯編語言指令完成如下功能:〔1〕把BX存放器和DX存放器的內(nèi)容相加,結(jié)果存進(jìn)DX存放器?!?〕用存放器BX和SI的基址變址尋址方式把存儲(chǔ)器的一個(gè)字節(jié)與AL存放器的內(nèi)容相加,并把結(jié)果送到AL中?!?〕用BX和位移量0B2H的存放器相對(duì)尋址方式把存儲(chǔ)器中的一個(gè)字和CX存放器的內(nèi)容相加,并把結(jié)果送回存儲(chǔ)器中?!?〕用位移量為0520H的直截了當(dāng)尋址方式把存儲(chǔ)器中的一個(gè)字與數(shù)3412H相加,并把結(jié)果送回該存儲(chǔ)單元中?!?〕把數(shù)0A0H與AL存放器的內(nèi)容相加,并把結(jié)果送回AL中。〔解答〕〔1〕ADDDX,BX〔2〕ADDAL,[BX+SI]〔3〕ADD[BX+0B2H],CX〔4〕ADDWORDPTR[0520H],3412H〔5〕ADDAL,0A0H
〔習(xí)題2.9〕設(shè)X、Y、Z、V均為16位帶符號(hào)數(shù),分不裝在X、Y、Z、V存儲(chǔ)單元中,閱讀如下程序段,得出它的運(yùn)算公式,并講明運(yùn)算結(jié)果存于何處。movax,X
;ax=XimulY
;DX.AX=X*Ymovcx,ax
;cx=X*Y的低16位moxbx,dx
;bx=X*Y的高16位movax,Z
;ax=Zcwdaddcx,ax
;cx=Z的低16位+X*Y的低16位adcbx,dx
;bx=Z的高16位+X*Y的高16位+低位進(jìn)位subcx,540
;cx=Z的低16位+X*Y的低16位-540sbbbx,0
;bx=Z的高16位+X*Y的高16位+低位進(jìn)位-低位借位movax,V
;ax=Vcwdsubax,cx
;ax=V的低16位-〔Z的低16位+X*Y的低16位-540〕sbbdx,bx
;dx=V的高16位-〔Z的高16位+X*Y的高16位+低位進(jìn)位-低位借位〕-低位借位idivX;/X〔解答〕[V-(X*Y+Z-540)]/XAX存商,DX存余數(shù)
〔習(xí)題2.10〕指出以下指令的錯(cuò)誤:〔1〕xchg[si],30h〔2〕popcs〔3〕sub[si],[di]〔4〕pushah〔5〕adcax,ds〔6〕add[si],80h〔7〕inal,3fch〔8〕outdx,ah〔解答〕〔1〕xchg的操作數(shù)不能是立即數(shù)〔2〕不應(yīng)對(duì)CS直截了當(dāng)賦值〔3〕兩個(gè)操作數(shù)不能根基上存儲(chǔ)單元〔4〕堆棧的操作數(shù)不能是字節(jié)量〔5〕adc的操作數(shù)不能是段存放器〔6〕沒有確定是字節(jié)依舊字操作〔7〕in不支持超過FFH的直截了當(dāng)尋址〔8〕out只能以AL/AX為源操作數(shù)
〔習(xí)題2.11〕給出以下各條指令執(zhí)行后的結(jié)果,以及狀態(tài)標(biāo)志CF、OF、SF、ZF、PF的狀態(tài)。movax,1470handax,axorax,axxorax,axnotaxtestax,0f0f0h〔解答〕
movax,1470h
;AX=1470HCF
ZF
SF
OF
PFandax,ax
;AX=1470H0
0
0
0
0orax,ax
;AX=1470H0
0
0
0
0xorax,ax
;AX=0000H0
1
0
0
1notax
;AX=FFFFH0
1
0
0
1testax,0f0f0h
;AX=FFFFH0
0
1
0
1注重:MOV和NOT指令不礙事標(biāo)志位;其他邏輯指令使CF=OF=0,依據(jù)結(jié)果礙事其他標(biāo)志位。
〔習(xí)題2.12〕假設(shè)例題2.32的程序段中,AX=08H,BX=10H,請(qǐng)講明每條指令執(zhí)行后的結(jié)果和各個(gè)標(biāo)志位的狀態(tài)。〔解答〕指令
;執(zhí)行結(jié)果
CFOFSFZFPFmovsi,ax
;SI=AX=0008H
-
-
-
-
-shlsi,1
;SI=2*AX=0010H
0
0
0
0
0addsi,ax
;SI=3*AX=0018H
0
0
0
0
1movdx,bx
;DX=BX=0010H
0
0
0
0
1movcl,03h
;CL=03H
0
0
0
0
1shldx,cl
;DX=8*BX=0080H
0
u
0
0
0subdx,bx
;DX=7*BX=0070H
0
0
0
0
0adddx,si
;DX=7*BX+3*AX=0088H
0
0
0
0
1注重:邏輯左移N次相當(dāng)于無符號(hào)整數(shù)乘以2的N次方,邏輯右移N次相當(dāng)于無符號(hào)整數(shù)除以2的N次方。移位指令依據(jù)移位的數(shù)據(jù)設(shè)置CF,依據(jù)移位后的結(jié)果礙事SF,ZF,PF。在進(jìn)行一位移位時(shí),依據(jù)最高符號(hào)位是否改變?cè)O(shè)置OF,如改變那么OF=1。另外,程序注釋用“u〞表示標(biāo)志無定義〔不確定〕,“-〞表示無礙事。
〔習(xí)題2.13〕編寫程序段完成如下要求:〔1〕用位操作指令實(shí)現(xiàn)AL〔無符號(hào)數(shù)〕乘以10〔2〕用邏輯運(yùn)算指令實(shí)現(xiàn)數(shù)字0~9的ASCII碼與非壓縮BCD碼的互相轉(zhuǎn)換〔解答〕〔1〕
;不考慮進(jìn)位
movbl,almovcl,3shlal,cl
;*8addal,bl
;shlbl,1
addal,bl;考慮進(jìn)位xorah,ahmovbx,axmovcl,3shlax,claddax,bx
;shlbx,1addax,bx〔2〕數(shù)字0~9的ASCII碼是:30h~39h非壓縮BCD碼的0~9是:00h~09h方法一:andal,0fh
;實(shí)現(xiàn)ASCII到非壓縮BCD碼的轉(zhuǎn)換oral,30h
;實(shí)現(xiàn)非壓縮BCD碼到ASCII的轉(zhuǎn)換方法二:xoral,30h
;求反D5D4位,其他不變;即高4位為3,那么變?yōu)?;高4位為0,那么變?yōu)?〔3〕movcl,4again:
shrdx,1
;實(shí)現(xiàn)邏輯右移
;采納“sardx,1〞,那么實(shí)現(xiàn)算術(shù)右移
rcrax,1
deccljnzagain
〔習(xí)題2.14〕AL=F7H〔表示有符號(hào)數(shù)-9〕,分不編寫用SAR和IDIV指令實(shí)現(xiàn)的除以2的程序段,并講明各自執(zhí)行后,所得的商是什么?〔解答〕〔1〕用sar編寫moval,0f7h
;-9送AL11111001saral,1
;結(jié)果:AL=11111100B=0FBH
即-5〔2〕用idiv編寫moval,0f7h
;-9送alcbw
;字節(jié)符號(hào)擴(kuò)展位字movbl,2
;注重除數(shù)不可為立即數(shù)idivbl
;結(jié)果:商為al=fch
(-4);余數(shù):ah=ffh(-1)結(jié)論:符號(hào)數(shù)的除法用idiv正確。
〔習(xí)題2.15〕數(shù)據(jù)段500h~600h處存放了一個(gè)字符串,講明以下程序段執(zhí)行后的結(jié)果:movsi,600hmovdi,601hmovax,dsmoves,axmovcx,256stdrepmovsb〔解答〕
〔習(xí)題2.16〕講明以下程序段的功能cldmovax,0fefhmovcx,5movbx,3000hmoves,bxmovdi,2000hrepstosw〔解答〕
將es:di(即3000:2000h或32000h)開始的5個(gè)單元的內(nèi)容置為0fefh。
〔習(xí)題2.17〕指令指針I(yè)P是通用存放器依舊專用存放器?有指令能夠直截了當(dāng)它賦值嗎?哪類指令的執(zhí)行會(huì)改變它的值?〔解答〕指令指針I(yè)P不是通用存放器,不可直截了當(dāng)賦值,屬于專用存放器。有且僅有循環(huán)、轉(zhuǎn)移、子程序調(diào)用和返回、中斷類等指令能夠改變它的值。
〔習(xí)題2.18〕操縱轉(zhuǎn)移類指令中有哪三種尋址方式?〔解答〕操縱轉(zhuǎn)移類指令的尋址方式:相對(duì)尋址、直截了當(dāng)尋址方式和間接尋址方式〔又能夠分成存放器和存儲(chǔ)器間接尋址〕。
〔習(xí)題2.19〕什么是短轉(zhuǎn)移shortjump、近轉(zhuǎn)移nearjump和遠(yuǎn)轉(zhuǎn)移farjump?什么是段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移?8086有哪些指令能夠?qū)崿F(xiàn)段間轉(zhuǎn)移?〔解答〕短轉(zhuǎn)移:指段內(nèi)-128~127之間的轉(zhuǎn)移,位移量用一個(gè)字節(jié)表示近轉(zhuǎn)移:指段內(nèi)±32K之間的轉(zhuǎn)移,位移量用一個(gè)字表示遠(yuǎn)轉(zhuǎn)移:指段間1MB范圍的轉(zhuǎn)移段內(nèi)轉(zhuǎn)移:指在同一個(gè)代碼段內(nèi)的轉(zhuǎn)移,能夠是短轉(zhuǎn)移或者近轉(zhuǎn)移段間轉(zhuǎn)移:指轉(zhuǎn)移到另外一個(gè)代碼段,確實(shí)是根基遠(yuǎn)轉(zhuǎn)移8086/8088CPU的JMP、CALL和INTn指令能夠?qū)崿F(xiàn)段間轉(zhuǎn)移
〔習(xí)題2.20〕8086的條件轉(zhuǎn)移指令的轉(zhuǎn)移范圍有多大?實(shí)際編程時(shí),你如何處理超出范圍的條件轉(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.21〕假設(shè)DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,[232F7H]=3280H,[264E5H]=2450H,試咨詢執(zhí)行以下段內(nèi)間接尋址的轉(zhuǎn)移指令后,轉(zhuǎn)移的有效地址是什么?〔1〕JMPBX〔2〕JMPTABLE[BX]〔3〕JMP[BX][SI]〔解答〕〔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.22〕判定以下程序段跳轉(zhuǎn)的條件〔1〕xorax,1e1eh
jeequal〔2〕testal,10000001b
jnzthere〔3〕cmpcx,64hjbthere〔解答〕〔1〕AX=1e1eh〔異或后為0〕〔2〕AL的D0或D7至少有一位為1〔3〕CX〔無符號(hào)數(shù)〕<64h
〔習(xí)題2.23〕設(shè)置CX=0,那么LOOP指令將循環(huán)多少次?例如:
movcx,0delay:
loopdelay〔解答〕216次。
〔習(xí)題2.24〕假設(shè)AX和SI存放的是有符號(hào)數(shù),DX和DI存放的是無符號(hào)數(shù),請(qǐng)用對(duì)比指令和條件轉(zhuǎn)移指令實(shí)現(xiàn)以下判定:〔1〕假設(shè)DX>DI,轉(zhuǎn)到above執(zhí)行;〔2〕假設(shè)AX>SI,轉(zhuǎn)到greater執(zhí)行;〔3〕假設(shè)CX=0,轉(zhuǎn)到zero執(zhí)行;〔4〕假設(shè)AX-SI產(chǎn)生溢出,轉(zhuǎn)到overflow執(zhí)行;〔5〕假設(shè)SI≤AX,轉(zhuǎn)到less_eq執(zhí)行;〔6〕假設(shè)DI≤DX,轉(zhuǎn)到below_eq執(zhí)行。〔解答〕〔1〕假設(shè)DX>DI,轉(zhuǎn)到above執(zhí)行cmpdx,dijaabove
;=j(luò)nbeabove〔2〕假設(shè)AX>SI,轉(zhuǎn)到greater執(zhí)行cmpax,sijggreater
;=j(luò)nlegreater〔3〕假設(shè)CX=0,轉(zhuǎn)到zero執(zhí)行cmpcx,0jzzero
;=j(luò)cxzzero
〔4〕假設(shè)AX-SI產(chǎn)生溢出,轉(zhuǎn)到overflow執(zhí)行;cmpax,sijooverflow〔5〕假設(shè)SI≤AX,轉(zhuǎn)到less_eq執(zhí)行;cmpsi,ax
;cmpax,sijleless_eq
;jgeless_eq〔6〕假設(shè)DI≤DX,轉(zhuǎn)到below_eq執(zhí)行。cmpdi,dx
;cmpdx,dijbebelow_eq
;jaebelow_eq
〔習(xí)題2.25〕有一個(gè)首地址為array的20個(gè)字的數(shù)組,講明以下程序段的功能。movcx,20movax,0movsi,axsum_loop:
addax,array[si]addsi,2loopsum_loopmovtotal,ax〔解答〕將首地址為array得20個(gè)字的數(shù)組求和,并將結(jié)果存進(jìn)total單元中。
〔習(xí)題2.26〕按照以下要求,編寫相應(yīng)的程序段:〔1〕起始地址為string的主存單元中存放有一個(gè)字符串〔長度大于6〕,把該字符串中的第1個(gè)和第6個(gè)字符〔字節(jié)量〕傳送給DX存放器?!?〕從主存buffer開始的4個(gè)字節(jié)中保持了4個(gè)非壓縮BCD碼,現(xiàn)按低〔高〕地址對(duì)低〔高〕位的原那么,將它們合并到DX中?!?〕編寫一個(gè)程序段,在DX高4位全為0時(shí),使AX=0;否那么使AX=-1?!?〕有兩個(gè)64位數(shù)值,按“小端方式〞存放在兩個(gè)緩沖區(qū)buffer1和buffer2中,編寫程序段完成buffer1-buffer2功能?!?〕假設(shè)從B800h:0開始存放有100個(gè)16位無符號(hào)數(shù),編程求它們的和,并把32位的和保持在DX.AX中。〔6〕字符串string包含有32KB內(nèi)容,將其中的’$’符號(hào)替換成空格?!?〕有一個(gè)100個(gè)字節(jié)元素的數(shù)組,其首地址為array,將每個(gè)元素減1〔不考慮溢出〕存于原處?!?〕統(tǒng)計(jì)以’$’結(jié)尾的字符串srting的字符個(gè)數(shù)?!步獯稹场?〕解答:movsi,0movdl,string[si]
;第1個(gè)字符送dl存放器:movdl,stirng[0]movsi,5movdh,string[si]
;第6個(gè)字符送dh存放器:movdl,stirng[5]〔2〕解答:xorsi,si
;si清零moval,buffer[si]
;第一字節(jié)incsimovah,buffer[si]
;第二字節(jié)movcl,4shlah,cl
;BCD碼移到高半字節(jié)oral,ah
;組合成壓縮BCD碼movdl,al
;存進(jìn)dl寄..incsimoval,buffer[si]
;第三字節(jié)incsimovah,buffer[si]
;第四字節(jié)movcl,4shlah,cl
;BCD碼移到高半字節(jié)oral,ah
;組合成壓縮BCD碼movdh,al
;存進(jìn)dh寄..〔3〕解答:testdx,0f000h
;testdh,0f0hjznext
;jnznextmovax,-1
;movax,0jmpagainnext:
movax,0
;movax,0ffffhagain:
...〔4〕解答:movax,wordptrbuffer1subax,wordptrbuffer2
;先減低16位movdx,wordptrbuffer1+2sbbdx,wordptrbuffer2+2
;后減高16位,需減低16位的借位〔5〕解答:movax,0b800h
movds,ax
;段地址
xorsi,si
;地址偏移量si=0
xordx,dx
;和的高字dx=0
movcx,99
;加的次數(shù)
movax,[si]
;第一個(gè)數(shù)again:
incsi
;指向下一個(gè)字單元
incsi
addax,[si]
;加下一個(gè)數(shù)
jnc
noc
;無進(jìn)位轉(zhuǎn)
incdx
;有進(jìn)位dx=dx+1noc:
deccx
;次數(shù)-1
jnzcx,again
;非0接著加〔6〕解答1:不使用串操作指令〔更好〕movsi,offsetstringmovcx,8000h
;32k=2^15=8000hagain:
cmpbyteptr[si],‘$’
;‘$’=24hjnznext
;不要采納jz進(jìn)行分支movbyteptr[si],‘
’
;‘’=20hnext:
incsiloopagain
;deccx;jnzagain〔6〕解答2:使用串操作指令movdi,offsetstringmoval,’$’movcx,8000hcldagain:
scasbjnznextmovbyteptres:[di-1],‘
’next:
loopagain〔7〕解答1:movsi,offsetarray
movcx,100again:
decbyteptr[si]incsiloopagain〔7〕解答2:xorsi,si
;si<--0movcx,100
;循環(huán)次數(shù)
again:
decarray[si]incsiloopagain〔7〕解答3:movsi,offsetarraymovdi,simovax,ds
moves,axmovcx,100cldagain:
lodsb
decalstosbloopagain〔8〕解答:xorsi,si
;si<--0coun:
cmpstring[si],'$'je
doneincsijmpcoundone:
...
〔習(xí)題2.27〕對(duì)下面要求,分不給出3種方法,每種方法只用一條指令?!?〕使CF=0
〔2〕使AX=0
〔3〕同時(shí)使AX=0和CF=0〔解答〕〔1〕解答:clcandax,axorax,ax〔2〕解答:xorax,axandax,0movax,0〔3〕解答:andax,0xorax,axsubax,ax
〔習(xí)題2.28〕參照本習(xí)題的示意圖,分析調(diào)用序列,畫出每次調(diào)用及返回時(shí)的堆棧狀態(tài)。其中CALL前是該指令所在的邏輯地址;另外,段內(nèi)直截了當(dāng)調(diào)用指令的機(jī)器代碼的字節(jié)數(shù)為3,段間直截了當(dāng)調(diào)用指令那么為5個(gè)字節(jié)?!步獯稹持鞒绦蜣D(zhuǎn)子suba時(shí)段內(nèi)調(diào)用:斷點(diǎn)1為2000h:0400h+3,轉(zhuǎn)子是只將IP壓棧。suba轉(zhuǎn)子subb時(shí)段間調(diào)用:斷點(diǎn)2為2000h:0840h+5,轉(zhuǎn)子時(shí)須將cs段地址和IP壓棧suba轉(zhuǎn)子subc時(shí)段內(nèi)調(diào)用:斷點(diǎn)3為2000h:0c021h+3,轉(zhuǎn)子是只將IP壓棧。注:壓棧時(shí)先修改sp再壓進(jìn)斷點(diǎn),彈棧時(shí)先彈出斷點(diǎn)再修改sp。
〔習(xí)題2.29〕AX、BX存放的是4位壓縮BCD表示的十進(jìn)制數(shù),請(qǐng)講明如下子程序的功能和出口參數(shù)。addal,bldaaxchgal,ahadcal,bhdaaxchgal,ahret〔解答〕壓縮BCD碼加法:AX←AX+BX出口參數(shù):AX=BCD碼和
〔習(xí)題2.30〕AAD指令是用于除法指令之前,進(jìn)行非壓縮BCD碼調(diào)整的。實(shí)際上,處理器的調(diào)整過程是:AL←AH×10+AL,AH←0。要是指令系統(tǒng)沒有AAD指令,請(qǐng)用一個(gè)子程序完成那個(gè)調(diào)整工作?!步獯稹硈hlah,1
;ah=2*a
(設(shè)原ah=a)
movdl,ah
;dl=2*a
movcl,2
;設(shè)定移位次數(shù)
shlah,cl
;ah=8*a
addah,dl
;ah=10*a
addal,ah
;al=10*a+al
xorah,ah
;清零ah
int3
;返回DOS注重:進(jìn)口:AX中存放有“和〞〔兩非壓縮BCD碼〕出口:AL中已為調(diào)整后的二進(jìn)制數(shù)
〔習(xí)題2.31〕解釋如下有關(guān)中斷的概念:〔1〕內(nèi)部中斷和外部中斷〔2〕單步中斷和斷點(diǎn)中斷〔3〕除法錯(cuò)中斷和溢出中斷〔4〕中斷向量號(hào)和中斷向量表〔解答〕〔1〕內(nèi)部中斷是由于8086CPU內(nèi)部執(zhí)行程序引起的程序中斷;外部中斷是來自8086CPU之外的緣故引起的程序中斷;〔2〕單步中斷是假設(shè)單步標(biāo)志TF為1,那么在每條指令執(zhí)行結(jié)束后產(chǎn)生的中斷;斷點(diǎn)中斷是供調(diào)試程序使用的,它的中斷類型號(hào)為3通常調(diào)試程序時(shí),把程序按程序的任務(wù)分成幾段,然后,每段設(shè)一個(gè)段點(diǎn);〔3〕除法錯(cuò)中斷是在執(zhí)行除法指令時(shí),假設(shè)除數(shù)為0或商超過了存放器所能表達(dá)的范圍產(chǎn)生的中斷;溢出中斷是在執(zhí)行溢出中斷指令I(lǐng)NTO時(shí),假設(shè)溢出標(biāo)志OF為1時(shí)產(chǎn)生的中斷;〔4〕中斷向量號(hào)是中斷類型號(hào);中斷向量表是中斷向量號(hào)與它所對(duì)應(yīng)的中斷效勞程序起始地址的轉(zhuǎn)換表。
〔習(xí)題2.32〕試對(duì)比INTn和段間CALL指令、IRET和段間RET指令的功能。〔解答〕INTn響應(yīng)中斷時(shí),除象CALL保衛(wèi)斷點(diǎn)外,還應(yīng)保衛(wèi)FR;段間CALL指令用在主程序中實(shí)現(xiàn)子程序的調(diào)用。IRET返回時(shí),除象RET恢復(fù)斷點(diǎn)外,還應(yīng)恢復(fù)FR;子程序執(zhí)行完成后,應(yīng)返回主程序中接著執(zhí)行,這一功能由RET指令完成。
〔習(xí)題2.33〕什么是系統(tǒng)功能調(diào)用?匯編語言中,它的一般格式是如何樣的?〔解答〕系統(tǒng)功能調(diào)用是用戶在程序一級(jí)請(qǐng)示操作系統(tǒng)效勞的一種手段,它不是一條簡(jiǎn)單的硬指令,而是帶有一定功能號(hào)的“訪指令〞,它的功能并非由硬件直截了當(dāng)提供,而是由操作系統(tǒng)操作系統(tǒng)中的一段程序完成的,即由軟件方法實(shí)現(xiàn)的匯編語言中,它的一般格式是分如下四步進(jìn)行:〔1〕在AH存放器置系統(tǒng)功能調(diào)用號(hào);〔2〕在指定的存放器中設(shè)置進(jìn)口參數(shù);〔3〕用INT21H(或ROM—BIOS的中斷向量號(hào))指令執(zhí)行功能調(diào)用;〔4〕據(jù)出口參數(shù)分析功能調(diào)用運(yùn)行情況。
〔習(xí)題2.34〕補(bǔ)充例2.40,當(dāng)有溢出時(shí)顯示“Error!Overflow!〞,無溢出時(shí)顯示“OK〞?!步獯稹硂kmsg
db‘OK’,‘$’errmsg
db‘Error!Overflow!’,‘$’…
movax,Xsubax,Yjooverflowmovdx,offsetokmsgjmpnextoverflow:
movdx,errmsgnext:
movah,9
int21h錯(cuò)誤解答:movax,Xsubax,Yjooverflowmovdx,offsetokmsg
okmsg
db‘OK’,‘$’
movdx,errmsg
;錯(cuò)誤1:數(shù)據(jù)定義在代碼中movah,9int21hoverflow:
errmsgdb‘Error!Overflow!’,‘$’
movdx,errmsg
;錯(cuò)誤2:缺少JMP指令movah,9int21h
〔習(xí)題2.35〕補(bǔ)充例2.42,顯示“1〞的個(gè)數(shù);注重首先將個(gè)數(shù)轉(zhuǎn)換為ASCII碼。〔解答〕andal,7fh
;使d7=0movdl,al
;轉(zhuǎn)存于dljnpnext
;奇數(shù)個(gè)1轉(zhuǎn)
oral,80h
;偶數(shù)個(gè)1使d7=1next:
xorbl,bl
;紀(jì)錄1的個(gè)數(shù)dl=0movcx,8
;移位次數(shù)again:
shldl,1
;邏輯左移1次jncdesp
;如cf=0轉(zhuǎn)incbl
;否那么cf=1個(gè)數(shù)加1desp:
loopagain
;cx=cx-1如cx不等于0,循環(huán)orbl,30h
;個(gè)數(shù)變?yōu)锳SCII碼movah,02h
;在CRT上顯示個(gè)數(shù)movdl,blint21hret
〔習(xí)題2.36〕先提示輸進(jìn)數(shù)字“InputNumber:0~9〞,然后在下一行顯示輸進(jìn)的數(shù)字,結(jié)束;要是不是鍵進(jìn)了0~9數(shù)字,就提示錯(cuò)誤“Error!〞,接著等待輸進(jìn)數(shù)字?!步獯稹?數(shù)據(jù)段str1
db'InputNumber:0~9:',0dh,0ah,'$'
str2
db'Error!',0dh,0ah,'$';代碼段movah,09h
;顯示str1字符串movdx,offsetstr1int21hgetkey:
movah,1
;調(diào)用DOS功能int21hcmp
al,'0'jberror
;小于0,出錯(cuò)處理cmpal,'9'jaerror
;大于9,出錯(cuò)處理movah,02h
;調(diào)用DOS顯示字符功能,顯示該數(shù)字movdl,alint21h...
;終止程序執(zhí)行,返回DOSerror:
movah,09h
;出錯(cuò),調(diào)用DOS功能顯示str2字符串movdx,offsetstr2int21hjmpgetkey
;返回按鍵
〔習(xí)題2.37〕從鍵盤輸進(jìn)一個(gè)字符串〔不超過255個(gè)〕,將其中的小寫字母轉(zhuǎn)換成大寫字母,然后按原來的順序在屏幕上顯示。〔解答〕思路:參考P67例2.52用0ah號(hào)DOS系統(tǒng)功能調(diào)用,從鍵盤輸進(jìn)一個(gè)字符串,然后從鍵盤緩沖區(qū)逐個(gè)取字符,在“a〞與“z〞之間的字符為小寫字母,需要轉(zhuǎn)換為大寫字母〔減往20h〕,其他不變。.modelsmall.stack.dataarray
db255db0array1
db255dup('$')array2
db0dh,0ah,'$'.code.startupmovah,0ah
;鍵盤輸進(jìn)字符串movdx,offsetarrayint21hmovdx,offsetarray2
;回車換行movah,09hint21hmovbx,offsetarray1again:
moval,[bx]cmpal,'$'jzdonecmpal,'a'
;小于a和大于z的字符不是小寫字母jbnextcmpal,'z'janextsubal,20h
;在a和z之間的字符才是小寫字母,轉(zhuǎn)換為大寫mov[bx],al
;保持到原位置next:
incbxjmpagaindone:
mo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 保健品代理商的合同義務(wù)
- 權(quán)威購買系統(tǒng)協(xié)議合同格式
- 英文版購銷合同注意事項(xiàng)
- 爆破作業(yè)合同范本示例
- 煤炭供應(yīng)銷售合同范本
- 電腦定制配置合同
- 外教教學(xué)成果產(chǎn)業(yè)化合同
- 2024招募會(huì)員合同樣板
- 2024商業(yè)用地土地租憑合同
- 2024包車運(yùn)輸合同范本
- (2024年)全新保健食品培訓(xùn)課件
- 復(fù)習(xí)專題三-函數(shù)的單調(diào)性
- 黃芩苷行業(yè)分析
- 高等職業(yè)技術(shù)教育《現(xiàn)代物業(yè)管理》專業(yè)人才培養(yǎng)方案(普招三年制)
- 長螺旋鉆孔壓灌砼樁施工及質(zhì)量控制技術(shù)范文
- 預(yù)防醫(yī)院內(nèi)低溫燙傷課件
- 2024年時(shí)政考題及答案(200題)
- 《銷售拜訪八步驟》課件
- 城市發(fā)展基金投融資模式及退出機(jī)制
- 工會(huì)心理健康知識(shí)講座
- TCEEMA 0205-2023 中國電力設(shè)備管理協(xié)會(huì)發(fā)布 新能源智慧場(chǎng)站數(shù)據(jù)采集、整理、安全、綜合管理技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論