📄 dsinc.asm
字号:
;********************DSINC********************
;本程序实现对双字节有符号数据块进行增序排列。
;入口参数:数据块首址在SADR中,数据个数在W中。
;出口参数:排好序的数据仍在原数据块中。
;占用资源:W,STATUS,FSR,020H,023H,028H,029H,02AH,02BH,一重堆栈。
IFNDEF DSINC1
#DEFINE DSINC1
DSINC MOVWF TEMP3 ;TEMP3暂存内循环计数值
DECF TEMP3,F ;数据个数减1是比较次数
LOOP69 MOVF TEMP3,W
MOVWF CNT ;循环计数器减1
BCF TEMP1,0 ;TEMP1:0作为交换标志位
MOVF SADR,W
MOVWF FSR
INCF FSR,F
LOOP68 MOVF INDF,W
INCF FSR,F
INCF FSR,F
XORWF INDF,W
MOVWF TEMP4 ;TEMP4:7存放符号异同标志
XORWF INDF,W ;恢复W
BTFSC TEMP4,7
GOTO DIFF1
SUBWF INDF,W
BTFSC STATUS,C
GOTO NEXT34
SUBWF INDF,W
SWITCH1 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
SWLOW1 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 ;置交换标志
NEXT35 DECFSZ CNT,F
GOTO LOOP68
BTFSS TEMP1,0
RETLW 0
DECFSZ TEMP3,F
GOTO LOOP69
RETLW 0
NEXT34 BTFSS STATUS,Z ;判断高位是否相等
GOTO NEXT35
MOVLW 3
SUBWF FSR,F
MOVF INDF,W
INCF FSR,F
INCF FSR,F
SUBWF INDF,W ;高为相等的情况下判断低位是否相等
INCF FSR,F
BTFSS STATUS,C
GOTO SWLOW1 ;交换低位
GOTO NEXT35 ;完成一次内循环
DIFF1 BTFSC INDF,7
GOTO SWITCH1
GOTO NEXT35
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -