📄 mcobcdsub.asm
字号:
;********************MCOBCDSUB********************
;本程序实现多字节压缩BCD码减法。
;入口参数: 被减数首地址在SADR中,减数首地址在DADR中,字节数在CNT中。
;出口参数: 结果首地址在SADR中,字节数在CNT中,借位标志在STATUS:C中,'0'表示有借位。
;占用资源: W,STATUS,FSR,020H,022H,023H,028H,029H,02AH,一重堆栈。
;说 明: 被减数将被冲掉.
IFNDEF MCOBCDSUB1
#DEFINE MCOBCDSUB1
MCOBCDSUB CLRF TEMP3 ;借位清零
COMF TEMP3,F ;取反
MOVF SADR,W
MOVWF TEMP2 ;保存结果首地址
NEXT9 MOVF DADR,W
MOVWF FSR
MOVF INDF,W
MOVWF TEMP1 ;暂存减数
MOVF SADR,W
MOVWF FSR
MOVF TEMP1,W
SUBWF INDF,F
RLF TEMP3,F ;保存借位
BTFSC TEMP3,1 ;将低字节送来
GOTO NOCY2 ;的借位减去
DECF INDF,F ;并判断
INCF INDF,W
ANDLW 0FH
BTFSC STATUS,Z
BCF STATUS,DC ;减借位是否产生了半借位
INCF INDF,W ;减的过程中
BTFSS STATUS,Z ;是否又产生了借位
GOTO NOCY2
BCF STATUS,DC ;有借位,置半借位
BCF TEMP3,0 ;置借位
NOCY2 MOVLW 6
BTFSC STATUS,DC ;判断是否有半借位
ADDWF INDF,F ;没有,LSD不变
SUBWF INDF,F
MOVLW 60H
BTFSS TEMP3,0 ;判断结果的MSD是否大于9
SUBWF INDF,F ;减60H
INCF DADR,F
INCF SADR,F
DECFSZ CNT,F
GOTO NEXT9
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 + -