📄 seqsrch.asm
字号:
;顺序查找算法。
DATS EQU 30H ;线性表首址。
N EQU 17H ;数据元素个数。
OBJ DATA 2FH ;查找对象存放单元。
FIND BIT 00H ;查找成功标志。
ORG 0000H
LJMP TEST
ORG 100H
TEST: MOV DPTR,#LIST;将线性表拷贝到片内RAM中。
MOV R0,#DATS
MOV R2,#N
COPY: CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,COPY
MOV OBJ,#31H;查找对象为31H。
LCALL SEQSRCH ;调用顺序查找算法,查找成功。
MOV OBJ,#0CFH;查找对象为0CFH。
LCALL SEQSRCH ;调用顺序查找算法,查找失败。
STOP: LJMP STOP
LIST: DB 35H,90H,77H,3EH ;测试用线性表
DB 0A4H,6FH,0C2H,04H
DB 31H,74H,29H,15H
DB 6CH,28H,0CEH,44H
DB 8DH,0D3H,55H,62H
DB 07H,2EH,63H
SEQSRCH:MOV R0,#DATS;指向线性表起始端。
MOV R2,#N ;设置最多比较次数。
LOOP: MOV A,@R0 ;读取线性表中的一个元素。
XRL A,OBJ ;是要查找的对象吗?
JZ OK ;是。
INC R0 ;不是,准备比较下一个数据元素。
DJNZ R2,LOOP ;全部元素均比较完了吗?
CLR FIND ;找不到指定的对象,查找失败,清除成功标志。
RET ;返回。
OK: SETB FIND ;找到了指定的对象,查找成功,设立成功标志。
MOV A,R0 ;将指定对象在线性表中的位置存放在累加器中。
RET ;返回。
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -