📄 mcobcdadd.asm
字号:
;********************MCOBCDADD********************
;本程序实现多字节压缩BCD码加法。
;入口参数: 被加数首地址在SADR中,加数首地址在DADR中,字节数在CNT中。
;出口参数: 结果首地址在SADR中,字节数在CNT中,进位在STATUS:C中。
;占用资源: W,STATUS,FSR,020H,022H,023H,028H,029H,02AH,一重堆栈。
;说 明: 被加数将被冲掉.
IFNDEF MCOBCDADD1
#DEFINE MCOBCDADD1
MCOBCDADD CLRF TEMP3 ;进位位清零
MOVF SADR,W
MOVWF TEMP2 ;保存结果首地址
NEXT3 MOVF DADR,W
MOVWF FSR
MOVF INDF,W
MOVWF TEMP1 ;暂存加数
MOVF SADR,W
MOVWF FSR
MOVF TEMP1,W
ADDWF INDF,F
RLF TEMP3,F ;保存进位
BTFSS TEMP3,1 ;将低字
GOTO NOCY1 ;节送来的
INCF INDF,F ;进位加上
BTFSC STATUS,Z ;并判断
BSF TEMP3,0 ;加的过程中
MOVLW 0FH ;是否又产生
ANDWF INDF,W ;了进位
BTFSC STATUS,Z
GOTO ADJUST1
NOCY1 BTFSC STATUS,DC ;DC = 0 ?
GOTO ADJUST1 ;调整LSD
MOVLW 6
ADDWF INDF,F ;通过加6检测是否 LSD > 9
BTFSC STATUS,C
BSF TEMP3,0
BTFSS STATUS,DC ;检查半进位
SUBWF INDF,F ; LSD < 9 ,恢复原值
GOTO OVER4
ADJUST1 MOVLW 6
ADDWF INDF,F
OVER4 MOVLW 60H ;MSD加6
ADDWF INDF,F
BTFSC STATUS,C
GOTO OVER5
BTFSS TEMP3,0
SUBWF INDF,F
GOTO DONE2
OVER5 BSF TEMP3,0
DONE2 INCF DADR,F
INCF SADR,F
DECFSZ CNT,F
GOTO NEXT3
MOVF TEMP2,W
SUBWF SADR,W
MOVWF CNT ;恢复字节数
SUBWF SADR,F ;恢复结果首址
RRF TEMP3,F ;获得进位位
RETURN
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -