📄 dfskwinc.asm
字号:
;********************DFSKWINC********************
;本程序实现在单字节无符号增序数据块中对分查找特定值(即关键字)。
;入口参数:关键字在SOU中,数据块首址在SADR中,数据个数在W中。
;出口参数:如果找到,则其地址在SADR中,且STATUS:C为0,如果没找到,则STATUS:C为1。
;占用资源:W,STATUS,FSR,020H,022H,024H,一重堆栈。
;说 明: 1.如果有多个数据等于特定值,则只能给出其中一个的地址.
; 2.本程序的执行对原数据块并无影响.
IFNDEF DFSKWINC1
#DEFINE DFSKWINC1
DFSKWINC ADDWF SADR,W
ADDLW 0FFH
MOVWF DADR ;得到末地址
MOVWF FSR
MOVF INDF,W
SUBWF SOU,W
BTFSC STATUS,Z ;最后一个是否为所找的数
GOTO DONE8 ;找到
LOOP60 MOVF DADR,W
ADDWF SADR,W ;SADR+DADR
MOVWF FSR
RRF FSR,F ;FSR=(SADR+DADR)/2
MOVF INDF,W
SUBWF SOU,W
BTFSC STATUS,Z
GOTO DONE8 ;找到
MOVF FSR,W
SUBWF SADR,W
BTFSC STATUS,Z
GOTO NMATCH
MOVF INDF,W
SUBWF SOU,W
MOVF FSR,W
BTFSC STATUS,C
MOVWF SADR
BTFSS STATUS,C
MOVWF DADR ;缩小查找范围
GOTO LOOP60
NMATCH BSF STATUS,C
RETLW 1
DONE8 MOVF FSR,W
MOVWF SADR
BCF STATUS,C
RETLW 0
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -