微機接口答案_第1頁
微機接口答案_第2頁
微機接口答案_第3頁
微機接口答案_第4頁
微機接口答案_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第三章1.分別說明下列指令的源操作數(shù)和目的操作數(shù)各采用什么尋址方式。(1)MOVAX,2408H(2)MOVCL,0FFH(3)MOVBX,SI(4)MOV5BX,BL(5)MOVBP+100H,AX(6)MOVBX+DI,$(7)MOVDX,ES:BX+SI(8)MOVVALBP+DI,DX(9)INAL,05H(10)MOVDS,AX答:(1)立即數(shù),寄存器(2)立即數(shù),寄存器(3)寄存器間接,寄存器(4)寄存器,寄存器相對(5)寄存器,寄存器相對(6)立即數(shù),基址變址(7)基址變址,寄存器(8)寄存器,相對基址變址(9)直接端口尋址,寄存器(10)寄存器,寄存器2.已知:DS=1000H

2、,BX=0200H,SI=02H,內(nèi)存10200H10205H單元的內(nèi)容分別為10H,2AH,3CH,46H,59H,6BH。下列每條指令執(zhí)行完后AX寄存器的內(nèi)容各是什么?(1)MOVAX,0200H(2)MOVAX,200H(3)MOVAX,BX(4)MOVAX,3BX(5)MOVAX,BX+SI(6)MOVAX,2BX+SI答:(1)0200H(2)2A10H(3)0200H(4)5946H(5)463CH(6)6B59H3.設(shè)DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,數(shù)據(jù)段中變量名為VAL的偏移地址值為0

3、030H,試說明下列源操作數(shù)字段的尋址方式是什么?物理地址值是多少?(1)MOVAX,100H(2)MOVAX,VAL(3)MOVAX,BX(4) MOVAX,ES:BX(5)MOVAX,SI(6)MOVAX,BX+10H(7) MOVAX,BP(8)MOVAX,VALBPSI(9) MOVAX,VALBXDI(10)MOVAX,BPDI答:(1)直接,10100H(2)直接,10030H(3)寄存器間接,10100H(4)寄存器間接,20100H(5)寄存器間接,100A0H(6)寄存器相對,10110H(7)寄存器間接,35200H(8)相對基址變址,352D0H(9)相對基址變址,101

4、54H(10)基址變址,35224H4. 寫出下列指令的機器碼( 1) MOVAL,CL(2)MOVDX,CX(3)MOVBX+100H,3150H答:(1)1000101011000001B( 2) 1000101111010001B( 3) 110001111000011100000000000000010101000000110001B5. 已知程序的數(shù)據(jù)段為:DATASEGMENTADB$,10HBDBCOMPUTERCDW1234H,0FFHDDB5DUP(?)EDD1200459AHDATAENDS求下列程序段執(zhí)行后的結(jié)果是什么。MOVAL,AMOVDX,CXCHGDL,AMOVB

5、X,OFFSETBMOVCX,3BXLEABX,DLDSSI,ELESDI,E答:MOVAL,AAL=24HMOVDX,CDX=1234HXCHGDL,ADL=24H,A=34HMOVBX,OFFSETBBX=2MOVCX,3BXCX=5550HLEABX,DBX=000EHLDSSI,EDS=1200H,SI=459AHLESDI,EES=1200H,DI=459AH6. 指出下列指令中哪些是錯誤的,錯在什么地方。(1)MOVDL,AX(2)MOV8650H,AX(3)MOVDS,0200H(4)MOVBX,1200H(5)MOVIP,0FFH(6)MOVBX+SI+3,IP(7)MOVAX

6、,BXBP(8)MOVAL,ES:BP(9)MOVDL,SIDI(10)MOVAX,OFFSET0A20H(11)MOVAL,OFFSETTABLE(12)XCHGAL,50H(13)INBL,05H(14)OUTAL,0FFEH答:(1)長度不匹配(2)立即數(shù)不能做目的操作數(shù)(3)段寄存器不能用立即數(shù)賦值(4)兩個內(nèi)存單元不能直接傳送數(shù)據(jù)(5)IP不能用指令直接修改(6)指令中不能出現(xiàn)IP( 7) BX/BP應(yīng)與SI/DI搭配(8)正確( 9) SI/DI應(yīng)與BX/BP搭配(10)OFFSET后應(yīng)跟內(nèi)存單元(11)偏移地址為16位,AL長度不夠(12)立即數(shù)不能用于XCHG( 13) IN必

