EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MCS-51单片机实用子程序库2
: A3 D) J0 z) J: v6 ~& O; ^- W) t
1 a: h0 T; V# h! \1 o8 W- b
(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 K1 l* x* k2 i |