一、实验目的和要求
理解无序表的概念和数据结构,熟悉并掌握单片机中数据查找的基本原理和 操作方法,以及使用 MOVC A, @A+DPTR 指令进行数据查找的技术。
二、实验内容
(一)实验内容
第 4 部分 PPT-P26 查找关键字程序,这个程序原题为:从 50 个字节的无序表中查找一个关键字“××H”。若找到,将关键字所在地址存入 R2R3;若找不到,将 0000H 存入 R2R3。 现在要求改为 16 个数据的无序表,主程序从 0030H 开始执行,表的首地址放在 0100H。要求采用 MOVC A, @A+DPTR 指令。
(二)实验原理图
自己画的🤗
(三)实验步骤
编写程序;使用单步、断点方式调试程序,在无序表中查找关键字。理解其中的原理,尝试查找表中存在或不存在的关键字。
(四)程序清单
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV 30H,#10H ;查找关键字 10H
MOV R1,#16
MOV A,#0
MOV DPTR,#TAB4
LOOP: PUSH ACC
MOVC A,@A+DPTR
CJNE A,30H,LOOP1
MOV R2,DPH
MOV R3,DPL
POP ACC
DONE: RET
LOOP1: POP ACC
INC DPTR
DJNZ R1,LOOP
MOV R2,#00H
MOV R3,#00H
AJMP DONE
ORG 0100H
TAB4:DB 00H,30H,45H,23H,44H,74H,0F5H,10H,3EH,0A3H,13H,56H,0C2H,0B3H,77H,99H
三. 实验结果及分析(包括调试过程、运行截图、结果分析说明)
首先在我们设定的 TAB4 表中查找 10H 这个关键字,由程序可知,R2R3 中的值应为0107H,由下图可知程序正确。 然后我们又查找表中不存在的关键值0FEH,这时正确结果应为 R2R3 中 0000H,P1、P2、P3 中的值在全速运行停止后的结果应为0FFH,由下图可知我们的程序完全正确。
查找到的情况如下:
查找不到的情况如下:
四、实验总结
在这个实验中,我们编写了一段汇编代码来查找指定的关键字。使用了循环和条件判断来遍历数据表,并逐个比较数据与关键字是否匹配。当找到匹配的关键字时,我们记录了该关键字在数据表中的位置,然后通过跳转指令退出循环。若数据表中没有匹配的关键字,我们也有相应的处理逻辑。
编写这段代码时,我们需要考虑如何有效地利用寄存器和指针,以及合理使用循环和条件判断来实现目标。此题是根据作业题而来,在已有的程序上进行改编,所以较为简单,但对于细节的把握很是严谨,于我来说还需深思考虑。