📄 加法子程序.asm
字号:
ORG 0000H
MOV A,#0C8H ;0C8=200
MOV B,#195 ;200*192=39000H
MUL AB
ADDPRO:MOV 50H,#0 ;;;;;;;;;;;
MOV 51H,#0 ;把需要用到的
MOV 52H,#0 ;缓冲单元清零
MOV 5AH,#0
MOV 5BH,#0 ;;;;;;;;;;;
PUSH B ;把高位保存
MOV B,#10 ;;;;;;;;;;;
DIV AB
MOV 59H,B ;把低位换算成
MOV B,#10 ;十进制数
DIV AB ;存于5ah和5bh
MOV 58H,B ;单元中
MOV 57H,A
MOV A,58H
SWAP A
ORL A,59H
MOV 5BH,A
MOV 5AH,57H ;;;;;;;;;;;
POP A ;把高位出栈
JZ WELL ;高位为零则无须计算
MOV R7,A ;低位作为计数值
LOOP: CLR C ;;;;;;;;;;;;;
MOV A,52H
ADD A,#56H ;低字节加56h
DA A ;是十进制加法
MOV 52H,A
JC ADD3 ;有进位,加3
ADD2: MOV A,51H ;高字节加2
ADD A,#2H ;是十进制加法
DA A
MOV 51H,A
MOV A,50H
ADDC A,#0 ;累加进位位
MOV 50H,A
DJNZ R7,LOOP ;高位数值计完了?
SJMP Q_HE
ADD3: MOV A,51H ;低字节有进位
ADD A,#3H ;则高字节加3
DA A
MOV 51H,A
MOV A,50H
ADDC A,#0
MOV 50H,A
DJNZ R7,LOOP ;;;;;;;;;;
Q_HE: MOV A,5BH ;计算完高位后
ADD A,52H ;把低位也累加
DA A ;ram单元中
MOV 52H,A
MOV A,5AH
ADDC A,51H
DA A
MOV 51H,A
MOV A,50H
ADDC A,#0
MOV 50H,A ;高位为零情况
SJMP OUTIT ;计算完毕
WELL: MOV 52H,5BH ;高位为零时
MOV 51H,5AH ;只需存低位
;最后结果
OUTIT: SJMP $ ;在50h,51h,52h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -