?? mbtbcd.asm
字號(hào):
;********************MBTBCD********************
;本程序?qū)崿F(xiàn)多字節(jié)二進(jìn)制數(shù)轉(zhuǎn)化為壓縮BCD碼(小于10字節(jié))。
;入口參數(shù):原二進(jìn)制數(shù)地址在SADR中,字節(jié)數(shù)在CNT中,CNT+2個(gè)字節(jié)的結(jié)果在DADR中。
;出口參數(shù):結(jié)果在指定RAM單元中,地址在SADR中,字節(jié)數(shù)在CNT中。
;占用資源:W,STATUS,020H,021H,023H,027H,028H,029H,02AH,兩重堆棧。
;說 明: 1.原數(shù)據(jù)將被沖掉.
; 2.加載本文件的同時(shí)也加載了另外一個(gè)文件"MSHL.ASM",
; 故用戶在使用這個(gè)子程序時(shí)可直接調(diào)用,不必重新加載.
IFNDEF MBTBCD1
#DEFINE MBTBCD1
MBTBCD MOVF CNT,W
MOVWF TEMP2
MOVWF TEMP4
MOVF DADR,W
MOVWF FSR
INCF TEMP4,F
INCF TEMP4,F ;得到結(jié)果字節(jié)數(shù)
LOOP31 CLRF INDF ;結(jié)果清0
INCF FSR,F
DECFSZ TEMP4,F
GOTO LOOP31
MOVF SADR,W
MOVWF TEMP3 ;保護(hù)SADR
BCF STATUS,C
RLF TEMP2,F
RLF TEMP2,F
RLF TEMP2,F ;得到循環(huán)次數(shù)
LOOPC2 MOVF TEMP3,W
MOVWF SADR
CALL MSHL ;原二進(jìn)制數(shù)左移,移出位在C中
MOVF DADR,W
MOVWF SADR
INCF CNT,F
INCF CNT,F
CALL MSHL ;結(jié)果左移
DECF CNT,F
DECF CNT,F ;恢復(fù)原字節(jié)數(shù)
DECFSZ TEMP2,F
GOTO ADJDEC2
INCF CNT,F
INCF CNT,F
RETURN ;整個(gè)子程序結(jié)束
ADJDEC2 MOVF DADR,W
MOVWF FSR
INCF CNT,W
MOVWF TEMP4
INCF TEMP4,F ;結(jié)果字節(jié)數(shù)
LOOP32 CALL ADJBCD2 ;調(diào)整結(jié)果
INCF FSR,F
DECFSZ TEMP4,F
GOTO LOOP32
GOTO LOOPC2
;********************調(diào)整BCD********************
ADJBCD2 MOVLW 03H
ADDWF INDF,W ;低四位加3
MOVWF TEMP1 ;暫存
BTFSC TEMP1,3 ;結(jié)果大于7,
MOVWF INDF ;則存起來
MOVLW 30H
ADDWF INDF,W ;高四位加3
MOVWF TEMP1
BTFSC TEMP1,7 ;結(jié)果大于7,
MOVWF INDF ;則存起來
RETURN
INCLUDE "MSHL.ASM"
ENDIF
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -