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

下載本文檔

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

文檔簡介

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

2、10)寄存器,寄存器2. 已知:DS=1000H,BX=0200H,SI=02H,內(nèi)存10200H10205H 單元的內(nèi)容分別為10H,2AH,3CH,46H,59H,6BH。下列每條指令執(zhí)行完后AX 寄存器的內(nèi)容各是什么?(1)MOV AX,0200H (2)MOV AX,200H (3)MOV AX,BX(4)MOV AX,3BX (5)MOV AX,BX+SI (6)MOV AX,2BX+SI答:(1)0200H (2)2A10H (3)0200H(4)5946H (5)463CH (6)6B59H3. 設(shè)DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=00

3、24H,BX=0100H,BP=0200H,數(shù)據(jù)段中變量名為VAL 的偏移地址值為0030H,試說明下列源操作數(shù)字段的尋址方式是什么?物理地址值是多少?(1)MOV AX,100H (2)MOV AX,VAL (3)MOV AX,BX(4)MOV AX,ES:BX (5)MOV AX,SI (6)MOV AX,BX+10H(7)MOV AX,BP (8)MOV AX,VALBPSI(9)MOV AX,VALBXDI (10)MOV AX,BPDI答:(1)直接,10100H (2)直接,10030H (3)寄存器間接,10100H(4)寄存器間接,20100H (5)寄存器間接,100A0H

4、(6)寄存器相對,10110H(7)寄存器間接,35200H (8)相對基址變址,352D0H(9)相對基址變址,10154H (10)基址變址,35224H4. 寫出下列指令的機(jī)器碼(1)MOV AL,CL (2)MOV DX,CX (3)MOV BX+100H,3150H答:(1)10001010 11000001B(2)10001011 11010001B(3)11000111 10000111 00000000 00000001 01010000 00110001B5. 已知程序的數(shù)據(jù)段為:DATA SEGMENTA DB $,10HB DB COMPUTERC DW 1234H, 0

5、FFHD DB 5 DUP(?)E DD 1200459AHDATA ENDS求下列程序段執(zhí)行后的結(jié)果是什么。MOV AL, AMOV DX, CXCHG DL, AMOV BX, OFFSET BMOV CX, 3BXLEA BX, DLDS SI, ELES DI, E答:MOV AL, A AL=24HMOV DX, C DX=1234HXCHG DL, A DL=24H, A=34HMOV BX, OFFSET B BX=2MOV CX, 3BX CX=5550HLEA BX, D BX=000EHLDS SI, E DS=1200H, SI=459AHLES DI, E ES=120

6、0H, DI=459AH6. 指出下列指令中哪些是錯誤的,錯在什么地方。(1)MOV DL,AX (2)MOV 8650H,AX (3)MOV DS,0200H(4)MOV BX,1200H (5)MOV IP,0FFH (6)MOV BX+SI+3,IP(7)MOV AX,BXBP (8)MOV AL,ES:BP (9)MOV DL,SIDI(10)MOV AX,OFFSET 0A20H (11)MOV AL,OFFSET TABLE(12)XCHG AL,50H (13)IN BL,05H (14)OUT AL,0FFEH答:(1)長度不匹配 (2)立即數(shù)不能做目的操作數(shù)(3)段寄存器不能

7、用立即數(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 必須用 AL/AX (14)操作數(shù)順序反向;地址應(yīng)為 8 位7. 已知當(dāng)前數(shù)據(jù)段中有一個十進(jìn)制數(shù)字09 的7 段代碼表,其數(shù)值依次為40H,79H,24H,30H,19H,12H,02H,78H,00H,18H。要求用XLAT 指令將十進(jìn)制數(shù)57 轉(zhuǎn)換成相應(yīng)的7 段代碼值,存

8、到BX 寄存器中,試寫出相應(yīng)的程序段。答: DATA SEGMENTTABLE DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,18HDATA ENDSMOV AL,5MOV BX,OFFSET TABLEXLAT TABLEMOV CL,ALMOV AL,7XLAT TABLEMOV BL,ALMOV BH,CL8. 已知當(dāng)前SS=1050H,SP=0100H,AX=4860H,BX=1287H,試用示意圖表示執(zhí)行下列指令過程中,堆棧中的內(nèi)容和堆棧指針SP 是怎樣變化的。PUSH AXPUSH BXPOP BXPOP AX(1)指9. 下列指令完成什么功能?(1

9、)ADD AL,DH (2)ADC BX,CX (3)SUB AX,2710H(4)DEC BX (5)NEG CX (6)INC BL(7)MUL BX (8)DIV CL答:(1)AL+DHAL (2)BX+CX+CFBX (3)AX-2710HAX(_4)BX-1BX (5)0-CXCX (6)BL+1BL(7)AX*BXDX,AX (8)AX/CL 商AL,余數(shù)AH10. 已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每條指令執(zhí)行后的結(jié)果是什么?標(biāo)志位CF 等于什么?(1)AND AH,CL (2)OR BL,30H (3)NOT AX(4)XOR

10、CX,0FFF0H (5)TEST DH,0FH (6)CMP CX,00H(7)SHR DX,CL (8)SAR AL,1 (9)SHL BH,CL(10)SAL AX,1 (11)RCL BX,1 (12)ROR DX,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,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/1

11、E6DH,CF=0 (12)DX=4186H,CF=011. 假設(shè)數(shù)據(jù)段定義如下:DATA SEGMENTSTRING DB The Personal Computer & TVDATA ENDS試用字符串操作等指令編程完成以下功能:(1)把該字符串傳送到附加段中偏移量為GET_CHAR 開始的內(nèi)存單元中。(2)比較該字符串是否與The Computer相同,若相同則將AL 寄存器的內(nèi)容置1,否則置0。并要求將比較次數(shù)送到BL 寄存器中。(3)檢查該字符串是否有&,若有則用空格字符將其替換。(4)把字符串大寫字母傳送到附加段中以CAPS 開始的單元中,其余字符傳到以CHART開始的單元中。然后

12、將數(shù)據(jù)段中存儲上述字符串的單元清0。答:(1) CLDLEA SI,STRINGLEA DI,GET_CHARMOV CX,26REP MOVSB(2)補充在附加段定義STRING1 DB The computerMOV AL,1CLDLEA SI,STRINGLEA DI,STRING1MOV CX,12REPZ CMPSBJZ SKIPMOV AL,0SKIP: MOV BX,12SUB BX,CX(3) MOV AX, DATAMOV ES, AXCLDMOV AL,&LEA DI,STRINGMOV CX,26NEXT: REPNE SCASBJZ FINDJMP EXITFIND:

13、MOV BYTE PTR DI-1, JCXZ EXITJMP NEXTEXIT:(4) LEA SI,STRINGLEA DI,CAPSLEA BX,CHARTMOV CX,26NEXT: MOV AL, SICMP AL,AJB OTHERCMP AL,ZJA OTHERMOV ES:DI,ALINC DIJMP SKIPOTHER: MOV ES:BX,ALINC BXSKIP: MOV BYTE PTRSI,0INC SILOOP NEXT12. 編程將AX 寄存器中的內(nèi)容以相反的順序傳送到DX 寄存器中,并要求AX 中的內(nèi)容不被破壞,然后統(tǒng)計DX 寄存器中1的個數(shù)是多少。答: MOV

14、 BL,0PUSH AXMOV DX,0MOV CX,16NEXT: SHL AX,1JNC SKIPINC BLSKIP: RCR DX,1LOOP NEXTSTOP: POP AX13. 設(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)移到何處執(zhí)行?(1)JMP PROG_N(2)JMP BX(

15、3)JMP BX(4)JMP FAR PROG_F(5)JMP DWORD PTR BX如將上述指令中的操作碼JMP 改成CALL,則每條指令執(zhí)行完后,程序轉(zhuǎn)向何處執(zhí)行?并請畫圖說明堆棧中的內(nèi)容和堆棧指針如何變化。答:(1)1200H:0278H(2)1200H:0300H(3)1200H:4800H(4)3400H:0ABCH(5)00FFH:4800H將操作碼JMP 改成CALL 后:(1)1200H:0278H指令長度為3,則IP=0100H+3=0103H,入棧(5)00FFH:4800H指令長度為2,則IP=0100H+2=0102H,入棧14. 在下列程序段括號中分別填入以下指令(

16、1)LOOP NEXT (2) LOOPE NEXT (3) LOOPNE NEXT試說明在這三種情況下,程序段執(zhí)行完后,AX,BX,CX,DX 的內(nèi)容分別是什么。START: MOV AX,01HMOV BX,02HMOV DX,03HMOV CX,04HNEXT: INC AXADD BX,AXSHR DX,1( )答:(1) AX=05H BX=10H CX=0 DX=0(2) AX=02H BX=04H CX=03H DX=01H(3) AX=03H BX=07H CX=02H DX=015. 某班有7 個同學(xué)英語成績低于80 分,分?jǐn)?shù)存在ARRAY 數(shù)組中,試編程完成以下工作:(1)

17、給每人加 5 分,結(jié)果存到 NEW 數(shù)組中(2)把總分存到SUM 單元中答: DATA SEGMENTARRAY DB ?,?,?,?,?,?,?NEW DB 7 DUP(?)SUM DW 0DATA ENDSMOV AX,DATAMOV DS, AX(1) LEA SI,ARRAYLEA DI,NEWMOV CX,7NEXT: MOV AL,SIADD AL, 5MOV DI, ALINC SIINC DILOOP NEXT(2) LEA SI,ARRAYCLCSP5000H:0000H5000H:03FCH5000H:03FEH5000H:0400HMOV CX, 7NEXT1:MOV A

18、L,SIMOV AH, 0ADC SUM, AXINC SILOOP NEXT116. 中斷向量表的作用是什么?它放在內(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)容00008H 16H00009H 00H0000AH 85H0000BH 04H18. 若中斷向量表中地址為0

19、040H 中存放240BH,0042H 單元里存放的是D169H,試問:(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í)行

20、到該斷點時,則產(chǎn)生類型3 中斷。類型4:溢出中斷若溢出標(biāo)志OF=1,則可由溢出中斷指令I(lǐng)NTO 產(chǎn)生類型4 中斷。第四章1. 下列變量各占多少字節(jié)?A1 DW 23H,5876HA2 DB 3 DUP(?),0AH,0DH, $A3 DD 5 DUP(1234H, 567890H)A4 DB 4 DUP(3 DUP(1, 2,ABC)答:A1 占4 個字節(jié)A2 占6 個字節(jié)A3 占40 個字節(jié)A4 占60 個字節(jié)2. 下列指令完成什么功能?MOV AX,00FFH AND 1122H+3344HMOV AL,15 GE 1111BMOV AX,00FFH LE 255+6/5AND AL, 5

21、0 MOD 4OR AX, 0F00FH AND 1234 OR 00FFH答:(1)將0066H 傳送給AX(2)將0FFH 傳送給AL(3)將0FFFFH 傳送給AX(4)AND AL,02H(5)OR AX,00FFH3. 有符號定義語句如下:BUF DB 3,4,5,123ABUF DB 0L EQU ABUF-BUF求L 的值為多少?答:L=64. 假設(shè)程序中的數(shù)據(jù)定義如下:PAR DW ?PNAME DB 16 DUP(?)COUNT DD ?PLENTH EQU $-PAR求PLENTH 的值為多少?表示什么意義?答:PAR 的偏移地址為0,PLENTH 當(dāng)前偏移地址$=2+16

22、+4=22, $-PAR=22,故PLENTH的值為22。若在PLENTH 所在行有變量定義,則$表示該變量的偏移地址,即$表示PLENTH 所在行的當(dāng)前偏移地址。故PLENTH 表示從當(dāng)前行到PAR 之間定義的變量所占的字節(jié)個數(shù)。5. 對于下面的數(shù)據(jù)定義,各條MOV 指令執(zhí)行后,有關(guān)寄存器的內(nèi)容是什么?DA1 DB ?DA2 DW 10 DUP(?)DA3 DB ABCDMOV AX, TYPE DA1MOV BX, SIZE DA2MOV CX, LENGTH DA3答:AX=1,BX=20,CX=16. 下段程序完成后,AH 等于什么?IN AL, 5FHTEST AL, 80HJZ L

23、1MOV AH, 0JMP STOPL1: MOV AH, 0FFHSTOP: HLT答:討論從端口5FH 輸入的數(shù)據(jù)最高位的情況。若最高位為1,則AH=0;若最高位為0,則AH=0FFH。7. 編程序完成下列功能:(1)利用中斷調(diào)用產(chǎn)生5 秒延時。(2)利用中斷調(diào)用,在屏幕上顯示19 之間隨機(jī)數(shù)。答:(1)可以利用中斷類型1CH 來處理,因為在系統(tǒng)時鐘的中斷處理程序中,時鐘中斷一次要調(diào)用一次INT 1CH,即每隔55ms,產(chǎn)生一次1CH 中斷,要產(chǎn)生5 秒延時,只要中斷5s/55ms=91 次即可。又因1CH 中斷處理程序中只有一條IRET 指令,故可將用戶的程序代替原有的INT 1CH 程

24、序。DATA SEGMENTCOUNT DW 91 ;計數(shù)器MESS DB 5 s delayed!,0AH,0DH,$DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,ES:DATASTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AL,1CH ;得到原中斷向量MOV AH,35HINT 21HPUSH ES ;存儲原中斷向量PUSH BXPUSH DSMOV DX,OFFSET DELAY ;DELAY 的偏移地址和段地址MOV AX,SEG DELAYMOV DS,AX

25、MOV AL,1CH ;設(shè)置中斷向量MOV AH,25HINT 21HPOP DSIN AL,21H ;設(shè)置中斷屏蔽位AND AL,0FEHOUT 21H,ALSTIMOV DI,2000H ;主程序延遲,在執(zhí)行此段程序期間A1: MOV SI,3000H ;產(chǎn)生中斷A2: DEC SIJNZ A2DEC DIJNZ A1POP DX ;取原中斷向量POP DSMOV AL,1CHMOV AH,25HINT 21HRETMAIN ENDPDELAY PROC NEARPUSH DSPUSH AXPUSH CXPUSH DXMOV AX,DATAMOV DS,AXSTIDEC COUNT ;5

26、秒計數(shù)JNZ EXITMOV DX,OFFSET MESS ;顯示信息MOV AH,09HINT 21HMOV COUNT,91 ;5 秒的值EXIT: CLIPOP DXPOP CXPOP AXPOP DSIRETDELAY ENDPCODE ENDSEND START(2)可以利用INT 1AH,讀取當(dāng)前時間的1/100 秒為隨機(jī)數(shù)。CODE SEGMENTASSUME CS:CODESTART:MOV AH,0INT 1AH ;讀取當(dāng)前時間CH:CL=時:分MOV AL,DL ;DH:DL=秒:1/100 秒MOV AH,0MOV BL,9DIV BLINC AHMOV DL,AHADD

27、 DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START8. 編兩個通過過程完成將AX 中存放的二進(jìn)制數(shù)轉(zhuǎn)換成壓縮型BCD 碼以及將BCD 碼轉(zhuǎn)換成二進(jìn)制數(shù)。答:(1)將AX 中的二進(jìn)制數(shù)先后除以1000,100 和10,每次除法所得的商,即是BCD 數(shù)的千位、百位和十位數(shù),余數(shù)是個位數(shù)。子程序名:B2TOBCD輸入?yún)?shù):AX=十六位二進(jìn)制數(shù)輸出參數(shù):CF=0,則AX=4 位壓縮型BCD 碼。CF=1,則要轉(zhuǎn)換的數(shù)大于9999,AX 不變。使用寄存器:CX:存放除數(shù),DX:存放中間結(jié)果。B2TOBCD PROC FARCMP AX,99

28、99 ;AX9999,則CF 置1JBE TRANSTCJMP EXITTRAN: PUSH CXPUSH DXSUB DX,DX ;DX 清0MOV CX,1000 ;計算千位數(shù)DIV CXXCHG AX,DX ;商在DX 中,余數(shù)在AX 中MOV CL,4SHL DX,CL ;DX 左移4 位MOV CL,100 ;計算百位數(shù)DIV CLADD DL,AL ;百位數(shù)加到DL 中,DX 左移4 位MOV CL,4SHL DX,CLXCHG AL,AH ;余數(shù)保留在AL 中SUB AH,AHMOV CL,10 ;計算十位數(shù)DIV CLADD DL,AL ;十位數(shù)加到DL 中,DX 左移4 位M

29、OV CL,4SHL DX,CLADD DL,AH ;加個位數(shù)MOV AX,DX ;結(jié)果送到AX 中POP DXPOP CXEXIT: RETB2TOBCD ENDP(2)將AX 中4 位BCD 碼順序乘以1000,100,10 和1,然后求和即得。子程序名:BCDTOB2輸入?yún)?shù):AX=4 位壓縮BCD 碼輸出參數(shù):AX=十六位二進(jìn)制數(shù)使用寄存器:BX:暫存數(shù)據(jù),CX:存放乘數(shù),DX:存放中間結(jié)果BCDTOB2 PROC FARPUSH BXPUSH CXPUSH DXMOV BX,AXMOV CL,4ROL AX,CLAND AX,000FHMOV CX,1000 ;乘以1000MUL C

30、XMOV DX,AXMOV AX,BXMOV CL,8ROL AX,CLAND AX,000FHMOV CL,100 ;乘以100MUL CLADD DX,AXMOV AX,BXMOV CL,4SHR AX,CLAND AX,000FHMOV CL,10 ;乘以10MUL CLADD DX,AXAND BX,000FHADD DX,BXMOV AX,DXPOP DXPOP CXPOP BXRETBCDTOB2 ENDP9. 編寫兩個通用過程,一個完成ASCII 碼轉(zhuǎn)換成二進(jìn)制數(shù)功能,另一個完成ASCII 字符顯示輸出功能。答:(1)將AX 中兩位ASCII 碼先轉(zhuǎn)化成數(shù)字,然后AH*10+AL

31、。子程序名:ASCIITOB2輸入?yún)?shù):AX=2 位ASCII 碼輸出參數(shù):AX=轉(zhuǎn)換后二進(jìn)制數(shù)使用寄存器:BX,CX,DXASCIITOB2 PROC FARPUSH BXPUSH CXPUSH DXMOV BX,AXSUB AH,30HMOV AL,AHMOV CL,10 ;乘以10MUL CLMOV DX,AXMOV AX,BXSUB AL,30HMOV AH,0ADD AX,DXPOP DXPOP CXPOP BXRETASCIITOB2 ENDP(2)使用2 號DOS 功能調(diào)用顯示字符。子程序名:DISPLAY輸入?yún)?shù):AX=2 位ASCII 碼輸出參數(shù):無使用寄存器:BX,DXDI

32、SPLAY PROC FARPUSH BXPUSH DXMOV BX,AXMOV DL,AHMOV AH,2INT 21HMOV AX,BXMOV DL,ALMOV AH,2INT 21HPOP DXPOP BXRETDISPLAY ENDP10. 編制兩個通用過程,完成十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII 碼并將ASCII 碼字符顯示。答:(1)子程序名:HEXTOASC輸入?yún)?shù):AX:4 位十六進(jìn)制數(shù)輸出參數(shù):DX,AX:4 位ASCII 碼,DX 高2 位,AX 低2 位使用寄存器:BX,CX,DXHEXTOASC PROC FARPUSH BXPUSH CXPUSH DXMOV BX,AXMOV

33、 CL,4 ;轉(zhuǎn)換AH 高4 位SHR AX,CLAND AX,0F00HADD AH,30HCMP AH,3AHJB A1ADD AH,7A1: MOV DH,AHMOV AX,BX ;轉(zhuǎn)換AH 低4 位AND AX,0F00HADD AH,30HCMP AH,3AHJB A2ADD AH,7A2: MOV DL,AHMOV BH,BL ;轉(zhuǎn)換AL 高4 位MOV CL,4SHR BL,CLADD BL,30HCMP BL,3AHJB A3ADD BL,7A3: MOV AH,BLAND BH,0FH ;轉(zhuǎn)換AL 低4 位ADD BH,30HCMP BH,3AHJB A4ADD BH,7A4

34、: MOV AL,BHPOP DXPOP CXPOP BXRETHEXTOASC ENDP(2)子程序名:DISPLAYASC輸入?yún)?shù):DX,AX:4 位ASCII 碼輸出參數(shù):無使用寄存器:BX,CXDISPLAYASC PROC FARPUSH BXPUSH CXMOV BX,DXMOV CX,AXMOV DL,BHMOV AH,02HINT 21HMOV DL,BLINT 21HMOV DL,CHINT 21HMOV DL,CLINT 21HMOV DL,HINT 21HPOP CXPOP BXRETDISPLAYASC ENDP11. 某程序可從鍵盤接收命令(05),分別轉(zhuǎn)向6 個子程

35、序,子程序入口地址分別為P0P5,編制程序,用跳轉(zhuǎn)表實現(xiàn)分支結(jié)構(gòu)。答: DATA SEGMENTTABLE DW 6 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI, TABLEMOV WORD PTRSI,OFFSET P0MOV WORD PTRSI+2,OFFSET P1MOV WORD PTRSI+4,OFFSET P2MOV WORD PTRSI+6,OFFSET P3MOV WORD PTRSI+8,OFFSET P4MOV WORD PTRSI+10,OFFSET

36、 P5MOV AH,1INT 21HSUB AL,30HSHL AL,1MOV AH,0MOV SI,AXJMP TABLESIP0:P1:P2:P3:P4:P5:MOV AH,4CHINT 21HCODE ENDSEND START12. 在首地址為TABLE 的數(shù)組中按遞增次序存放著100 個16 位補碼數(shù),編寫一個程序,把出現(xiàn)次數(shù)最多的數(shù)及其出現(xiàn)次數(shù)分別存放于AX 和BL 中。答: DATA SEGMENTTABLE DW 100 DUP (?) ;數(shù)組中的數(shù)據(jù)是按增序排列的NUM DW ?COUNT DW 0DATA ENDSCODE SEGMENTMAIN PROC FARASSUM

37、E CS: CODE, DS: DATASTART: PUSH DS ;設(shè)置返回DOSSUB AX, AXPUSH AXMOV AX, DATAMOV DS, AX ;給DS 賦值BEGIN: MOV CX, 100 ;循環(huán)計數(shù)器MOV SI, 0NEXT: MOV DX, 0MOV AX, TABLESICOMP: CMP TABLE SI, AX ;計算一個數(shù)的出現(xiàn)次數(shù)JNE ADDRINC DXADD SI, 2LOOP COMPADDR: CMP DX, COUNT ;此數(shù)出現(xiàn)的次數(shù)最多嗎?JLE DONEMOV COUNT, DX ;目前此數(shù)出現(xiàn)的次數(shù)最多,記下次數(shù)MOV NUM,

38、AX ;記下此數(shù)DONE: LOOP NEXT ;準(zhǔn)備取下一個數(shù)MOV CX, COUNT ;出現(xiàn)最多的次數(shù)存入(CX)MOV AX, NUM ;出現(xiàn)最多的數(shù)存入(AX)RETMAIN ENDPCODE ENDS ;以上定義代碼段END START13. 將鍵盤上輸入的十六進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),在屏幕上顯示。答:DATA SEGMENTSTRING DB INPUT 4 HEX NUM:,0AH,0DH,$NUM DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA DX,ST

39、RING ;顯示提示信息MOV AH,9INT 21HMOV BP,4MOV DX,0CONT: MOV CL,4 ;輸入4 位十六進(jìn)制數(shù)DXSHL DX,CLD1: MOV AH,1INT 21HCMP AL,0JB D1CMP AL,FJA D1CMP AL,AJB A1SUB AL,7A1: SUB AL,30HMOV AH,0ADD DX,AXDEC BPJNZ CONTMOV SI,0 ;將DX 轉(zhuǎn)換成十進(jìn)制數(shù),再轉(zhuǎn)換成ASCII 碼NUMMOV AX,DXMOV DX,0MOV BX,10D2: DIV BXADD DL,30HMOV NUMSI,DLINC SICMP AX,0J

40、Z EXITMOV DX,0JMP D2EXIT: MOV DL,0AH ;顯示十進(jìn)制數(shù)MOV AH,2INT 21HMOV DL,0DHINT 21HD3: DEC SIMOV DL,NUMSIMOV AH,2INT 21HJNZ D3MOV AH,4CHINT 21HCODE ENDSEND START14. 將AX 中的無符號二進(jìn)制數(shù)轉(zhuǎn)換成ASCII 字符串表示的十進(jìn)制數(shù)。答:將13 題輸入過程和輸出過程去掉即得。DATA SEGMENTNUM DB 10 DUP(?) ;轉(zhuǎn)換后ASCII 碼按倒序存放于NUMDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:

41、DATASTART: MOV AX,DATAMOV DS,AXMOV AX, ;無符號二進(jìn)制數(shù)MOV SI,0 ;將AX 轉(zhuǎn)換成十進(jìn)制數(shù),再轉(zhuǎn)換成ASCII 碼NUMMOV DX,0MOV BX,10D2: DIV BXADD DL,30HMOV NUMSI,DLINC SICMP AX,0JZ EXITMOV DX,0JMP D2EXIT: MOV AH,4CHINT 21HCODE ENDSEND START15. 從鍵盤輸入20 個有符號數(shù),將它們排序并在屏幕上顯示。答:DATA SEGMENTNUM DW 20 DUP(?) ;存放20 個有符號數(shù)ASC DB 10 DUP(?) ;輸

42、出時暫時保存每一個數(shù)的ASCII 碼DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV CX,20MOV BX,10MOV SI,0MOV BP,0BEGIN: MOV DX,0 ;輸入20 個有符號數(shù)(十進(jìn)制),并A1: MOV AH,1 ;轉(zhuǎn)化為二進(jìn)制數(shù)存放于NUM 數(shù)組INT 21HCMP AL, ;判斷是否空格JZ A2CMP AL,0DH ;是否回車符JZ A2CMP AL,- ;是否-JZ A3JMP A4A3: MOV BP,1JMP A1A4: PUSH AXMOV AX,DXMUL

43、 BXMOV DX,AXPOP AXSUB AL,30HMOV AH,0ADD DX,AXJMP A1A2: CMP BP,1JNZ A5NEG DX ;若為負(fù)數(shù),則取負(fù)A5: MOV NUMSI,DXMOV BP,0ADD SI,2LOOP BEGINMOV DL,0DH ;回車換行MOV AH,2INT 21HMOV DL,0AHINT 21HMOV BX,0 ;對20 個有符號數(shù)按由小到大順序排序MOV CX,19 ;采用冒泡法,排序后依然存放于NUM 數(shù)組L1: MOV DX,CXL2: MOV AX,NUMBXCMP AX,NUMBX+2JLE CONT1XCHG AX,NUMBX+

44、2MOV NUMBX,AXCONT1: ADD BX,2LOOP L2MOV CX,DXMOV BX,0LOOP L1MOV CX,20 ;將20 個有符號數(shù)(二進(jìn)制)轉(zhuǎn)換為十進(jìn)制數(shù)MOV SI,0 ;再轉(zhuǎn)換為ASCII 碼并輸出屏幕D1: MOV AX,NUMSIADD SI,2TEST AX,1000HJZ D4PUSH AXMOV DL,-MOV AH,2INT 21HPOP AXNEG AXD4: MOV DI,0MOV DX,0MOV BX,10D2: DIV BXADD DL,30HMOV ASCDI,DLINC DICMP AX,0JZ D3MOV DX,0JMP D2D3: M

45、OV DL,ASCDI-1MOV AH,2INT 21HDEC DIJNZ D3MOV DL, MOV AH,2INT 21HLOOP D1MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START16. 編寫多字節(jié)有符號數(shù)的加法程序,從鍵盤接收兩個加數(shù),在屏幕上顯示結(jié)果。答:DATA SEGMENTSTRING1 DB INPUT FIRST NUM(HEX):,0DH,0AH,$STRING2 DB INPUT SECOND NUM(HEX):,0DH,0AH,$STRING3 DB THE RESULT IS(HEX):,0DH,0AH,$NUM1 DW 0,0

