?? msadd.asm
字號:
;********************MSADD********************
;本程序?qū)崿F(xiàn)多字節(jié)有符號數(shù)加法。
;入口參數(shù):被加數(shù)首地址在SADR中,加數(shù)首地址在DADR中,字節(jié)數(shù)在CNT中。
;出口參數(shù):結(jié)果首地址在SADR中,字節(jié)數(shù)在CNT中,若溢出則STATUS:C置1。
;占用資源:W,FSR,020H,021H,022H,023H,028H,029H,02AH,一重堆棧。
;說明: 程序執(zhí)行后,被加數(shù)被沖掉。
IFNDEF MSADD1
#DEFINE MSADD1
MSADD MOVF CNT,W
ADDWF SADR,W
MOVWF FSR
DECF FSR,F
MOVF INDF,W
MOVWF TEMP3
MOVF CNT,W
ADDWF DADR,W
MOVWF FSR
DECF FSR,F
MOVF INDF,W
XORWF TEMP3,F ;取得兩加數(shù)最高位的異或
MOVF SADR,W
MOVWF SADRH ;保護(hù)結(jié)果首地址
CLRF TEMP2 ;進(jìn)位清零
NEXT5 MOVF DADR,W
MOVWF FSR
MOVF INDF,W ;取出加數(shù)
MOVWF TEMP1 ;暫存
MOVF SADR,W
MOVWF FSR
MOVF TEMP1,W
ADDWF INDF,F
RLF TEMP2,F ;暫存當(dāng)前進(jìn)位,并使上一次進(jìn)位前移
BCF STATUS,C ;清除進(jìn)位
MOVLW 1
BTFSC TEMP2,1
ADDWF INDF,F
BTFSC STATUS,C ;加進(jìn)位位的過程中是否產(chǎn)生了進(jìn)位
BSF TEMP2,0
INCF DADR,F
INCF SADR,F
DECFSZ CNT,F
GOTO NEXT5
MOVF INDF,W
XORWF TEMP3,W
RRF TEMP2,F
RRF TEMP2,F ;將最高位的進(jìn)位放到TEMP2.7
XORWF TEMP2,F
MOVF SADRH,W
MOVWF SADR ;結(jié)果首地址
DECF SADR,W
SUBWF FSR,W
MOVWF CNT ;恢復(fù)字節(jié)數(shù)
RLF TEMP2,W ;溢出標(biāo)志位放到C中
RETURN
ENDIF
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -