汇编小程序:可进位两个多位数相加

实验内容:将两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。

DATAs SEGMENT

DATA1 DB        ' 37416$'

DATA2 DB         '78456$'

DATAs ENDS

STACKS SEGMENT

dw 20h dup(?)

STACKS ENDS

CODE SEGMENT

ASSUME    DS:DATAs,CS:CODE,ss:stacks

START:

MOV       AX,DATAs

MOV       DS,AX

MOV       DX,OFFSET DATA1

CLC                         ;将进位标志置零

MOV       SI,0

MOV      DI,0

MOV         CX,5

;loop1完成将字符变成数

LOOP1: SUB       DATA1[SI+1],30H       ;将字符的ASCII码减30,实现变成数

SUB       DATA2[DI],30H

INC       SI

INC       DI

LOOP1

MOV       SI,4

MOV       DI,4

MOV         CX,5

;loop2完成计算

LOOP2: MOV       AL,DATA1[SI+1]        ;从低位开始输入

ADC       AL,DATA2[DI]       ;带进位的加法

AAA

MOV       DATA1[SI+1],

DEC       SI

DEC       DI

LOOP      LOOP2              ;完成逐位加法计算

MOV       SI,0

MOV       DI,0

MOV     CX,5

JNC     LOOP4

MOV     DATA1[0],1

MOV     CX,6

;loop3完成有进位时输出量的生成

LOOP3: ADD       DATA1[SI],30H     ;恢复成字符并输出

INC       SI

LOOP3

LEA       DX,DATA1

MOV       AH,9

INT       21H

JMP     EXIT

;loop4完成无进位时输出量的生成

LOOP4: ADD       DATA1[SI+1],30H       ;恢复成字符并输出

INC       SI

LOOP4

LEA       DX,DATA1

MOV       AH,9

INT       21H

JMP     EXIT

EXIT:   MOV       AH,4CH            ;返回dos

INT       21H

CODE ENDS

END       START