;
;将两个不带符号的多位十进进制数相加.
;要求加数和被加数均以ASCII码形式分别顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),
;结果送回以DATAl为首的内存单元中
CRLF MACRO ;输出回车换行
MOV DL,0AH;输出换行
MOV AH,02H ;单字符显示
INT 21H
MOV DL,0DH;输出回车
MOV AH,02H
INT 21H
ENDM
;输出提示信息
TIP1 MACRO
LEA DX,STRING1;把指针传给DX,对应9号功能
MOV AH,9
INT 21H
MOV AH,4CH
INT 21
ENDM
TIP2 MACRO
LEA DX,STRING2
MOV AH,9
INT 21H
MOV AH,4CH
INT 21
ENDM
DATAS SEGMENT ;定义数据段
;此处输入数据段代码
DATA1 DB 03H+30H,09H+30H,00H,00H,00H ;3 9 0 0 0->93
DATA2 DB 06H+30H,04H+30H,00H,00H,00H ;6 4 0 0 0->46
;DATA1 DB '3450'
;DATA2 DB '1110'
STRING1 DB 'Number:',9,'$'
STRING2 DB 'Sum:',9,'$'
DATAS ENDS
STACK SEGMENT PARA STACK 'STACK'
;此处输入堆栈段代码
STA DB 20 DUP(?) ;重复定义一个20BYTE的空间
TOP EQU LENGTH STA ;TOP = STA的长度
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAS,SS:STACK,ES:DATAS ;默认段
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV AX,STACK
MOV SS,AX
MOV ES,AX
MOV AX,TOP
MOV SP,AX
;输出第一个数字
TIP1
MOV SI,OFFSET DATA1 ;DATA的偏移地址,传送到SI
MOV BX,05
CALL DISPL
CRLF
;输出第二个数字
TIP1
MOV SI,OFFSET DATA2
MOV BX,05
CALL DISPL
CRLF
;输出结果
TIP2
MOV DI,OFFSET DATA1
CALL ADDA
MOV SI,OFFSET DATA2
MOV BX,05
CALL DISPL
CRLF
MOV AX,4C00H
INT 21H
DISPL PROC
DSL: MOV AH,02H
MOV DL,[SI+BX-1]
INT 21H
DEC BX
JNZ DSL
RET
DISPL ENDP
;函数相加
ADDA PROC
MOV DX,SI
MOV BP,DI
MOV BX,05
AD1:SUB BYTE PTR[SI+BX-1],30H ;相加并转换成BYTE类型
SUB BYTE PTR[DI+BX-1],30H
DEC BX ;循环5次
JNZ AD1
MOV SI,DX
MOV DI,BP
MOV CX,05
CLC
AD2:MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL ;进位加
AAA
MOV [SI],AL
INC SI
INC DI
LOOP AD2
MOV SI,DX
MOV DI,BP
MOV BX,05
AD3:ADD BYTE PTR[SI+BX-1],30H
ADD BYTE PTR[DI+BX-1],30H
DEC BX
JNZ AD3
RET
ADDA ENDP
CODE ENDS
END START
将两个不带符号的多位十进进制数相加
最新推荐文章于 2022-12-06 16:41:22 发布