📄 mbtbcd.asm
字号:
;********************MBTBCD********************
;本程序实现多字节二进制数转化为压缩BCD码(小于10字节)。
;入口参数:原二进制数地址在SADR中,字节数在CNT中,CNT+2个字节的结果在DADR中。
;出口参数:结果在指定RAM单元中,地址在SADR中,字节数在CNT中。
;占用资源:W,STATUS,020H,021H,023H,027H,028H,029H,02AH,两重堆栈。
;说 明: 1.原数据将被冲掉.
; 2.加载本文件的同时也加载了另外一个文件"MSHL.ASM",
; 故用户在使用这个子程序时可直接调用,不必重新加载.
IFNDEF MBTBCD1
#DEFINE MBTBCD1
MBTBCD MOVF CNT,W
MOVWF TEMP2
MOVWF TEMP4
MOVF DADR,W
MOVWF FSR
INCF TEMP4,F
INCF TEMP4,F ;得到结果字节数
LOOP31 CLRF INDF ;结果清0
INCF FSR,F
DECFSZ TEMP4,F
GOTO LOOP31
MOVF SADR,W
MOVWF TEMP3 ;保护SADR
BCF STATUS,C
RLF TEMP2,F
RLF TEMP2,F
RLF TEMP2,F ;得到循环次数
LOOPC2 MOVF TEMP3,W
MOVWF SADR
CALL MSHL ;原二进制数左移,移出位在C中
MOVF DADR,W
MOVWF SADR
INCF CNT,F
INCF CNT,F
CALL MSHL ;结果左移
DECF CNT,F
DECF CNT,F ;恢复原字节数
DECFSZ TEMP2,F
GOTO ADJDEC2
INCF CNT,F
INCF CNT,F
RETURN ;整个子程序结束
ADJDEC2 MOVF DADR,W
MOVWF FSR
INCF CNT,W
MOVWF TEMP4
INCF TEMP4,F ;结果字节数
LOOP32 CALL ADJBCD2 ;调整结果
INCF FSR,F
DECFSZ TEMP4,F
GOTO LOOP32
GOTO LOOPC2
;********************调整BCD********************
ADJBCD2 MOVLW 03H
ADDWF INDF,W ;低四位加3
MOVWF TEMP1 ;暂存
BTFSC TEMP1,3 ;结果大于7,
MOVWF INDF ;则存起来
MOVLW 30H
ADDWF INDF,W ;高四位加3
MOVWF TEMP1
BTFSC TEMP1,7 ;结果大于7,
MOVWF INDF ;则存起来
RETURN
INCLUDE "MSHL.ASM"
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -