资源描述:
《微机原理程序设计考题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一.两个多位十进制数相加将两个多位十进制数相加,要求加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。分析:整个程序分为4个部分:显示加数、转换、相加、输出结果。我们可以分别用子程序来完成各个部分的功能。1. 显示加数。可以利用DOS功能的显示单个字符的功能(02H),在主程序中让SI寄存器间指需要显示的内容。注意:在内存中存放的顺序是低位在前,而显示的时候要高位在前。子程序如下:DISPLAYPROC MOV C
2、X,5NEXT: MOV DL, [SI] ;取要显示的字符 MOV AH,02H INT 21H DECSI LOOP NEXT RETDISPLAY ENDP2.转换。转换的目的是将以ASCII码形式表示的各位变成实际的大小。也就是将ASCII码的形式转换为BCD码的形式,一个字节表示一
3、位。在主程序中让SI寄存器间指需要显示的内容。由于加数都是十进制的,所以只有数字0~9,因此只要让每个字符减去30H就得到了相应位的大小。子程序如下:CHANGE PROC ;转换子程序 MOV CX,5 ;取字符串长度放CX中 NEXT1: MOV AL,[SI] SUB AL, 30H MOV [
4、SI],AL INC SI LOOP NEXT1 RETCHANGE ENDP3.加法。可以利用带进位的加法ADC按位相加,再进行十进制调整。注意从最低位开始加起。在主程序中让SI间指被加数,DI间指加数。子程序如下:ADDC PROC CLC ;清进位位 MOVCX,5
5、;设置循环次数 P1: MOV AL,[SI] ADC AL,[DI] AAA MOV[SI],AL ;保存结果 INCSI INCDI LOOPP1 RETADDC ENDP4.显示结果。结果在内存中是以BCD码的形式存放,在显示之前需要先
6、转换成ASCII码,直接加上30H就可以,和显示加数一样,还是单个字符显示。注意先显示最高位.子程序如下:RESULT PROC MOVCX,5 LEA SI,[data1+4] P2: MOV BL, [SI] ADD BL,30H MOV DL,BL MOV AH,02H
7、 INT 21H DECSI LOOPP2 RETRESULT ENDP5.主程序。在主程序中要定义数据段用以存放加数和结果;完成程序的初始化;调用各个子程序;等等。主程序如下:DATASEGMENTSTR1 DB 0DH,0AH,‘$‘ ;回车换行data1 DB 32H,34H,35H,36H,38H ;被加数86542data2 DB 35H,38H,
8、34H,32H,31H ;加数12485code SEGMENT ASSUME CS:CODE,DS:DATAstart: MOV AX, DATA ;置缓冲区地址于DS:DX MOV DS, AX LEA SI,