fdd1.asm
来自「通过调试的有用的单片机控制程序」· 汇编 代码 · 共 33 行
ASM
33 行
;入口条件:待查找的内容在累加器A中,表格首址在DPTR中,字节数在R7中。
;出口信息:OV=0 时,顺序号在累加器A中 ;OV=1 时,未找到。
;影响资源:PSW、A、B、R2、R3、R4 堆栈需求: 2字节
FDD1: MOV B,A ;保存待查找的内容
MOV R2,#0 ;区间低端指针初始化(指向第一个数据)
MOV A,R7
DEC A
MOV R3,A ;区间高端指针初始化(指向最后一个数据)
FD61: CLR C ;判断区间大小
MOV A,R3
SUBB A,R2
JC FD69 ;区间消失,查找失败
RRC A ;取区间大小的一半
ADD A,R2 ;加上区间的低端
MOV R4,A ;得到区间的中心
MOVC A,@A+DPTR ;读取该点的内容
CJNE A,B,FD65 ;与待查找的内容比较
CLR OV ;相同,查找成功
MOV A,R4 ;取顺序号
RET
FD65: JC FD68 ;该点的内容比待查找的内容大否?
MOV A,R4 ;偏大,取该点位置
DEC A ;减一
MOV R3,A ;作为新的区间高端
SJMP FD61 ;继续查找
FD68: MOV A,R4 ;偏小,取该点位置
INC A ;加一
MOV R2,A ;作为新的区间低端
SJMP FD61 ;继续查找
FD69: SETB OV ;查找失败
RET
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?