7、須用AL/AX(14)操作數(shù)順序反向;地址應(yīng)為8位7.已知當(dāng)前數(shù)據(jù)段中有一個十進制數(shù)字09的7段代碼表,其數(shù)值依次為40H,79H,24H,30H,19H,12H,02H,78H,00H,18H。要求用XLAT指令將十進制數(shù)57轉(zhuǎn)換成相應(yīng)的7段代碼值,存到BX寄存器中,試寫出相應(yīng)的程序段。答:DATASEGMENTTABLEDB40H,79H,24H,30H,19H,12H,02H,78H,00H,18HDATAENDSMOVAL,5MOVBX,OFFSETTABLEXLATTABLEMOVCL,ALMOVAL,7XLATTABLEMOVBL,ALMOVBH,CL8.已知當(dāng)前SS=1050H,

8、SP=0100H,AX=4860H,BX=1287H,試用示意圖表示執(zhí)行下列指令過程中,堆棧中的內(nèi)容和堆棧指針SP是怎樣變化的。PUSHAXPUSHBXPOPBXPOPAXMl f 1指小版行腦9.下列指令完成什么功能?C2)由竹PUSH AX布(1)指(1)ADDAL,DH(2)ADCBX,CX(3)SUBAX,2710H(4)DECBX(5)NEGCX(6)INCBLMULBX(8)DIVCL答:(1)AL+DH-AL(2)BX+CX+CF-BX(3)AX-2710H-AX(4)BX-1-BX(5)0-CX-CX(6)BL+1-BL(7)AX*BX-DX,AX(8)AX/CL商AL,余數(shù)-

9、AH10.已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每條指令執(zhí)行后的結(jié)果是什么?標(biāo)志位CF等于什么?(1)ANDAH,CL(2)ORBL,30H(3)NOTAX(4)XORCX,0FFF0H(5)TESTDH,0FH(6)CMPCX,00HSHRDX,CL(8)SARAL,1(9)SHLBH,CL(10)SALAX,1(11)RCLBX,1(12)RORDX,CL答:(1)AX=0408H,CF=0(2)BX=0F36H,CF=0(3)AX=0DAF7H,CF不變(4)CX=0FFF4H,CF=0(5)DX=01864H,CF=0(6)CX=0004H,

10、CF=0(7)DX=0186H,CF=0(8)AX=2504H,CF=0(9)BX=0F036H,CF=0(10)AX=4A10H,CF=0(11)BX=1E6C/1E6DH,CF=0(12)DX=4186H,CF=011. 假設(shè)數(shù)據(jù)段定義如下:DATASEGMENTSTRINGDBThePersonalComputer&TVDATAENDS試用字符串操作等指令編程完成以下功能:( 1) 把該字符串傳送到附加段中偏移量為GET_CHAR開始的內(nèi)存單元中。(2)比較該字符串是否與TheCompute相同,若相同則將AL寄存器的內(nèi)容置1,否則置0。并要求將比較次數(shù)送到BL寄存器中。(3)檢

11、查該字符串是否有&,若有則用空格字符將其替換。(4)把字符串大寫字母傳送到附加段中以CAPS開始的單元中,其余字符傳到以CHART開始的單元中。然后將數(shù)據(jù)段中存儲上述字符串的單元清0。答:(1)CLDLEASI,STRINGLEADI,GET_CHARMOVCX,26REPMOVSB(2)補充在附加段定義STRING1DBThecomputerMOVAL,1CLDLEASI,STRINGLEADI,STRING1MOVCX,12REPZCMPSBJZSKIPMOVAL,0SKIP:MOVBX,12SUBBX,CX( 3) MOVAX,DATAMOVES,AXCLDMOVAL,'

12、&'LEADI,STRINGMOVCX,26NEXT:REPNESCASBJZFINDJMPEXITFIND:MOVBYTEPTRDI-1,''JCXZEXITJMPNEXTEXIT:( 4) LEASI,STRINGLEADI,CAPSLEABX,CHARTMOVCX,26NEXT:MOVAL,SICMPAL,AJBOTHERCMPAL,ZJAOTHERMOVES:DI,ALINCDIJMPSKIPOTHER:MOVES:BX,ALINCBXSKIP:MOVBYTEPTRSI,0INCSILOOPNEXT12 .編程將AX寄存器中的內(nèi)容以相反的順序傳送到DX寄

13、存器中,并要求AX中的內(nèi)容不被破壞,然后統(tǒng)計DX寄存器中1的個數(shù)是多少。答:MOVBL,0PUSHAXMOVDX,0MOVCX,16NEXT:SHLAX,1JNCSKIPINCBLSKIP:RCRDX,1LOOPNEXTSTOP:POPAX13 .設(shè)CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300H)=4800H,(20302H)=00FFH,TABLE=0500H,PROG_N標(biāo)號的地址為1200:0278H,PROG_F標(biāo)號的地址為3400H:0ABCH。說明下列每條指令執(zhí)行完后,程序?qū)⒎謩e轉(zhuǎn)移到何處

