📄 mdcbtbcd.asm
字号:
;********************MDCBTBCD********************
;本程序实现多字节二进制小数转化为BCD码小数。
;入口参数:原二进制数地址在SADR中,字节数在CNT中,结果存放地址在DADR中,结果字
; 节数在W中。
;出口参数:结果在指定单元中,地址在SADR中,字节数在CNT中。
;占用资源:W,FSR,STATUS,020H,022H,023H,027H~02BH,两重堆栈。
;说 明: 程序执行后,原数据丢失。
IFNDEF MDCBTBCD1
#DEFINE MDCBTBCD1
MDCBTBCD MOVWF TEMP3 ;作为循环计数器
MOVWF RLTH ;存放结果字节数
ADDWF DADR,F
DECF DADR,F ;得到结果最高位地址
NEXT15 CALL MUL10_2 ;乘10
SWAPF TEMP4,W ;TEMP4为转化结果
MOVWF TEMP1 ;暂存到TEMP1
CALL MUL10_2
MOVF DADR,W
MOVWF FSR
MOVF TEMP4,W
IORWF TEMP1,W
MOVWF INDF
DECF DADR,F
DECFSZ TEMP3,F
GOTO NEXT15
INCF DADR,W
MOVWF SADR
MOVF RLTH,W
MOVWF CNT ;恢复结果字节数
RETURN
;******乘10子程序******
MUL10_2 MOVF CNT,W
MOVWF TEMP2
MOVF SADR,W
MOVWF FSR
CLRF TEMP4
LOOP41 RLF TEMP4,F ;TEMP4作为移出位缓存区
RLF INDF,F
RLF TEMP4,F
MOVF INDF,W ;结果乘以2暂存到W
RLF INDF,F
RLF TEMP4,F
RLF INDF,F
RLF TEMP4,F ;乘以8
BTFSS STATUS,C ;上次有无进位
GOTO NOC9
INCF INDF,F
BTFSC STATUS,Z
BSF TEMP4,7 ;加1又产生进位
BTFSS STATUS,Z
NOC9 BCF TEMP4,7
ADDWF INDF,F
RLF TEMP4,F
BTFSC STATUS,C
BSF TEMP4,0 ;保存进位
SWAPF TEMP4,F ;有用位移到顶端
INCF FSR,F
DECFSZ TEMP2,F
GOTO LOOP41 ;完成乘10的操作
MOVLW 0F0H
ANDWF TEMP4,F
SWAPF TEMP4,F
BCF STATUS,C
RRF TEMP4,F
BTFSC TEMP4,2
INCF TEMP4,F
BTFSC STATUS,C
INCF TEMP4,F ;得到该位BCD码
RETURN
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -