?? mcobcdadd.asm
字號:
;********************MCOBCDADD********************
;本程序?qū)崿F(xiàn)多字節(jié)壓縮BCD碼加法。
;入口參數(shù): 被加數(shù)首地址在SADR中,加數(shù)首地址在DADR中,字節(jié)數(shù)在CNT中。
;出口參數(shù): 結(jié)果首地址在SADR中,字節(jié)數(shù)在CNT中,進位在STATUS:C中。
;占用資源: W,STATUS,FSR,020H,022H,023H,028H,029H,02AH,一重堆棧。
;說 明: 被加數(shù)將被沖掉.
IFNDEF MCOBCDADD1
#DEFINE MCOBCDADD1
MCOBCDADD CLRF TEMP3 ;進位位清零
MOVF SADR,W
MOVWF TEMP2 ;保存結(jié)果首地址
NEXT3 MOVF DADR,W
MOVWF FSR
MOVF INDF,W
MOVWF TEMP1 ;暫存加數(shù)
MOVF SADR,W
MOVWF FSR
MOVF TEMP1,W
ADDWF INDF,F
RLF TEMP3,F ;保存進位
BTFSS TEMP3,1 ;將低字
GOTO NOCY1 ;節(jié)送來的
INCF INDF,F ;進位加上
BTFSC STATUS,Z ;并判斷
BSF TEMP3,0 ;加的過程中
MOVLW 0FH ;是否又產(chǎn)生
ANDWF INDF,W ;了進位
BTFSC STATUS,Z
GOTO ADJUST1
NOCY1 BTFSC STATUS,DC ;DC = 0 ?
GOTO ADJUST1 ;調(diào)整LSD
MOVLW 6
ADDWF INDF,F ;通過加6檢測是否 LSD > 9
BTFSC STATUS,C
BSF TEMP3,0
BTFSS STATUS,DC ;檢查半進位
SUBWF INDF,F ; LSD < 9 ,恢復(fù)原值
GOTO OVER4
ADJUST1 MOVLW 6
ADDWF INDF,F
OVER4 MOVLW 60H ;MSD加6
ADDWF INDF,F
BTFSC STATUS,C
GOTO OVER5
BTFSS TEMP3,0
SUBWF INDF,F
GOTO DONE2
OVER5 BSF TEMP3,0
DONE2 INCF DADR,F
INCF SADR,F
DECFSZ CNT,F
GOTO NEXT3
MOVF TEMP2,W
SUBWF SADR,W
MOVWF CNT ;恢復(fù)字節(jié)數(shù)
SUBWF SADR,F ;恢復(fù)結(jié)果首址
RRF TEMP3,F ;獲得進位位
RETURN
ENDIF
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -