汇编小程序:可进位两个多位数相加
- 再创世纪·代码厨房
- 2008-03-16
- 337热度
- 2评论
实验内容:将两个多位十进制数相加,要求加数和被加数均以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
对我没帮助
对我没帮助