微机接口答案

上传人:gbs****77 文档编号:10124592 上传时间:2020-04-10 格式:DOC 页数:61 大小:807.50KB
返回 下载 相关 举报
微机接口答案_第1页
第1页 / 共61页
微机接口答案_第2页
第2页 / 共61页
微机接口答案_第3页
第3页 / 共61页
点击查看更多>>
资源描述
第三章1. 分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。(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)立即数,寄存器 (2)立即数,寄存器 (3)寄存器间接,寄存器(4)寄存器,寄存器相对 (5)寄存器,寄存器相对 (6)立即数,基址变址(7)基址变址,寄存器 (8)寄存器,相对基址变址(9)直接端口寻址,寄存器 (10)寄存器,寄存器2. 已知:DS=1000H,BX=0200H,SI=02H,内存10200H10205H 单元的内容分别为10H,2AH,3CH,46H,59H,6BH。下列每条指令执行完后AX 寄存器的内容各是什么?(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. 设DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,数据段中变量名为VAL 的偏移地址值为0030H,试说明下列源操作数字段的寻址方式是什么?物理地址值是多少?(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 (6)寄存器相对,10110H(7)寄存器间接,35200H (8)相对基址变址,352D0H(9)相对基址变址,10154H (10)基址变址,35224H4. 写出下列指令的机器码(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. 已知程序的数据段为:DATA SEGMENTA DB $,10HB DB COMPUTERC DW 1234H, 0FFHD DB 5 DUP(?)E DD 1200459AHDATA ENDS求下列程序段执行后的结果是什么。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=1200H, 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)立即数不能做目的操作数(3)段寄存器不能用立即数赋值 (4)两个内存单元不能直接传送数据(5)IP 不能用指令直接修改 (6)指令中不能出现 IP(7)BX/BP 应与 SI/DI 搭配 (8)正确(9)SI/DI 应与 BX/BP 搭配 (10)OFFSET 后应跟内存单元(11)偏移地址为16 位,AL 长度不够 (12)立即数不能用于XCHG(13)IN 必须用 AL/AX (14)操作数顺序反向;地址应为 8 位7. 已知当前数据段中有一个十进制数字09 的7 段代码表,其数值依次为40H,79H,24H,30H,19H,12H,02H,78H,00H,18H。要求用XLAT 指令将十进制数57 转换成相应的7 段代码值,存到BX 寄存器中,试写出相应的程序段。答: 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. 已知当前SS=1050H,SP=0100H,AX=4860H,BX=1287H,试用示意图表示执行下列指令过程中,堆栈中的内容和堆栈指针SP 是怎样变化的。PUSH AXPUSH BXPOP BXPOP AX(1)指9. 下列指令完成什么功能?(1)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,余数AH10. 已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每条指令执行后的结果是什么?标志位CF 等于什么?(1)AND AH,CL (2)OR BL,30H (3)NOT AX(4)XOR 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/1E6DH,CF=0 (12)DX=4186H,CF=011. 假设数据段定义如下:DATA SEGMENTSTRING DB The Personal Computer & TVDATA ENDS试用字符串操作等指令编程完成以下功能:(1)把该字符串传送到附加段中偏移量为GET_CHAR 开始的内存单元中。(2)比较该字符串是否与The Computer相同,若相同则将AL 寄存器的内容置1,否则置0。并要求将比较次数送到BL 寄存器中。(3)检查该字符串是否有&,若有则用空格字符将其替换。(4)把字符串大写字母传送到附加段中以CAPS 开始的单元中,其余字符传到以CHART开始的单元中。然后将数据段中存储上述字符串的单元清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: 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 寄存器中的内容以相反的顺序传送到DX 寄存器中,并要求AX 中的内容不被破坏,然后统计DX 寄存器中1的个数是多少。答: MOV BL,0PUSH AXMOV DX,0MOV CX,16NEXT: SHL AX,1JNC SKIPINC BLSKIP: RCR DX,1LOOP NEXTSTOP: POP AX13. 设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300H)=4800H,(20302H)=00FFH,TABLE=0500H,PROG_N 标号的地址为1200:0278H,PROG_F 标号的地址为3400H:0ABCH。说明下列每条指令执行完后,程序将分别转移到何处执行?(1)JMP PROG_N(2)JMP BX(3)JMP BX(4)JMP FAR PROG_F(5)JMP DWORD PTR BX如将上述指令中的操作码JMP 改成CALL,则每条指令执行完后,程序转向何处执行?并请画图说明堆栈中的内容和堆栈指针如何变化。答:(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. 在下列程序段括号中分别填入以下指令(1)LOOP NEXT (2) LOOPE NEXT (3) LOOPNE NEXT试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX 的内容分别是什么。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 个同学英语成绩低于80 分,分数存在ARRAY 数组中,试编程完成以下工作:(1)给每人加 5 分,结果存到 NEW 数组中(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 AL,SIMOV AH, 0ADC SUM, AXINC SILOOP NEXT116. 中断向量表的作用是什么?它放在内存的什么区域内?中断向量表中的什么地址用于类型3 的中断?答:中断向量表用来存放中断服务程序的入口地址。8086 的256 类中断的入口地址要占用1K 字节,位于内存00000H003FFH 的区域内。中断向量表中0000CH0000FH 用于类型3 的中断。17. 设类型2 的中断服务程序的起始地址为0485:0016H,它在中断向量表中如何存放?答:物理地址 内容00008H 16H00009H 00H0000AH 85H0000BH 04H18. 若中断向量表中地址为0040H 中存放240BH,0042H 单元里存放的是D169H,试问:(1)这些单元对应的中断类型是什么?(2)该中断服务程序的起始地址是什么?答:(1)10H(2)D169H:240BH19. 简要说明8086 响应类型04 中断的条件是什么?答:类型0:除法错中断执行除法指令时,若除数为0 或所得商超过寄存器能容纳的范围,则自动产生类型0中断。类型1:单步中断若CPU 的单步标志TF=1,则每执行完一条指令后,自动产生类型1 中断。类型2:不可屏蔽中断NMI当8086 的NMI 引脚上接收到由低变高的电平变化时,将自动产生类型2 中断。类型3:断点中断若在程序中某位置设置断点,当程序执行到该断点时,则产生类型3 中断。类型4:溢出中断若溢出标志OF=1,则可由溢出中断指令INTO 产生类型4 中断。第四章1. 下列变量各占多少字节?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 个字节A2 占6 个字节A3 占40 个字节A4 占60 个字节2. 下列指令完成什么功能?MOV AX,00FFH AND 1122H+3344HMOV AL,15 GE 1111BMOV AX,00FFH LE 255+6/5AND AL, 50 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. 假设程序中的数据定义如下:PAR DW ?PNAME DB 16 DUP(?)COUNT DD ?PLENTH EQU $-PAR求PLENTH 的值为多少?表示什么意义?答:PAR 的偏移地址为0,PLENTH 当前偏移地址$=2+16+4=22, $-PAR=22,故PLENTH的值为22。若在PLENTH 所在行有变量定义,则$表示该变量的偏移地址,即$表示PLENTH 所在行的当前偏移地址。故PLENTH 表示从当前行到PAR 之间定义的变量所占的字节个数。5. 对于下面的数据定义,各条MOV 指令执行后,有关寄存器的内容是什么?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 L1MOV AH, 0JMP STOPL1: MOV AH, 0FFHSTOP: HLT答:讨论从端口5FH 输入的数据最高位的情况。若最高位为1,则AH=0;若最高位为0,则AH=0FFH。7. 编程序完成下列功能:(1)利用中断调用产生5 秒延时。(2)利用中断调用,在屏幕上显示19 之间随机数。答:(1)可以利用中断类型1CH 来处理,因为在系统时钟的中断处理程序中,时钟中断一次要调用一次INT 1CH,即每隔55ms,产生一次1CH 中断,要产生5 秒延时,只要中断5s/55ms=91 次即可。又因1CH 中断处理程序中只有一条IRET 指令,故可将用户的程序代替原有的INT 1CH 程序。DATA SEGMENTCOUNT DW 91 ;计数器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,AXMOV AL,1CH ;设置中断向量MOV AH,25HINT 21HPOP DSIN AL,21H ;设置中断屏蔽位AND AL,0FEHOUT 21H,ALSTIMOV DI,2000H ;主程序延迟,在执行此段程序期间A1: MOV SI,3000H ;产生中断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 秒计数JNZ EXITMOV DX,OFFSET MESS ;显示信息MOV AH,09HINT 21HMOV COUNT,91 ;5 秒的值EXIT: CLIPOP DXPOP CXPOP AXPOP DSIRETDELAY ENDPCODE ENDSEND START(2)可以利用INT 1AH,读取当前时间的1/100 秒为随机数。CODE SEGMENTASSUME CS:CODESTART:MOV AH,0INT 1AH ;读取当前时间CH:CL=时:分MOV AL,DL ;DH:DL=秒:1/100 秒MOV AH,0MOV BL,9DIV BLINC AHMOV DL,AHADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START8. 编两个通过过程完成将AX 中存放的二进制数转换成压缩型BCD 码以及将BCD 码转换成二进制数。答:(1)将AX 中的二进制数先后除以1000,100 和10,每次除法所得的商,即是BCD 数的千位、百位和十位数,余数是个位数。子程序名:B2TOBCD输入参数:AX=十六位二进制数输出参数:CF=0,则AX=4 位压缩型BCD 码。CF=1,则要转换的数大于9999,AX 不变。使用寄存器:CX:存放除数,DX:存放中间结果。B2TOBCD PROC FARCMP AX,9999 ;AX9999,则CF 置1JBE TRANSTCJMP EXITTRAN: PUSH CXPUSH DXSUB DX,DX ;DX 清0MOV CX,1000 ;计算千位数DIV CXXCHG AX,DX ;商在DX 中,余数在AX 中MOV CL,4SHL DX,CL ;DX 左移4 位MOV CL,100 ;计算百位数DIV CLADD DL,AL ;百位数加到DL 中,DX 左移4 位MOV CL,4SHL DX,CLXCHG AL,AH ;余数保留在AL 中SUB AH,AHMOV CL,10 ;计算十位数DIV CLADD DL,AL ;十位数加到DL 中,DX 左移4 位MOV CL,4SHL DX,CLADD DL,AH ;加个位数MOV AX,DX ;结果送到AX 中POP DXPOP CXEXIT: RETB2TOBCD ENDP(2)将AX 中4 位BCD 码顺序乘以1000,100,10 和1,然后求和即得。子程序名:BCDTOB2输入参数:AX=4 位压缩BCD 码输出参数:AX=十六位二进制数使用寄存器:BX:暂存数据,CX:存放乘数,DX:存放中间结果BCDTOB2 PROC FARPUSH BXPUSH CXPUSH DXMOV BX,AXMOV CL,4ROL AX,CLAND AX,000FHMOV CX,1000 ;乘以1000MUL CXMOV 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 码转换成二进制数功能,另一个完成ASCII 字符显示输出功能。答:(1)将AX 中两位ASCII 码先转化成数字,然后AH*10+AL。子程序名:ASCIITOB2输入参数:AX=2 位ASCII 码输出参数:AX=转换后二进制数使用寄存器: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 功能调用显示字符。子程序名:DISPLAY输入参数:AX=2 位ASCII 码输出参数:无使用寄存器:BX,DXDISPLAY PROC FARPUSH BXPUSH DXMOV BX,AXMOV DL,AHMOV AH,2INT 21HMOV AX,BXMOV DL,ALMOV AH,2INT 21HPOP DXPOP BXRETDISPLAY ENDP10. 编制两个通用过程,完成十六进制数转换成ASCII 码并将ASCII 码字符显示。答:(1)子程序名:HEXTOASC输入参数:AX:4 位十六进制数输出参数:DX,AX:4 位ASCII 码,DX 高2 位,AX 低2 位使用寄存器:BX,CX,DXHEXTOASC PROC FARPUSH BXPUSH CXPUSH DXMOV BX,AXMOV CL,4 ;转换AH 高4 位SHR AX,CLAND AX,0F00HADD AH,30HCMP AH,3AHJB A1ADD AH,7A1: MOV DH,AHMOV AX,BX ;转换AH 低4 位AND AX,0F00HADD AH,30HCMP AH,3AHJB A2ADD AH,7A2: MOV DL,AHMOV BH,BL ;转换AL 高4 位MOV CL,4SHR BL,CLADD BL,30HCMP BL,3AHJB A3ADD BL,7A3: MOV AH,BLAND BH,0FH ;转换AL 低4 位ADD BH,30HCMP BH,3AHJB A4ADD BH,7A4: MOV AL,BHPOP DXPOP CXPOP BXRETHEXTOASC ENDP(2)子程序名:DISPLAYASC输入参数:DX,AX:4 位ASCII 码输出参数:无使用寄存器: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),分别转向6 个子程序,子程序入口地址分别为P0P5,编制程序,用跳转表实现分支结构。答: 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 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 的数组中按递增次序存放着100 个16 位补码数,编写一个程序,把出现次数最多的数及其出现次数分别存放于AX 和BL 中。答: DATA SEGMENTTABLE DW 100 DUP (?) ;数组中的数据是按增序排列的NUM DW ?COUNT DW 0DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS: CODE, DS: DATASTART: PUSH DS ;设置返回DOSSUB AX, AXPUSH AXMOV AX, DATAMOV DS, AX ;给DS 赋值BEGIN: MOV CX, 100 ;循环计数器MOV SI, 0NEXT: MOV DX, 0MOV AX, TABLESICOMP: CMP TABLE SI, AX ;计算一个数的出现次数JNE ADDRINC DXADD SI, 2LOOP COMPADDR: CMP DX, COUNT ;此数出现的次数最多吗?JLE DONEMOV COUNT, DX ;目前此数出现的次数最多,记下次数MOV NUM, AX ;记下此数DONE: LOOP NEXT ;准备取下一个数MOV CX, COUNT ;出现最多的次数存入(CX)MOV AX, NUM ;出现最多的数存入(AX)RETMAIN ENDPCODE ENDS ;以上定义代码段END START13. 将键盘上输入的十六进制数转换成十进制数,在屏幕上显示。答: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,STRING ;显示提示信息MOV AH,9INT 21HMOV BP,4MOV DX,0CONT: MOV CL,4 ;输入4 位十六进制数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 转换成十进制数,再转换成ASCII 码NUMMOV AX,DXMOV DX,0MOV BX,10D2: DIV BXADD DL,30HMOV NUMSI,DLINC SICMP AX,0JZ EXITMOV DX,0JMP D2EXIT: MOV DL,0AH ;显示十进制数MOV AH,2INT 21HMOV DL,0DHINT 21HD3: DEC SIMOV DL,NUMSIMOV AH,2INT 21HJNZ D3MOV AH,4CHINT 21HCODE ENDSEND START14. 将AX 中的无符号二进制数转换成ASCII 字符串表示的十进制数。答:将13 题输入过程和输出过程去掉即得。DATA SEGMENTNUM DB 10 DUP(?) ;转换后ASCII 码按倒序存放于NUMDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX, ;无符号二进制数MOV SI,0 ;将AX 转换成十进制数,再转换成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 个有符号数,将它们排序并在屏幕上显示。答:DATA SEGMENTNUM DW 20 DUP(?) ;存放20 个有符号数ASC DB 10 DUP(?) ;输出时暂时保存每一个数的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 个有符号数(十进制),并A1: MOV AH,1 ;转化为二进制数存放于NUM 数组INT 21HCMP AL, ;判断是否空格JZ A2CMP AL,0DH ;是否回车符JZ A2CMP AL,- ;是否-JZ A3JMP A4A3: MOV BP,1JMP A1A4: PUSH AXMOV AX,DXMUL BXMOV DX,AXPOP AXSUB AL,30HMOV AH,0ADD DX,AXJMP A1A2: CMP BP,1JNZ A5NEG DX ;若为负数,则取负A5: MOV NUMSI,DXMOV BP,0ADD SI,2LOOP BEGINMOV DL,0DH ;回车换行MOV AH,2INT 21HMOV DL,0AHINT 21HMOV BX,0 ;对20 个有符号数按由小到大顺序排序MOV CX,19 ;采用冒泡法,排序后依然存放于NUM 数组L1: MOV DX,CXL2: MOV AX,NUMBXCMP AX,NUMBX+2JLE CONT1XCHG AX,NUMBX+2MOV NUMBX,AXCONT1: ADD BX,2LOOP L2MOV CX,DXMOV BX,0LOOP L1MOV CX,20 ;将20 个有符号数(二进制)转换为十进制数MOV SI,0 ;再转换为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: MOV DL,ASCDI-1MOV AH,2INT 21HDEC DIJNZ D3MOV DL, MOV AH,2INT 21HLOOP D1MOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START16. 编写多字节有符号数的加法程序,从键盘接收两个加数,在屏幕上显示结果。答: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 ;存放加数1NUM2 DW 0,0 ;存放加数2RESULT DB 0,0,0,0 ;存放结果DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA DX,STRING1 ;输入第一个加数(4 位十六进制数)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 A1SUB AL,7A1: SUB AL,30HMOV AH,0ADD NUM1SI,AXPOP CXLOOP CONTMOV DL,0DH ;回车换行MOV AH,2INT 21HMOV DL,0AHINT 21HLEA DX,STRING2 ;输入第二个加数(4 位十六进制数)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: SUB AL,30HMOV AH,0ADD NUM2SI,AXPOP CXLOOP CONT1MOV DL,0DH ;回车换行MOV AH,2INT 21HMOV DL,0AHINT 21HLEA SI,NUM1 ;两数相加LEA BX,NUM2LEA DI,RESULTMOV CX,4CLCAD: MOV AL,SIADC AL,BXMOV DI,ALINC SIINC BXINC DILOOP ADLEA DX,STRING3 ;显示结果(4 位十六进制数)MOV AH,9INT 21HMOV CX,4MOV DI,3TT: PUSH CXMOV DL,RESULTDIMOV CL,4SHR 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 码相乘的程序。答:转化成加法进行累加运算。DATA SEGMENTDA1 DB 09H,09HDA2 DB 09H,08HRESULT DB 4 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,DA2+1 ;计算加法次数MOV BL,10MUL BLMOV BL,DA2MOV BH,0ADD AX,BXMOV CX,AXCONT: MOV AH,0 ;通过循环做累加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 RESULT+2,ALMOV AL,RESULT+3ADD AL,AHMOV AH,0AAAMOV RESULT+3,ALLOOP CONTMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START18. 编写完整的程序求N!,求N 大于6 时的运算结果,并在屏幕上显示结果。答:DATA SEGMENTN DB 8 ;求8 的阶乘DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,NMOV AH,0CALL FACT ;调用过程求N!,AX=N,BX=N!CALL B2TODEC ;调用过程将结果转换为十进制,然后屏幕显示MOV AH,4CHINT 21HFACT PROCCMP AL,0JNZ CHNMOV BX,1RETCHN: PUSH AXDEC ALCALL FACT ;递归调用N!=N*(N-1)!POP AXMUL BXMOV BX,AXRETFACT ENDPB2TODEC PROCMOV CX,10000CALL BINMOV CX,1000CALL BINMOV CX,100CALL BINMOV CX,10CALL BINMOV CX,1CALL BINRETB2TODEC ENDPBIN PROCMOV AX,BXMOV DX,0DIV CXMOV BX,DXMOV DL,ALADD DL,30HMOV AH,2INT 21HRETBIN ENDPCODE ENDSEND START19. 在附加段有一个数组,首地址为BUFF,数组中第一个字节存放了数组的长度。编一个程序在数组中查找0,找到后把它从数组中删去,后续项向前压缩,其余部分补0。答:DATA SEGMENTBUFF DB 10, 1,0,2,3,4,0,5,6,7,0 ;10 个数M EQU 0DATA ENDSCODE SEGMENTASSUME CS:CODE, ES:DATA, DS:DATASTART: MOV AX, DATA ; 初始化ES,DSMOV ES, AXMOV DS, AXMOV AL, M ; 关键字M 存入ALMOV DI, OFFSET BUFFMOV CL, DI ; 数组长度存入CXMOV CH, 0INC DI ;指向数组起始地址CLD ;清方向标志L1: REPNE SCASB ;重复搜索关键字JNZ STOP ; 未找到,转STOP 结束JCXZ STOP ; 最后一个数是M,转STOPPUSH DI ;关键字下一单元地址和循PUSH CX ;环次数入栈保护DEL: MOV BL, DI ; 前移,末尾补0MOV DI-1, BLINC DILOOP DELMOV BYTE PTRDI-1, 0POP CX ; 恢复CX,DIPOP DIDEC DI ; 由于REPNE SCASB 已自动加1JMP L1STOP: MOV AH, 4CHINT 21HCODE ENDSEND START20. 编程完成将第二个字符串插入到第一个字符串的指定位置上。答:DATA SEGMENTSTRING1 DB THIS IS THE FIRST STRING!,$DB 100 DUP(0) ;缓冲区NUM1 DW ? ;字符串1 的长度STRING2 DB the second string!,$NUM2 DW ? ;字符串2 的长度POS DW 8 ;插入位置DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXLEA DI,STRING1 ;求字符串1 的长度存入NUM1MOV AL,$MOV NUM1,0CLDD1: SCASBJZ D2INC NUM1JMP D1D2: LEA DI,STRING2 ;求字符串2 的长度存入NUM2MOV AL,$MOV NUM2,0CLDD3: SCASBJZ D4INC NUM2JMP D3D4: LEA SI,STRING1 ;将字符串1 自插入位置开始的字符向后移动,ADD SI,NUM1 ;空出位置以便插入字符串2MOV DI,SIADD DI,NUM2STDMOV CX,NUM1SUB CX,POSINC CXREP MOVSBLEA SI,STRING2 ;将字符串2 插入到字符串1 指定位置LEA DI,STRING1ADD DI,POSCLDMOV CX,NUM2REP MOVSBLEA DX,STRING1MOV AH,9INT 21HMOV AH,4CHINT 21HCODE ENDSEND START21. 将学生的班级、姓名、学号、课程名、成绩定义为一个结构,用结构预置语句,产生5个学生的成绩登记表,编程序将成绩小于60 分的学生姓名、成绩显示出来。答:STUDENT STRUCCLASS DB ? ;班级NAM DB ABCDE$ ;姓名NUM DB ? ;学号COURSE DB ABCD ;课程SCORE DB ? ;成绩STUDENT ENDSDATA SEGMENTSTUDENT1 STUDENT STUDENT2 STUDENT STUDENT3 STUDENT STUDENT4 STUDENT 1,XIAOD$,004,MATH,9
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!