五、两个多位十进制数相加 要求:将下面程序在汇编平台下,完整地进行汇编、连接、运行,然后用DEBUG软件调入可执行文件到内存,用反汇编命令查看实际程序及数据区内容,用t命令逐条执行,以观察各寄存器及数据区内存的数据变化情况,然后使用p命令和g命令执行,以观察执行过程有何特点。 将两个5位十进制数相加,要求被加数(本题选47193)和加数(本题选28056)均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回以DATA3为首的5个内存单元中(低位在前),并显示相加的结果。 实验程序和结果如下: DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H ;存放被加数47193,ASCII码形式,低位在前 DATA2 DB 36H,35H,30H,38H,32H ;存放加数28056,ASCII码形式,低位在前 DATA3 DB 5 DUP(?) ;留出5个存放结果的单元 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,5 ;循环次数置5,5个位要相加5次 MOV SI,0 ;SI放地址位移量,每个数的第一字节地址位移量为0 CLC ;CF清0,防止第1个字节相加时ADC指令多加CF中可能的1 NEXT: MOV AL,DATA1[SI] ;取被加数一个字节送AL,DATA1偏移地址+SI为有效地址 ADC AL,DATA2[SI] ;AL+加数对应字节+CF(低位相加时可能的进位)结果送AL AAA ;AL中两字节相加的和调整成非压缩的BCD码,进位在CF中 MOV DATA3[SI],AL ;结果送入DATA3对应字节单元中 INC SI ;地址位移量加1指向高一位字节单元 LOOP NEXT ;5次未到,继续循环 MOV SI,5 ;显示5个位,SI中的数既是循环次数又作地址位移量 DISP: ADD DATA3[SI-1],30H ;将结果从高位单元开始把非压缩的BCD码变成ASCII码 MOV DL,DATA3[SI-1] ;将ASCII码送DL以满足2号功能调用的规定要求 MOV AH,2 ;功能号送AH INT 21H ;调用2号功能,显示一位数字 DEC SI ;次数减1 JNZ DISP ;5次未到,继续循环 MOV AH,4CH ;功能号送AH INT 21H ;调用4CH号功能,返回DOS CODE ENDS END START 运行结果: 75249 |