实验三 两个多位数十进制数相加的实验
一、实验目的
学习数据传送和算术运算指令的用法。 熟悉在PC机上建立、汇编、链接、调试和运行8086汇编语言程序的过程。
二、实验内容及程序
将两个多位数十进制数相加,要求被加数和加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中,且低位在前,结果送回DATA1处。
编程要求与提示:
[1] 两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。
[2] 和以压缩十进制数的形式存入SUM以下单元。
[3] 将和送到屏幕显示部分功能的实现采用子程序的形式。
[4] 实验步骤如下:
a. 用全屏幕编辑软件建立源程序。
b.用masm.exe汇编程序对源程序进行汇编,形成目标程序。
c. 用link.exe连接程序对目标程序进行连接形成可执行文件。
d. 用DEBUG对连接通过的可执行程序进行调试。
三、参考流程
开始 显示加数和被加数 加数和被加数以ASCⅡ码表示的数字串形式转化为由十六进制表示的数字串形式 赋计数值给CX 清除最低位进 执行ADC带进位相加 AAA调整 结果送被加数区 调整偏移量 显示加数和被加数 CX-1=0 十六进制结果转化为ASCⅡ 显示结果 结束 STACK SEGMENT STACK 'STACK' DW 100H DUP(?) STACK ENDS DATA SEGMENT
ADD1 DD 12678532H ;加数以组合十进制形式存放在双字单元 ADD2 DD 21736543H SUM DD ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX
MOV AX,STACK MOV SS,AX
LEA SI,ADD1 LEA DI,ADD2 LEA BX,SUM MOV AL,[SI]
ADD AL,[DI] ;最低位的一个字节相加 DAA ;加法组合BCD码调整
MOV [BX],AL ;结果存放在SUM第一个字节 MOV AL,[SI+1] ;第二个字节相加 ADC AL,[DI+1] DAA
MOV [BX+1],AL MOV AL,[SI+2] ADC AL,[DI+2] DAA
MOV [BX+2],AL MOV AL,[SI+3] ADC AL,[DI+3] DAA
MOV [BX+3],AL
MOV DL,00 ;最高位字节有进位则显示\ADC DL,00
CALL DISPSUM
MOV AH,4CH ;返回DOS
INT 21H
DISPSUM PROC NEAR ;结果显示子程序 PUSH AX PUSH BX PUSH CX PUSH SI MOV SI ,4 PUSH DX MOV CX,5 LAB: PUSH CX PUSH BX MOV AL,DL MOV BL,DL
MOV CL,4 SHR AL,CL ADD AL,30H MOV AH,02 MOV DL,AL INT 21H AND BL,0FH ADD BL,30H MOV AH,02 MOV DL,BL INT 21H POP BX POP CX DEC SI
MOV DL,[BX][SI] LOOP LAB POP DX POP SI POP CX POP BX POP AX RET
DISPSUM ENDP CODE ENDS
显示高位字节 ;显示一位字符 ;显示低位字节 ;结果显示 ; END START