1、(3)G=2000,运行程序,并用CTRL+C来中断程序返回监控状态。(4)用D3510来查看结果,应为:3510 0C 00(5)反复试几组数,考查程序的正确性。地址(H) 助记符 注释2000 MOV SI,3500 ;源地址2003 MOV DI,3510 ;结果地址2006 MOV BX,000A ;乘数 102009 MOV CX,0004 ;计数200C MOV AH,00 ;AH 清零200E MOV AL,SI ;取被转换数2010 SUB AL,30 ;ASCII码变十进制数2012 IMUL BX ;高位(AX)*(BX)送AX2014 ADD AL,SI+01 ;取下一位
2、1017 SUB AL,30 ;ASCII码减30变十进制数2019 INC SI ;源地址指针+1201A LOOP 2012 ;CX-1,若CX不等于零则继续201C MOV DI,AX ;若CX不等于零则存结果201E INT 3 2 将十进制数的ASCII码转换为BCD码1)程序流程和程序设从键盘输入的五位十进制数的ASCII码已存放在3500H起始的内存单元内,把它转换成BCD码后,再按位分别存入350AH起始的内存单元内。若输入的不是十进制数的ASCII码,则对应存放结果的内容为“FF”。一字节ASCII码取其低四位即变为BCD码,程序流程图及考程序如图1-2所示。(1) 输入程序
3、并检查无误。(2) 在3500H3504H单元中存入五位十进制数的ASCII码,即E3500,并输入31,32,33,34,35。(3) G=2000,运行以上程序。(4) D350A,显示结果为:0000:350A 01 02 03 04 05 CC反复试几组数,考查程序的正确性。2000 MOV CX,0005;循环计数器赋初值2003 MOV DI,3500;ASCII码首址2006 MOV BL,FF; 错误标志送BL2008 MOV AL,DI;送ASCII码至AL200A CMP AL,3A; 比较AL与3AH200C JNB 2014; 不低于3A则转2014200E SUB A
4、L,30; 低于3A则取ASCII码的低四位2010 JB 2014; 低于30则转20142012 MOV BL,AL; 否则AL内容送BL,取代FF2014 MOV AL,BL; 结果或错误标志送AL2016 MOV DI+0A,AL2019 INC DI201A LOOP 2006201C INT 33 将十六位二进制数转换为ASCII码表示的十进制数1) 程序及其流程十六位二进制数的值域为065535,最大可转换为五位十进制数。算法:五位十进制数可表示为:Di:表示十进制数09。 因此,将十六位二进制数转换为五位ASCII码表示表示的十进制数,就是求D1D4,并将它化为ASCII码。程
5、序流程图如图1-3所示,设源数据存于35003501H单元中,结果数存于35103514H单元中。(2) 在35003501H单元中存放0C00,运行程序并检查结果,应看到35103514H单元中的数依次为3030303132。(3) 反复试几组数,并运行程序、观察结果。2000 MOV DX,3500;取二进制数2004 MOV SI,3515; 目标首址在35102007 DEC SI2008 MOV AX,DX200A MOV DX,0000200D MOV CX,000A 2010 DIV CX; ; 除102012 XCHG AX,DX2014 ADD AL,302016 MOV S
6、I,AL2018 CMP DX,0000201B JNE 2007201D CMP SI,3510 ; 填余下高位为02021 JZ 202A; 2023 DEC SI2024 MOV AL,302026 MOV SI,AL2028 JMP 201D202A INT 34、 十六进制数转换为ASCII码经过CPU处理后的十六进制数存放在起始地址为3500H的内存单元中,把它们转换成ASCII码之后,再分别存入起始地址为350AH的内存单元中。 从表2-1中可知,十六进制数加30H即可得到0H9H的ASCII码,而要得到AHFH的ASCII码,则需再加7H。程序流程图及参考程序如图1-4所示。(
7、2) 在35003501H单元中存入四位十六进制数203B,即E3500,并输入3B,20。(3) G=2000,运行以上程序350A 42 33 30 32 CC输入数据与结果ASCII码对应顺序相反。(5) 反复试几组数。考查程序的正确性。2000 MOV CX,00042003 MOV DI,35002006 MOV DX,DI200A AND AX,000F ;取低四位值200D CMP AL,0A; ; 判是否“0”-“9”200F JB 2013 ; 是“0”-“9”转20132011 ADD AL,07; 是“A”-“F”,加72013 ADD AL,30; 转换为ASCII码2
8、015 MOV DI+0A,AL2018 INC DI2019 PUSH CX ;保护循环计数器内容201A MOV CL,04; 移位次数送CL201C SHR DX,CL201E POP CX201F LOOP 20082021 INT 35 BCD码转换为二进制数 程序及其流程设四个二位十进制数的BCD码存放在起始地址为3500H,的单元中,转换出的二进制数码存入起始地址为3510H的内存单元中,程序流程图及参考程序如图1-5所示。(2) 在35003507单元中存入四个十进制数(12,34,56,78)的BCD码,即E3500 输入01,02,03,04,05,06,07,08。(4) D3510,显示结果为3510 0C 00 22 00 38 00 4E 00(5) 反复试几组数,考查程序的正确性。四、思考题1、 图1-1程序,将一个五位十进制数转换为二进制数(十六位)时,这个十进制数最小可为多少,最大又可为多少?为什么?2、 将一个十六位二进制数转换为ASCII码十进制数时,如何确定D1的值?3、 在十六进制数转换为ASCII码时,存转换结果后,为什么要把DX向右移四次?
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2