这几天老师叫我们用汇编语言实现加法,在网上找了一些,自己做了修改....
此为汇编语言实现20位数加法的程序(非组合BCD码加法)
已调试通过:
DATA
SEGMENT
STR1 DB 'Please input the two numbers:',13,10,'$'
STR2 DB 13,10,'$'
STR3 DB 13,10,'Continue? [Y/N] ','$'
FIRST DB 40 DUP(0);为被加数分配空间
SECOND DB 40 DUP(0);为加数分配空间
SUM
DB
40 DUP(0);为和分配空间
DATA
ENDS
CODE
SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,STR1
MOV
AH,09
INT
21H
;显示字符串1
MOV SI,OFFSET
FIRST+20
;SI指向被加数地址中部
MOV BX,OFFSET SECOND+20
;BX指向加数地址中部
MOV
CX,00
;CX初始为0
INPUT1:
MOV AH,01
INT
21H
;输入字符
AND
AL,0FH
;转换成非组合的BCD码
MOV [SI],AL
CMP
AL,0DH
;用回车判断是否输入结束
JE
L1
;输入结束,转L1
INC
SI
;输入未结束,则继续输入
INC
CL
;用CL为被加数的位数计数
JMP INPUT1
L1:
LEA
DX,STR2
MOV AH,09
INT
21H
;回车换行
MOV
DL,'+'
MOV
AH,02
INT
21H
;显示器输出字符'+'
LEA DX,STR2
MOV AH,09
INT
21H
;回车换行
INPUT2: MOV AH,01
INT
21H
;输入字符
AND
AL,0FH
;转换成非组合的BCD码
MOV [BX],AL
CMP
AL,0DH
;用回车判断是否输入结束
JE
L2
;输入结束,转L2
INC
BX
;输入未结束,则继续输入
INC
CH
;用CH为被加数的位数计数
JMP INPUT2
L2:
LEA DX,STR2
MOV AH,09
INT
21H
;回车换行
MOV DL,'='
MOV AH,02
INT
21H
;显示器输出字符'='
AND
AX,00H
;AX置0
DEC SI
DEC BX
MOV DI,OFFSET
SUM
;DI指向和数
CLC
;CF置0
CMP
CL,CH
;比较被加数和加数的位数
JGE
L4
STR1 DB 'Please input the two numbers:',13,10,'$'
STR2 DB
STR3 DB
FIRST DB 40 DUP(0);为被加数分配空间
SECOND DB 40 DUP(0);为加数分配空间
SUM
DATA
CODE
START:
INPUT1:
L1:
INPUT2: MOV AH,01
L2: