DATA SEGMENT
DATA1 DB 33H,39H,31H,37H,34H ;第一个数据(作为被加数)
DATA2 DB 36H,35H,30H,38H,32H ;第二个数据(作为加数)
DATA ENDS
STACK SEGMENT ;STACK'STACK' ;堆栈段
STA DB 32 DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA2
MOV CX,05H
CALL DISPL ; 显示被加数
CALL CRLF ; 回车、换行
MOV SI,OFFSET DATA1
MOV CX,05H ;显示加数
CALL DISPL
CALL CRLF ; 回车、换行
MOV DI,OFFSET DATA2
CALL ADDA ;加法运算
MOV SI,OFFSET DATA1
MOV CX,05H ;显示结果
CALL DISPL
CALL CRLF
MOV AX,004CH
INT 21H
CRLF PROC NEAR ;回车、换行 于功能
MOV DL,0DH ;回车
MOV AH,02H
INT 21H
MOV DL,0AH ;换行
MOV AH,02H
INT 21H
RET
CRLF ENDP
DISPL PROC NEAR ;显示于功能
DSL: MOV DL,[SI+BX-1] ;显示字符串中一字符
MOV AH,02;????
INT 21H ;
DEC CX ;修改偏移量
JNZ DSL
RET
DISPL ENDP
ADDA PROC NEAR
MOV DX,SI
MOV BP,DI
MOV CX,05h
AD1: SUB BYTE PTR[SI+BX-1],30H
SUB BYTE PTR[DI+BX-1],30H
DEC CX ;将ASCII码表示的数字串转化为十六进制串
JNZ AD1
MOV SI,DX
MOV DI,BP
MOV CX,05H ;包括进位,共5位
CLC ;清进位位
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL ;带进位相力口
AAA ;非组合BCD码的加法调整
MOV [SI],AL ;结果送被加数区
INC SI
INC DI ;指向下一位
LOOP AD2 ;循环
MOV SI,DX
MOV DI,BP
MOV CX,05H
AD3: ADD BYTE PTR [SI+BX-1],30H
ADD BYTE PTR [DI+BX-1],30H
DEC CX ;十六进制的数字串转化为ASCll码表示的串
JNZ AD3
RET
ADDA ENDP
CODE ENDS
END START