📄 mcobcdml2.asm
字号:
;********************MCOBCDML2********************
;本程序实现多字节压缩BCD码乘2。
;入口参数: 原数据首地址在SADR中,字节数在CNT中。
;出口参数: 结果首地址在SADR中,字节数在CNT中,进位在STATUS:C中。
;占用资源: W,STATUS,FSR,020H,023H,028H,一重堆栈。
;说 明: 原操作数将被冲掉.
IFNDEF MCOBCDML21
#DEFINE MCOBCDML21
MCOBCDML2 CLRF TEMP1 ;进位位清零
MOVF SADR,W
MOVWF FSR
NEXT17 RRF TEMP1,F
RLF INDF,F ;乘2
RLF TEMP1,F ;保存进位
BTFSC INDF,4 ;半进位 = 0 ?
GOTO ADJUST2 ;调整LSD
MOVLW 6
ADDWF INDF,F ;通过加6检测是否 LSD > 9
BTFSS INDF,4 ;检查半进位
SUBWF INDF,F ; LSD < 9 ,恢复原值
GOTO OVER8
ADJUST2 MOVLW 6
ADDWF INDF,F
OVER8 MOVLW 60 ;MSD加6
ADDWF INDF,F
BTFSC STATUS,C
GOTO OVER9
BTFSS TEMP1,0
SUBWF INDF,F
GOTO DONE5
OVER9 BSF TEMP1,0
DONE5 INCF FSR,F
DECFSZ CNT,F
GOTO NEXT17
MOVF SADR,W
SUBWF FSR,W
MOVWF CNT ;字节数
RRF TEMP1,F ;获得进位位
RETURN
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -