📄 mubcdadd.asm
字号:
;********************MUBCDADD********************
;本程序实现多字节非压缩BCD码加法。
;入口参数: 被加数地址在SADR中,加数地址在DADR中,字节数在CNT中。
;出口参数: 结果首地址在SADR中,字节数在CNT中,进位在STATUS:C中。
;占用资源: W,STATUS,FSR,020H,022H,023H,028H,029H,02AH,一重堆栈。
;说 明: 被加数将被冲掉.
IFNDEF MUBCDADD1
#DEFINE MUBCDADD1
MUBCDADD CLRF TEMP3 ;进位位清零
MOVF SADR,W
MOVWF TEMP2 ;保存结果首地址
NEXT2 MOVF DADR,W
MOVWF FSR
MOVF INDF,W
MOVWF TEMP1 ;暂存加数
MOVF SADR,W
MOVWF FSR
MOVF TEMP1,W
ADDWF INDF,F
BTFSS STATUS,DC ;检查半进位
GOTO NODC2
BTFSC TEMP3,0 ;低位送来的进位
INCF INDF,F ;此时不可能产生进位
MOVLW 6
ADDWF INDF,F ;加6处理
OVER6 MOVLW 0FH
ANDWF INDF,F ;去掉高四位
BSF TEMP3,0
GOTO DONE1
NODC2 BTFSS TEMP3,0
MOVLW 6
BTFSC TEMP3,0
MOVLW 7
ADDWF INDF,F
BTFSC STATUS,DC ;DC为1,表明原结果大于9
GOTO OVER6
MOVLW 06H
SUBWF INDF,F
BCF TEMP3,0
DONE1 INCF DADR,F
INCF SADR,F
DECFSZ CNT,F
GOTO NEXT2
MOVF TEMP2,W
SUBWF SADR,W
MOVWF CNT ;恢复字节数
MOVF TEMP2,W
MOVWF SADR
RRF TEMP3,W ;将进位位移到STATUS:C中
RETLW 0
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -