MCS51单片机的检索查找程序
;单字节顺序查找程序
;入口 :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
;浮点数顺序查找程序
;入口 :R0,R1,R2,R3,R4,R6,R7
;占用资源:B,NCNT,FCMP
;堆栈需求:2字节
;出口 :R0,R1,A
FINDF :MOV DPL,R1
MOV DPH,R0
MOV A,R7
MOV B,A
MOV NCNT,R6
JZ FINDF1
INC NCNT
FINDF1 :MOVX A,@DPTR
INC DPTR
MOV R5,A
MOVX A,@DPTR
INC DPTR
MOV R6,A
MOVX A,@DPTR
INC DPTR
MOV R7,A
LCALL FCMP
JNZ FINDF2
MOV A,DPL
CLR C
SUBB A,#03H
MOV R1,A
MOV A,DPH
SUBB A,#00H
MOV R0,A
CLR A
RET
FINDF2 :DJNZ B,FINDF1
DJNZ NCNT,FINDF1
MOV A,#0FFH
RET
;浮点数最值查找程序
;入口 :ADDPH,ADDPL,R6,R7
;占用资源:ACC,B,NCNT,ITEMOV,EBMOV,MOVB,MOVR1,FCMP
;堆栈需求:5字节
;出口 :[R0](最大值),[R1](最小值),R2,R3,R4,R5
FMAMIF :MOV A,ADDPL
MOV R3,A
MOV R5,A
MOV DPL,A
MOV A,ADDPH
MOV R2,A
MOV R4,A
MOV DPH,A
MOV B,R7
MOV R7,#03H
LCALL ITEMOV
MOV R7,#03H
LCALL IBMOV
MOV A,B
JZ FMMF1
INC NCNT
FMMF1 :PUSH B
MOVX A,@DPTR
INC DPTR
MOV R2,A
MOVX A,@DPTR
INC DPTR
MOV R3,A
MOVX A,@DPTR
INC DPTR
MOV R4,A
LCALL MOVR1
LCALL FCMP
JNC FMMF2
MOV A,R0
XCH A,R1
MOV R0,A
LCALL MOVB
MOV R5,DPL
MOV R4,DPH
MOV A,R0
XCH A,R1
MOV R0,A
SJMP FMMF3
FMMF2 :MOV A,R0
XCH A,R1
MOV R0,A
LCALL MOVR1
LCALL FCMP
MOV A,R0
XCH A,R1
MOV R0,A
JZ FMMF3
JC FMMF3
LCALL MOVB
MOV R3,DPL
MOV R2,DPH
FMMF3 :POP B
DJNZ B,FMMF1
DJNZ NCNT,FMMF1
RET
;单字节折半查找程序
;入口 :A,R0,R1,R6,R7
;占用资源:B,R2
;堆栈需求:2字节
;出口 :R0,R1
SEARCHB :MOV B,A
MOV A,R1
ADD A,R7
MOV R7,A
MOV A,R0
ADDC A,R6
MOV R6,A
MOV A,R7
SUBB A,#01H
MOV R7,A
JNC SECH1
DEC R6
SECH1 :MOV A,R7
CLR C
SUBB A,R1
MOV A,R6
SUBB A,R0
JNC SECH2
MOV A,#0FFH
RET
SECH2 :MOV A,R7
ADD A,R1
MOV R2,A
MOV A,R6
ADDC A,R0
RRC A
MOV DPH,A
MOV A,R2
RRC A
MOV DPL,A
MOVX A,@DPTR
CLR C
SUBB A,B
JNC SECH3
INC DPTR
MOV R0,DPH
MOV R1,DPL
SJMP SECH1
SECH3 :JZ SECH5
MOV A,DPL
SUBB A,#01H
MOV R7,A
JNC SECH4
MOV R6,DPH
DEC R6
SECH4 :SJMP SECH1
SECH5 :MOV R0,DPH
MOV R1,DPL
CLR A
RET
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)