汇编语言实现两个任意大的数相加

实现了输入,相加,输出功能,可在此基础上做出自己的修改,代码如下:

DATA SEGMENT
MSG1 DB "Please Input The First Number:",0DH,0AH,"$"
MSG2 DB "Please Input The Second Number:",0DH,0AH,"$"
REM DB "The reslut is:$"
N1_LEN DW 0
NUM1 DB 100 DUP(0)
N2_LEN DW 0
NUM2 DB 100 DUP(0)
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
;----------------------
MAIN PROC FAR ;主程序
MOV DX,DATA
MOV DS,DX
LEA DX,MSG1
MOV AH,09
INT 21H ;显示第一句提示语
LEA BX,NUM1 ;输入第一个数
CALL INPUT
CALL CRLF
LEA DX,MSG2
MOV AH,09
INT 21H ;显示第二句提示语
LEA BX,NUM2 ;输入第二个数
CALL INPUT
CALL ADDER
CALL CRLF
LEA DX,REM
MOV AH,09
INT 21H ;显示结果提示语
LEA BX,NUM1
CALL SHOW
CALL CRLF
EXIT:
MOV AH,4CH
INT 21H
RET
MAIN ENDP
;------------------------
CRLF PROC NEAR ;回车换行
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
RET
CRLF ENDP
;-----------------------
INPUT PROC NEAR ;bx:数组首地址,第一个元素方长度
PUSH DS
PUSH AX
PUSH DX
XOR SI,SI ;SI清零
INC SI
NEXT:
CMP SI,100
JE OVER
MOV AH,01
INT 21H
CMP AL," "
JE OVER
CMP AL,0DH
JE OVER
CMP AL,"0" ;忽略其他字符
JB NEXT
CMP AL,"9"
JA NEXT
SUB AL,30H ;转换为十进制
MOV [BX+SI],AL
INC SI
JMP NEXT
OVER:
DEC SI
MOV WORD PTR [BX-1],SI ;保存长度
POP DX
POP AX
POP DS
RET
INPUT ENDP
;-------------------------
SHOW PROC NEAR
PUSH DS
PUSH AX
PUSH DX
MOV CX,[BX-1] ;数组长度,BX:数组首地址
XOR SI,SI
INC SI
NEXTSHOW:
MOV AH,02
MOV DL,BYTE PTR [BX+SI]
ADD DL,30H ;转换为ASCII码
INT 21H
INC SI
LOOP NEXTSHOW
POP DX
POP AX
POP DS
RET
SHOW ENDP
;----------------------
ADDER PROC NEAR ;NUM1,NUM2分别是数组的首地址,结果放到NUM1数组中,进位CF
PUSH DS
PUSH AX
PUSH DX
MOV SI,WORD PTR [NUM1-1] ;SI存放BX的长度
MOV CX,SI
MOV DI,WORD PTR [NUM2-1] ;DI存放BP的长度
XOR DL,DL ;DL清零
CMP CX,DI
MOV WORD PTR [NUM1-1],CX
JAE CONTINUE ;CX存放两个数组中较大一个的长度
MOV CX,WORD PTR [NUM2-1]
MOV WORD PTR [NUM1-1],CX ;修改结果的长度
CONTINUE:
MOV AL,DL
XOR DL,DL
CMP SI,0
JE LA
ADD AL,[NUM1+SI]
DEC SI
JMP LB
LA:
ADD AL,0
LB:
CMP DI,0
JE LC
ADD AL,BYTE PTR [NUM2+DI]
DEC DI
AAA
ADC DL,0
JMP LD
LC:
ADD AL,0
AAA
ADC DL,0
LD:
MOV BX,CX
MOV [NUM1+BX],AL
LOOP CONTINUE
POP DX
POP AX
POP DS
RET
ADDER ENDP

CODE ENDS
END MAIN

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值