;单字节顺序查找程序
;入口 :R0,R1,A,R7
;占用资源:B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDB1 :MOV B,A
MOV DPL,R1
MOV DPH,R0
FINDB11 :MOVX A,@DPTR
CJNE A,B,FINDB12
MOV R1,DPL
MOV R0,DPH
CLR A
RET
FINDB12 :INC DPTR
DJNZ R7,FINDB11
MOV A,#0FFH
RET
;单字节顺序查找程序
;入口 :R0,R1,A,R6,R7
;占用资源:B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDB2 :MOV B,A
MOV DPL,R1
MOV DPH,R0
MOV A,R7
JZ FINDB21
INC R6
FINDB21 :MOVX A,@DPTR
CJNE A,B,FINDB22
MOV R1,DPL
MOV R0,DPH
CLR A
RET
FINDB22 :INC DPTR
DJNZ R7,FINDB21
DJNZ R6,FINDB21
MOV A,#0FFH
RET
;双字节字符串顺序查找程序
;入口 :R0,R1,R3,R4,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDS1 :MOV DPL,R1
MOV DPH,R0
FINDS11 :MOVX A,@DPTR
INC DPTR
CLR C
SUBB A,R4
JNZ FINDS12
MOVX A,@DPTR
SUBB A,R3
JNZ FINDS12
MOV A,DPL
CLR C
SUBB A,#01H
MOV R1,A
MOV A,DPH
SUBB A,#00H
MOV R0,A
CLR A
RET
FINDS12 :DJNZ R7,FINDS11
MOV A,#0FFH
RET
;双字节字符串顺序查找程序
;入口 :R0,R1,R3,R4,R6,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDS2 :MOV DPL,R1
MOV DPH,R0
MOV A,R7
JZ FINDS21
INC R6
FINDS21 :MOVX A,@DPTR
INC DPTR
CLR C
SUBB A,R4
JNZ FINDS22
MOVX A,@DPTR
SUBB A,R3
JNZ FINDS22
MOV A,DPL
CLR C
SUBB A,#01H
MOV R1,A
MOV A,DPH
SUBB A,#00H
MOV R0,A
CLR A
RET
FINDS22 :DJNZ R7,FINDS21
DJNZ R6,FINDS21
MOV A,#0FFH
RET
;N字节字符串顺序查找程序
;入口 :ADDPH,ADDPL,R0,R6,R7,N
;占用资源:ACC,B,R2,NCNT
;堆栈需求:2字节
;出口 :ADDPH,ADDPL,A
FINDN :MOV A,R0
MOV R2,A
MOV A,ADDPL
MOV DPL,A
MOV A,ADDPH
MOV DPH,A
MOV A,R7
JZ FINDN1
INC R6
FINDN1 :MOV A,R2
MOV R0,A
MOV A,N
MOV NCNT,A
FINDN2 :MOVX A,@DPTR
CLR C
SUBB A,@R0
JNZ FINDN3
INC DPTR
INC R0
DJNZ NCNT,FINDN2
MOV A,DPL
CLR C
SUBB A,N
MOV ADDPL,A
MOV A,DPH
SUBB A,#00H
MOV ADDPH,A
CLR A
RET
FINDN3 :CLR C
MOV A,R0
SUBB A,R2
JNZ FINDN4
INC DPTR
FINDN4 :DJNZ R7,FINDN1
DJNZ R6,FINDN1
MOV A,#0FFH
RET
;单字节最值查找程序
;入口 :R0,R1,R6,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0(最大值),R1(最小值),R2,R3,R4,R5
FMAMIB :MOV DPL,R1
MOV DPH,R0
MOVX A,@DPTR
MOV R0,A
MOV R1,A
MOV A,DPL
MOV R3,A
MOV R5,A
MOV A,DPH
MOV R2,A
MOV R4,A
MOV A,R7
JZ FMMB1
INC R6
FMMB1 :MOVX A,@DPTR
MOV B,A
SETB C
SUBB A,R0
JC FMMB2
MOV R0,B
MOV R3,DPL
MOV R2,DPH
SJMP FMMB3
FMMB2 :MOV A,B
CLR C
SUBB A,R1
JNC FMMB3
MOV R1,B
MOV R5,DPL
MOV R4,DPH
FMMB3 :INC DPTR
DJNZ R7,FMMB1
DJNZ R6,FMMB1
RET