14、執(zhí)行?(1)(2)(3)JMPPROGNJMPBXJMPBX(4)(5)JMPFARPROGFJMPDWORDPTRBXSOOOH:<12ZE101H< 5FO+QOH用斗歸虛為" M*) XF-CLOOM*2-01 OZU, 入伙 ,WOOH: gOE<J1H03f=rEM EL(MOOllChUK.tl九 M JJLj Q 5H.自產(chǎn)QOOH KMMH-5CKOM= O3TEH50WII. QtOCIlFIHOH1211500QH.5MOFTp。;下XF02H«-SPOJFI50Q<Jrt; 03FEMOOH12M(5) 00FFH : 4800

15、H指令長度為 2,貝U IP=0100H+2=0102H ,入棧14.在下列程序段括號中分別填入以下指令(1) LOOP NEXT (2) LOOPE NEXT 試說明在這三種情況下,程序段執(zhí)行完后,(3) LOOPNE NEXTAX , BX , CX , DX的內(nèi)容分別是什么START: MOV AX,01HMOV BX,02HMOV DX,03H如將上述指令中的操作碼JMP改成CALL,則每條指令執(zhí)行完后,程序轉(zhuǎn)向何處執(zhí)行?并請畫圖說明堆棧中的內(nèi)容和堆棧指針如何變化。(2)1200H:0300H(3)1200H:4800H(4)3400H:0ABCH(5)00FFH:4800H答:(1)

16、1200H:0278H將操作碼JMP改成CALL后:(1)1200H:0278H指令長度為3,貝UIP=0100H+3=0103H,入棧SCKXJMzOOOH03FEH8口CMOOM。1日i-VOCPtlU120-QKxoacsoliMXXPHi口"ifeLlHttLJChOLi*027U1C5MOVCX,04HNEXT:INCAXADDBX,AXSHRDX,1()答:(1)AX=05HBX=10HCX=0DX=0( 2) AX=02HBX=04HCX=03HDX=01H( 3) AX=03HBX=07HCX=02HDX=015. 某班有7個同學(xué)英語成績低于80分,分?jǐn)?shù)存在ARRAY

17、數(shù)組中,試編程完成以下工作:(1)給每人加5分,結(jié)果存到NEW數(shù)組中(2)把總分存到SUM單元中答:DATASEGMENTARRAYDB?,?,?,?,?,?,?NEWDB7DUP(?)SUMDW0DATAENDSMOVAX,DATAMOVDS,AX( 1) LEASI,ARRAYLEADI,NEWMOVCX,7NEXT:MOVAL,SIADDAL,5MOVDI,ALINCSIINCDILOOPNEXT( 2) LEASI,ARRAYCLCSP5000H:0000H5000H:03FCH5000H:03FEH5000H:0400HMOVCX,7NEXT1:MOVAL,SIMOVAH,0ADCS

18、UM,AXINCSILOOPNEXT116. 中斷向量表的作用是什么?它放在內(nèi)存的什么區(qū)域內(nèi)?中斷向量表中的什么地址用于類型3的中斷?答:中斷向量表用來存放中斷服務(wù)程序的入口地址。8086的256類中斷的入口地址要占用1K字節(jié),位于內(nèi)存00000H003FFH的區(qū)域內(nèi)。中斷向量表中0000cH0000FH用于類型3的中斷。17 .設(shè)類型2的中斷服務(wù)程序的起始地址為0485:0016H,它在中斷向量表中如何存放?答:物理地址內(nèi)容00008H16H00009H00H0000AH85H0000BH04H18 .若中斷向量表中地址為0040H中存放240BH,0042H單元里存放的是D169H,試問:

19、(1)這些單元對應(yīng)的中斷類型是什么?(2)該中斷服務(wù)程序的起始地址是什么?答:(1)10H(2)D169H:240BH19.簡要說明8086響應(yīng)類型04中斷的條件是什么?答:類型0:除法錯中斷執(zhí)行除法指令時,若除數(shù)為0或所得商超過寄存器能容納的范圍,則自動產(chǎn)生類型0中斷。類型1:單步中斷若CPU的單步標(biāo)志TF=1,則每執(zhí)行完一條指令后,自動產(chǎn)生類型1中斷。類型2:不可屏蔽中斷NMI當(dāng)8086的NMI引腳上接收到由低變高的電平變化時,將自動產(chǎn)生類型2中斷。類型3:斷點中斷若在程序中某位置設(shè)置斷點,當(dāng)程序執(zhí)行到該斷點時,則產(chǎn)生類型3中斷。類型4:溢出中斷若溢出標(biāo)志OF=1,則可由溢出中斷指令I(lǐng)NT

20、O產(chǎn)生類型4中斷。第四章1. 下列變量各占多少字節(jié)?A1DW23H,5876HA2DB3DUP(?),0AH,0DH,$A3DD5DUP(1234H,567890H)A4DB4DUP(3DUP(1,2,ABC)答:A1占4個字節(jié)A2占6個字節(jié)A3占40個字節(jié)A4占60個字節(jié)2. 下列指令完成什么功能?MOVAX,00FFHAND1122H+3344HMOVAL,15GE1111BMOVAX,00FFHLE255+6/5ANDAL,50MOD4ORAX,0F00FHAND1234OR00FFH答:(1)將0066H傳送給AX(2)將0FFH傳送給AL(3)將0FFFFH傳送給AX( 4) AND

21、AL,02H( 5) ORAX,00FFH3. 有符號定義語句如下:BUFDB3,4,5,123ABUFDB0LEQUABUF-BUF求L的值為多少?答:L=64. 假設(shè)程序中的數(shù)據(jù)定義如下:PARDW?PNAMEDB16DUP(?)COUNTDD?PLENTHEQU$-PAR求PLENTH的值為多少?表示什么意義?答:PAR的偏移地址為0,PLENTH當(dāng)前偏移地址$=2+16+4=22,$-PAR=22,故PLENTH的值為22。若在PLENTH所在行有變量定義,則$表示該變量的偏移地址,即$表示PLENTH所在行的當(dāng)前偏移地址。故PLENTH表示從當(dāng)前行到PAR之間定義的變量所占的字節(jié)個數(shù)

22、。5. 對于下面的數(shù)據(jù)定義,各條MOV指令執(zhí)行后,有關(guān)寄存器的內(nèi)容是什么?DA1DB?DA2DW10DUP(?)DA3DBABCDMOVAX,TYPEDA1MOVBX,SIZEDA2MOVCX,LENGTHDA3答:AX=1,BX=20,CX=16. 下段程序完成后,AH等于什么?INAL,5FHTESTAL,80HJZL1MOVAH,0JMPSTOPL1:MOVAH,0FFHSTOP:HLT答:討論從端口5FH輸入的數(shù)據(jù)最高位的情況。若最高位為1,則AH=0;若最高位為0,則AH=0FFH。7. 編程序完成下列功能:(1)利用中斷調(diào)用產(chǎn)生5秒延時。(2)利用中斷調(diào)用,在屏幕上顯示19之間隨機

23、數(shù)。答:(1)可以利用中斷類型1CH來處理,因為在系統(tǒng)時鐘的中斷處理程序中,時鐘中斷一次要調(diào)用一次INT1CH,即每隔55ms,產(chǎn)生一次1CH中斷,要產(chǎn)生5秒延時,只要中斷5s/55ms=91次即可。又因1CH中斷處理程序中只有一條IRET指令,故可將用戶的程序代替原有的INT1CH程序。DATASEGMENTCOUNTDW91;計數(shù)器MESSDB5sdelayed!,0AH,0DH,$DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATA,ES:DATASTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOV

24、AL,1CH;得到原中斷向量MOVAH,35HINT21HPUSHES;存儲原中斷向量PUSHBXPUSHDSMOVDX,OFFSETDELAY;DELAY的偏移地址和段地址MOVAX,SEGDELAYMOVDS,AXMOVAL,1CH;設(shè)置中斷向量MOVAH,25HINT21HPOPDSINAL,21H;設(shè)置中斷屏蔽位ANDAL,0FEHOUT21H,ALSTIMOVDI,2000H;主程序延遲,在執(zhí)行此段程序期間A1:MOVSI,3000H;產(chǎn)生中斷A2:DECSIJNZA2DECDIJNZA1POPDX;取原中斷向量POPDSMOVAL,1CHMOVAH,25HINT21HRETMAIN

25、ENDPDELAYPROCNEARPUSHDSPUSHAXPUSHCXPUSHDXMOVAX,DATAMOVDS,AXSTIDECCOUNT;5秒計數(shù)JNZEXITMOVDX,OFFSETMESS;顯示信息MOVAH,09HINT21HMOVCOUNT,91;5秒的值EXIT:CLIPOPDXPOPCXPOPAXPOPDSIRETDELAYENDPCODEENDSENDSTART(2)可以利用INT1AH,讀取當(dāng)前時間的1/100秒為隨機數(shù)。CODESEGMENTASSUMECS:CODESTART:MOVAH,0INT1AH;讀取當(dāng)前時間CH:CL=時:分MOVAL,DL;DH:DL=秒:1

26、/100秒MOVAH,0MOVBL,9DIVBLINCAHMOVDL,AHADDDL,30HMOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART8. 編兩個通過過程完成將AX中存放的二進制數(shù)轉(zhuǎn)換成壓縮型BCD碼以及將BCD碼轉(zhuǎn)換成二進制數(shù)。答:(1)將AX中的二進制數(shù)先后除以1000,100和10,每次除法所得的商,即是BCD數(shù)的千位、百位和十位數(shù),余數(shù)是個位數(shù)。子程序名:B2TOBCD輸入?yún)?shù):AX=十六位二進制數(shù)輸出參數(shù):CF=0,則AX=4位壓縮型BCD碼。CF=1,則要轉(zhuǎn)換的數(shù)大于9999,AX不變。使用寄存器:CX:存放除數(shù),DX:存放中間結(jié)果。B

27、2TOBCDPROCFARCMPAX,9999;AX>9999,則CF置1JBETRANSTCJMPEXITTRAN:PUSHCXPUSHDXSUBDX,DX;DX清0MOVCX,1000;計算千位數(shù)DIVCXXCHGAX,DX;商在DX中,余數(shù)在AX中MOVCL,4SHLDX,CL;DX左移4位MOVCL,100;計算百位數(shù)DIVCLADDDL,AL;百位數(shù)加到DL中,DX左移4位MOVCL,4SHLDX,CLXCHGAL,AH;余數(shù)保留在AL中SUBAH,AHMOVCL,10;計算十位數(shù)DIVCLADDDL,AL;十位數(shù)加到DL中,DX左移4位MOVCL,4SHLDX,CLADDDL

28、,AH;加個位數(shù)MOVAX,DX;結(jié)果送到AX中POPDXPOPCXEXIT:RETB2TOBCDENDP(2)將AX中4位BCD碼順序乘以1000,100,10和1,然后求和即得。子程序名:BCDTOB2輸入?yún)?shù):AX=4位壓縮BCD碼輸出參數(shù):AX=十六位二進制數(shù)使用寄存器:BX:暫存數(shù)據(jù),CX:存放乘數(shù),DX:存放中間結(jié)果BCDTOB2PROCFARPUSHBXPUSHCXPUSHDXMOVBX,AXMOVCL,4ROLAX,CLANDAX,000FHMOVCX,1000;乘以1000MULCXMOVDX,AXMOVAX,BXMOVCL,8ROLAX,CLANDAX,000FHMOVCL

29、,100;乘以100MULCLADDDX,AXMOVAX,BXMOVCL,4SHRAX,CLANDAX,000FHMOVCL,10;乘以10MULCLADDDX,AXANDBX,000FHADDDX,BXMOVAX,DXPOPDXPOPCXPOPBXRETBCDTOB2ENDP9. 編寫兩個通用過程,一個完成ASCII碼轉(zhuǎn)換成二進制數(shù)功能,另一個完成ASCII字符顯示輸出功能。答:(1)將AX中兩位ASCII碼先轉(zhuǎn)化成數(shù)字,然后AH*10+AL。子程序名:ASCIITOB2輸入?yún)?shù):AX=2位ASCII碼輸出參數(shù):AX=轉(zhuǎn)換后二進制數(shù)使用寄存器:BX,CX,DXASCIITOB2PROCFAR

30、PUSHBXPUSHCXPUSHDXMOVBX,AXSUBAH,30HMOVAL,AHMOVCL,10;乘以10MULCLMOVDX,AXMOVAX,BXSUBAL,30HMOVAH,0ADDAX,DXPOPDXPOPCXPOPBXRETASCIITOB2ENDP(2)使用2號DOS功能調(diào)用顯示字符。子程序名:DISPLAY輸入?yún)?shù):AX=2位ASCII碼輸出參數(shù):無使用寄存器:BX,DXDISPLAYPROCFARPUSHBXPUSHDXMOVBX,AXMOVDL,AHMOVAH,2INT21HMOVAX,BXMOVDL,ALMOVAH,2INT21HPOPDXPOPBXRETDISPLAY

31、ENDP10. 編制兩個通用過程,完成十六進制數(shù)轉(zhuǎn)換成ASCII碼并將ASCII碼字符顯示。答:(1)子程序名:HEXTOASC輸入?yún)?shù):AX:4位十六進制數(shù)輸出參數(shù):DX,AX:4位ASCII碼,DX高2位,AX低2位使用寄存器:BX,CX,DXHEXTOASCPROCFARPUSHBXPUSHCXPUSHDXMOVBX,AXMOVCL,4;轉(zhuǎn)換AH高4位SHRAX,CLANDAX,0F00HADDAH,30HCMPAH,3AHJBA1ADDAH,7A1:MOVDH,AHMOVAX,BX;轉(zhuǎn)換AH低4位ANDAX,0F00HADDAH,30HCMPAH,3AHJBA2ADDAH,7A2:MO

32、VDL,AHMOVBH,BL;轉(zhuǎn)換AL高4位MOVCL,4SHRBL,CLADDBL,30HCMPBL,3AHJBA3ADDBL,7A3:MOVAH,BLANDBH,0FH;轉(zhuǎn)換AL低4位ADDBH,30HCMPBH,3AHJBA4ADDBH,7A4:MOVAL,BHPOPDXPOPCXPOPBXRETHEXTOASCENDP(2)子程序名:DISPLAYASC輸入?yún)?shù):DX,AX:4位ASCII碼輸出參數(shù):無使用寄存器:BX,CXDISPLAYASCPROCFARPUSHBXPUSHCXMOVBX,DXMOVCX,AXMOVDL,BHMOVAH,02HINT21HMOVDL,BLINT21H

33、MOVDL,CHINT21HMOVDL,CLINT21HMOVDL,HINT21HPOPCXPOPBXRETDISPLAYASCENDP11. 某程序可從鍵盤接收命令(05),分別轉(zhuǎn)向6個子程序,子程序入口地址分別為P0P5,編制程序,用跳轉(zhuǎn)表實現(xiàn)分支結(jié)構(gòu)。答:DATASEGMENTTABLEDW6DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,TABLEMOVWORDPTRSI,OFFSETP0MOVWORDPTRSI+2,OFFSETP1MOVWORDPTRSI+4,OFFSETP2MO

34、VWORDPTRSI+6,OFFSETP3MOVWORDPTRSI+8,OFFSETP4MOVWORDPTRSI+10,OFFSETP5MOVAH,1INT21HSUBAL,30HSHLAL,1MOVAH,0MOVSI,AXJMPTABLESIP0:P1:P2:P3:P4:P5:MOVAH,4CHINT21HCODEENDSENDSTART12. 在首地址為TABLE的數(shù)組中按遞增次序存放著100個16位補碼數(shù),編寫一個程序,把出現(xiàn)次數(shù)最多的數(shù)及其出現(xiàn)次數(shù)分別存放于AX和BL中。答:DATASEGMENTTABLEDW100DUP(?);數(shù)組中的數(shù)據(jù)是按增序排列的NUMDW?COUNTDW0D

35、ATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AX;給DS賦值BEGIN:MOVCX,100;循環(huán)計數(shù)器MOVSI,0NEXT:MOVDX,0MOVAX,TABLESICOMP:CMPTABLESI,AX;計算一個數(shù)的出現(xiàn)次數(shù)JNEADDRINCDXADDSI,2LOOPCOMPADDR:CMPDX,COUNT;此數(shù)出現(xiàn)的次數(shù)最多嗎?JLEDONEMOVCOUNT,DX;目前此數(shù)出現(xiàn)的次數(shù)最多,記下次數(shù)MOVNUM,AX;記下此數(shù)DONE:L

36、OOPNEXT;準(zhǔn)備取下一個數(shù)MOVCX,COUNT;出現(xiàn)最多的次數(shù)存入(CX)MOVAX,NUM;出現(xiàn)最多的數(shù)存入(AX)RETMAINENDPCODEENDS;以上定義代碼段ENDSTART13. 將鍵盤上輸入的十六進制數(shù)轉(zhuǎn)換成十進制數(shù),在屏幕上顯示。答:DATASEGMENTSTRINGDB'INPUT4HEXNUM:',0AH,0DH,'$'NUMDB10DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,STRING;顯示提示信息MOVAH,9INT21

37、HMOVBP,4MOVDX,0CONT:MOVCL,4;輸入4位十六進制數(shù)DXSHLDX,CLD1:MOVAH,1INT21HCMPAL,'0'JBD1CMPAL,'F'JAD1CMPAL,'A'JBA1SUBAL,7A1:SUBAL,30HMOVAH,0ADDDX,AXDECBPJNZCONTMOVSI,0;將DX轉(zhuǎn)換成十進制數(shù),再轉(zhuǎn)換成ASCII碼>NUMMOVAX,DXMOVDX,0MOVBX,10D2:DIVBXADDDL,30HMOVNUMSI,DLINCSICMPAX,0JZEXITMOVDX,0JMPD2EXIT:MOVDL,

38、0AH;顯示十進制數(shù)MOVAH,2INT21HMOVDL,0DHINT21HD3:DECSIMOVDL,NUMSIMOVAH,2INT21HJNZD3MOVAH,4CHINT21HCODEENDSENDSTART14. 將AX中的無符號二進制數(shù)轉(zhuǎn)換成ASCII字符串表示的十進制數(shù)。答:將13題輸入過程和輸出過程去掉即得。DATASEGMENTNUMDB10DUP(?);轉(zhuǎn)換后ASCII碼按倒序存放于NUMDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XXXX;無符號二進制數(shù)MOVSI,0;將AX轉(zhuǎn)換成

39、十進制數(shù),再轉(zhuǎn)換成ASCII碼>NUMMOVDX,0MOVBX,10D2:DIVBXADDDL,30HMOVNUMSI,DLINCSICMPAX,0JZEXITMOVDX,0JMPD2EXIT:MOVAH,4CHINT21HCODEENDSENDSTART15. 從鍵盤輸入20個有符號數(shù),將它們排序并在屏幕上顯示。答:DATASEGMENTNUMDW20DUP(?);存放20個有符號數(shù)ASCDB10DUP(?);輸出時暫時保存每一個數(shù)的ASCII碼DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,2

40、0MOVBX,10MOVSI,0MOVBP,0BEGIN:MOVDX,0;輸入20個有符號數(shù)(十進制),并A1:MOVAH,1;轉(zhuǎn)化為二進制數(shù)存放于NUM數(shù)組INT21HCMPAL,'';判斷是否空格JZA2CMPAL,0DH;是否回車符JZA2CMPAL,'-';是否-JZA3JMPA4A3:MOVBP,1JMPA1A4:PUSHAXMOVAX,DXMULBXMOVDX,AXPOPAXSUBAL,30HMOVAH,0ADDDX,AXJMPA1A2:CMPBP,1JNZA5NEGDX;若為負(fù)數(shù),則取負(fù)A5:MOVNUMSI,DXMOVBP,0ADDSI,2LOO

41、PBEGINMOVDL,0DH;回車換行MOVAH,2INT21HMOVDL,0AHINT21HMOVBX,0;對20個有符號數(shù)按由小到大順序排序MOVCX,19;采用冒泡法,排序后依然存放于NUM數(shù)組L1:MOVDX,CXL2:MOVAX,NUMBXCMPAX,NUMBX+2JLECONT1XCHGAX,NUMBX+2MOVNUMBX,AXCONT1:ADDBX,2LOOPL2MOVCX,DXMOVBX,0LOOPL1MOVCX,20;將20個有符號數(shù)(二進制)轉(zhuǎn)換為十進制數(shù)MOVSI,0;再轉(zhuǎn)換為ASCII碼并輸出屏幕D1:MOVAX,NUMSIADDSI,2TESTAX,1000HJZD

42、4PUSHAXMOVDL,'-'MOVAH,2INT21HPOPAXNEGAXD4:MOVDI,0MOVDX,0MOVBX,10D2:DIVBXADDDL,30HMOVASCDI,DLINCDICMPAX,0JZD3MOVDX,0JMPD2D3:MOVDL,ASCDI-1MOVAH,2INT21HDECDIJNZD3MOVDL,''MOVAH,2INT21HLOOPD1MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART16. 編寫多字節(jié)有符號數(shù)的加法程序,從鍵盤接收兩個加數(shù),在屏幕上顯示結(jié)果。答:DATASEGMENTSTRING1DB&

43、#39;INPUTFIRSTNUM(HEX):',0DH,0AH,'$'STRING2DB'INPUTSECONDNUM(HEX):',0DH,0AH,'$'STRING3DB'THERESULTIS(HEX):',0DH,0AH,'$'NUM1DW0,0;存放加數(shù)1NUM2DW0,0;存放加數(shù)2RESULTDB0,0,0,0;存放結(jié)果DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,STRING1;輸入第一個加數(shù)(4

44、位十六進制數(shù))MOVAH,9INT21HMOVSI,2MOVCX,8CONT:PUSHCXCMPCX,4JNZB1SUBSI,281: MOVCL,4SHLNUM1SI,CLC1:MOVAH,1INT21HCMPAL,'0'JBC1CMPAL,'F'JAC1CMPAL,'A'JBA1SUBAL,7A1:SUBAL,30HMOVAH,0ADDNUM1SI,AXPOPCXLOOPCONTMOVDL,0DH;回車換行MOVAH,2INT21HMOVDL,0AHINT21HLEADX,STRING2;輸入第二個加數(shù)(4位十六進制數(shù))MOVAH,9INT2

45、1HMOVSI,2MOVCX,8CONT1:PUSHCXCMPCX,4JNZB2SUBSI,282: MOVCL,4SHLNUM2SI,CLC2:MOVAH,1INT21HCMPAL,'0'JBC2CMPAL,'F'JAC2CMPAL,'A'JBA2SUBAL,7A2:SUBAL,30HMOVAH,0ADDNUM2SI,AXPOPCXLOOPCONT1MOVDL,0DH;回車換行MOVAH,2INT21HMOVDL,0AHINT21HLEASI,NUM1;兩數(shù)相加LEABX,NUM2LEADI,RESULTMOVCX,4CLCAD:MOVAL,S

46、IADCAL,BXMOVDI,ALINCSIINCBXINCDILOOPADLEADX,STRING3;顯示結(jié)果(4位十六進制數(shù))MOVAH,9INT21HMOVCX,4MOVDI,3TT:PUSHCXMOVDL,RESULTDIMOVCL,4SHRDL,CLADDDL,30HCMPDL,3AHJBD1ADDDL,7D1:MOVAH,2INT21HMOVDL,RESULTDIANDDL,0FHADDDL,30HCMPDL,3AHJBD2ADDDL,7D2:MOVAH,2INT21HDECDIPOPCXLOOPTTMOVAH,4CH;返回DOSINT21HCODEENDSENDSTART17.

47、編寫2位非壓縮型BCD碼相乘的程序。答:轉(zhuǎn)化成加法進行累加運算。DATASEGMENTDA1DB09H,09HDA2DB09H,08HRESULTDB4DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,DA2+1;計算加法次數(shù)MOVBL,10MULBLMOVBL,DA2MOVBH,0ADDAX,BXMOVCX,AXCONT:MOVAH,0;通過循環(huán)做累加MOVAL,RESULTADDAL,DA1AAAMOVRESULT,ALMOVAL,RESULT+1ADDAL,AHMOVAH,0AAAADD

48、AL,DA1+1AAAMOVRESULT+1,ALMOVAL,RESULT+2ADDAL,AHMOVAH,0AAAMOVRESULT+2,ALMOVAL,RESULT+3ADDAL,AHMOVAH,0AAAMOVRESULT+3,ALLOOPCONTMOVAH,4CH;返回DOSINT21HCODEENDSENDSTART18. 編寫完整的程序求N!,求N大于6時的運算結(jié)果,并在屏幕上顯示結(jié)果。答:DATASEGMENTNDB8;求8的階乘DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,NMOVAH,0

49、CALLFACT;調(diào)用過程求N!,AX=N,BX=N!CALLB2TODEC;調(diào)用過程將結(jié)果轉(zhuǎn)換為十進制,然后屏幕顯示MOVAH,4CHINT21HFACTPROCCMPAL,0JNZCHNMOVBX,1RETCHN:PUSHAXDECALCALLFACT;遞歸調(diào)用N!=N*(N-1)!POPAXMULBXMOVBX,AXRETFACTENDPB2TODECPROCMOVCX,10000CALLBINMOVCX,1000CALLBINMOVCX,100CALLBINMOVCX,10CALLBINMOVCX,1CALLBINRETB2TODECENDPBINPROCMOVAX,BXMOVDX,0

50、DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,2INT21HRETBINENDPCODEENDSENDSTART19. 在附加段有一個數(shù)組,首地址為BUFF,數(shù)組中第一個字節(jié)存放了數(shù)組的長度。編一個程序在數(shù)組中查找0,找到后把它從數(shù)組中刪去,后續(xù)項向前壓縮,其余部分補0。答:DATASEGMENTBUFFDB10,1,0,2,3,4,0,5,6,7,0;10個數(shù)MEQU0DATAENDSCODESEGMENTASSUMECS:CODE,ES:DATA,DS:DATASTART:MOVAX,DATA;初始化ES,DSMOVES,AXMOVDS,AXMOVAL,M;關(guān)鍵字

51、M存入ALMOVDI,OFFSETBUFFMOVCL,DI;數(shù)組長度存入CXMOVCH,0INCDI;指向數(shù)組起始地址CLD;清方向標(biāo)志L1:REPNESCASB;重復(fù)搜索關(guān)鍵字JNZSTOP;未找到,轉(zhuǎn)STOP結(jié)束JCXZSTOP;最后一個數(shù)是M,轉(zhuǎn)STOPPUSHDI;關(guān)鍵字下一單元地址和循PUSHCX;環(huán)次數(shù)入棧保護DEL:MOVBL,DI;前移,末尾補0MOVDI-1,BLINCDILOOPDELMOVBYTEPTRDI-1,0POPCX;恢復(fù)CX,DIPOPDIDECDI;由于REPNESCASB已自動加1JMPL1STOP:MOVAH,4CHINT21HCODEENDSENDSTA

52、RT20. 編程完成將第二個字符串插入到第一個字符串的指定位置上。答:DATASEGMENTSTRING1DB'THISISTHEFIRSTSTRING!','$'DB100DUP(0);緩沖區(qū)NUM1DW?;字符串1的長度STRING2DB'thesecondstring!','$'NUM2DW?;字符串2的長度POSDW8;插入位置DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEADI,STRING1;求字符串1的長度存入NUM1MOVAL,'$'MOVNUM1,0CLDD1:SCASBJZD2INCNUM1JMPD1D2:LEADI,STRING2;求字符串2的長度存入NUM2M

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論