EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MCS-51单片机实用子程序库2
% H4 F' [7 N" e1 k
- I* Z5 V4 P/ q+ s( F- P0 {2 S7 v$ @5 u9 [0 a# o
(29) 标号:FDD2 功能:对分查找(ROM)双字节无符号增序数据表格 入口条件:查找内容在R4、R5中,表格首址在DPTR中,数据个数在R7中。 出口信息:OV=0 时顺序号在累加器A中,址在DPTR中;OV=1 时未找到。 影响资源:PSW、A、B、R1~R7、DPTR 堆栈需求: 2字节 FDD2: MOV R2,#0 ;区间低端指针初始化(指向第一个数据) MOV A,R7 DEC A MOV R3,A ;区间高端指针初始化,指向最后一个数据 MOV R6,DPH ;保存表格首址 MOV R7,DPL FD81: CLR C ;判断区间大小 MOV A,R3 SUBB A,R2 JC FD89 ;区间消失,查找失败 RRC A ;取区间大小的一半 ADD A,R2 ;加上区间的低端 MOV R1,A ;得到区间的中心 MOV DPH,R6 CLR C ;计算区间中心的地址 RLC A JNC FD82 INC DPH FD82: ADD A,R7 MOV DPL,A JNC FD83 INC DPH FD83: CLR A ;读取该点的内容的高字节 MOVC A,@A+DPTR MOV B,R4 ;与待查找内容的高字节比较 CJNE A,B,FD84;不相同 MOV A,#1 ;读取该点的内容的低字节 MOVC A,@A+DPTR MOV B,R5 CJNE A,B,FD84;与待查找内容的低字节比较 MOV A,R1 ;取顺序号 CLR OV ;查找成功 RET FD84: JC FD86 ;该点的内容比待查找的内容大否? MOV A,R1 ;偏大,取该点位置 DEC A ;减一 MOV R3,A ;作为新的区间高端 SJMP FD81 ;继续查找 FD86: MOV A,R1 ;偏小,取该点位置 INC A ;加一 MOV R2,A ;作为新的区间低端 SJMP FD81 ;继续查找 FD89: MOV DPH,R6 ;相同,恢复首址 MOV DPL,R7 SETB OV ;查找失败 RET 2 h0 H6 }9 m/ N8 @& e! w
|