46、 ;存放加數(shù)1NUM2 DW 0,0 ;存放加數(shù)2RESULT DB 0,0,0,0 ;存放結(jié)果DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA DX,STRING1 ;輸入第一個加數(shù)(4 位十六進(jìn)制數(shù))MOV AH,9INT 21HMOV SI,2MOV CX,8CONT: PUSH CXCMP CX,4JNZ B1SUB SI,2B1: MOV CL,4SHL NUM1SI,CLC1: MOV AH,1INT 21HCMP AL,0JB C1CMP AL,FJA C1CMP AL,AJB A1

47、SUB AL,7A1: SUB AL,30HMOV AH,0ADD NUM1SI,AXPOP CXLOOP CONTMOV DL,0DH ;回車換行MOV AH,2INT 21HMOV DL,0AHINT 21HLEA DX,STRING2 ;輸入第二個加數(shù)(4 位十六進(jìn)制數(shù))MOV AH,9INT 21HMOV SI,2MOV CX,8CONT1: PUSH CXCMP CX,4JNZ B2SUB SI,2B2: MOV CL,4SHL NUM2SI,CLC2: MOV AH,1INT 21HCMP AL,0JB C2CMP AL,FJA C2CMP AL,AJB A2SUB AL,7A2:

48、 SUB AL,30HMOV AH,0ADD NUM2SI,AXPOP CXLOOP CONT1MOV DL,0DH ;回車換行MOV AH,2INT 21HMOV DL,0AHINT 21HLEA SI,NUM1 ;兩數(shù)相加LEA BX,NUM2LEA DI,RESULTMOV CX,4CLCAD: MOV AL,SIADC AL,BXMOV DI,ALINC SIINC BXINC DILOOP ADLEA DX,STRING3 ;顯示結(jié)果(4 位十六進(jìn)制數(shù))MOV AH,9INT 21HMOV CX,4MOV DI,3TT: PUSH CXMOV DL,RESULTDIMOV CL,4S

49、HR DL,CLADD DL,30HCMP DL,3AHJB D1ADD DL,7D1: MOV AH,2INT 21HMOV DL,RESULTDIAND DL,0FHADD DL,30HCMP DL,3AHJB D2ADD DL,7D2: MOV AH,2INT 21HDEC DIPOP CXLOOP TTMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START17. 編寫2 位非壓縮型BCD 碼相乘的程序。答:轉(zhuǎn)化成加法進(jìn)行累加運算。DATA SEGMENTDA1 DB 09H,09HDA2 DB 09H,08HRESULT DB 4 DUP(0)DATA E

50、NDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,DA2+1 ;計算加法次數(shù)MOV BL,10MUL BLMOV BL,DA2MOV BH,0ADD AX,BXMOV CX,AXCONT: MOV AH,0 ;通過循環(huán)做累加MOV AL,RESULTADD AL,DA1AAAMOV RESULT,ALMOV AL,RESULT+1ADD AL,AHMOV AH,0AAAADD AL,DA1+1AAAMOV RESULT+1,ALMOV AL,RESULT+2ADD AL,AHMOV AH,0AAAMOV

51、 RESULT+2,ALMOV AL,RESULT+3ADD AL,AHMOV AH,0AAAMOV RESULT+3,ALLOOP CONTMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START18. 編寫完整的程序求N!,求N 大于6 時的運算結(jié)果,并在屏幕上顯示結(jié)果。答:DATA SEGMENTN DB 8 ;求8 的階乘DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,NMOV AH,0CALL FACT ;調(diào)用過程求N!,AX=N,BX=N!CALL B2TODEC ;調(diào)用過程將結(jié)果轉(zhuǎn)換為十進(jìn)制,然后屏幕顯示MOV AH,4CHINT 21HFACT PROCCMP AL,0JNZ CHNMOV BX,1RETCHN: PUSH AXDEC ALCALL FACT ;遞歸調(diào)用N!=N*(N-1)!POP AXMUL BXMOV BX,AXRETFACT ENDPB2TODEC PROCMOV CX,10000CALL BINMOV CX,1000CALL BINMOV CX,100CALL BINMOV CX,10CALL BINMOV

溫馨提示

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

評論

0/150

提交評論