将两个不带符号的多位十进进制数相加

;
;将两个不带符号的多位十进进制数相加.
;要求加数和被加数均以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







  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值