📄 mulity_bcd_add.asm
字号:
;---------------------------------------------十进制加法子程序
BCD_ADD;######################################
;入口:被加数TEMP,加数TEMP1出口:结果TEMP,进位位TEMP1
;---------------------------------------------
MOVF TEMP1,W
ADDWF TEMP,F
CLRF TEMP1
RLF TEMP1,F ;进位送入
BTFSC STATUS,DC
GOTO ADDJUST ;DC=1
MOVLW 0x06 ;假设LSD>9
ADDWF TEMP,F
BTFSC STATUS,C
INCF TEMP1,F
BTFSS STATUS,DC
SUBWF TEMP,F
GOTO BCD_ADD_END1
ADDJUST
MOVLW 0x06
ADDWF TEMP,F
BCD_ADD_END1
MOVLW 0x60
ADDWF TEMP,F ;假设MSD>9
BTFSC STATUS,C
GOTO BCD_ADD_END2
BTFSS TEMP1,0x00
SUBWF TEMP,F
GOTO BCD_ADD_END
BCD_ADD_END2
MOVLW 0x01
MOVWF TEMP1
BCD_ADD_END
RETURN
;----------------------------------------------------
BCD_CARRY;##########################################
;入口:加进位位地址,B_COUNT被加数位数减一
MOVF TEMP3,W
MOVWF FSR
RE_BCD_CARRY
MOVF INDF,W
MOVWF TEMP
CALL BCD_ADD
MOVF TEMP,W
MOVWF INDF
DECF FSR,F
DECFSZ B_COUNT,F
GOTO RE_BCD_CARRY
RETURN
;------------------------------------------------
MULITY_BCD_ADD;########################################
;入口:被加数低位地址TEMP3,加数低位地址TEMP2,字节个数TEMP4,结果覆盖被加数
RE_MUL_BCD_ADD
MOVF TEMP2,W
MOVWF FSR
MOVF INDF,W
MOVWF TEMP1
MOVF TEMP3,W
MOVWF FSR
MOVF INDF,W
MOVWF TEMP
CALL BCD_ADD
MOVF TEMP,W
MOVWF INDF
DECF TEMP3,F
DECF TEMP2,F
DECFSZ TEMP4,F
GOTO MUL_BCD_ADD_CARRY
GOTO MULITY_BCD_ADD_END
MUL_BCD_ADD_CARRY
MOVF TEMP4,W
MOVWF B_COUNT
CALL BCD_CARRY
GOTO RE_MUL_BCD_ADD
MULITY_BCD_ADD_END
RETURN
;------------------------------------------------------
;测试程序
;------------------------------------------------------
START
MOVLW 0x23
MOVWF TEMP2
MOVLW 0x33
MOVWF TEMP3
MOVLW 0x04
MOVWF TEMP4
CALL MULITY_BCD_ADD
NOP
NOP
;----------------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -