?? duinc.asm
字號:
;********************DUINC********************
;本程序實現對雙字節無符號數據塊進行增序排列。
;入口參數:數據塊首址在SADR中,數據個數在W中。
;出口參數:排好序的數據仍在原數據塊中。
;占用資源:W,STATUS,FSR,020H,028H,029H,02AH,02BH,一重堆棧。
IFNDEF DUINC1
#DEFINE DUINC1
DUINC MOVWF TEMP3 ;TEMP3暫存內循環計數值
DECF TEMP3,F ;字節數減1是比較次數
LOOP65 MOVF TEMP3,W
MOVWF TEMP4 ;循環計數器減1
BCF TEMP1,0 ;TEMP1:0作為交換標志位
MOVF SADR,W
MOVWF FSR
INCF FSR,F
LOOP64 MOVF INDF,W
INCF FSR,F
INCF FSR,F
SUBWF INDF,W
BTFSC STATUS,C
GOTO NEXT31
SUBWF INDF,W
MOVWF TEMP2 ;TEMP2暫存將要交換的數
MOVF INDF,W
DECF FSR,F
DECF FSR,F
MOVWF INDF
MOVF TEMP2,W
INCF FSR,F
INCF FSR,F
MOVWF INDF
SWLOW MOVLW 3
SUBWF FSR,F
MOVF INDF,W
MOVWF TEMP2
INCF FSR,F
INCF FSR,F
MOVF INDF,W
DECF FSR,F
DECF FSR,F
MOVWF INDF
INCF FSR,F
INCF FSR,F
MOVF TEMP2,W
MOVWF INDF ;完成交換
INCF FSR,F
BSF TEMP1,0 ;置交換標志
NEXT32 DECFSZ TEMP4,F
GOTO LOOP64
BTFSS TEMP1,0
RETLW 0
DECFSZ TEMP3,F
GOTO LOOP65
RETLW 0
NEXT31 BTFSS STATUS,Z ;判斷高位是否相等
GOTO NEXT32
MOVLW 3
SUBWF FSR,F
MOVF INDF,W
INCF FSR,F
INCF FSR,F
SUBWF INDF,W ;高為相等的情況下判斷低位是否相等
INCF FSR,F
BTFSS STATUS,C
GOTO SWLOW ;交換低位
GOTO NEXT32 ;完成一次內循環
ENDIF
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -