c51汇编语言中查表是怎么实現的,查表指令(2条)举例——mcs51单片机汇编语言...

本文介绍了查表指令在程序存储器中寻找数据的原理,重点讲解了MOVC A,@A+DPTR和MOVC A,@A+PC指令的使用,以及变址寻址方式的工作机制。通过实例演示了如何利用查表确定特定数值的平方,并解释了标号在程序中的实际意义和使用标号的优点。
摘要由CSDN通过智能技术生成

查表指令(2条)

这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:

MOVC  A,@A+DPTR   ;((A))+(DPTR)→(A) 表格地址单元中的内容送到累加器A中

MOVC  A,@A+PC     ;((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的内容送到累加器A中

本指令是将ROM的数据送入A中,本指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格。

说明:

1、此条指令引出了一个特殊的寻址方式,即变址寻址,在上节课时我们已进行过讲解,本指令是要在ROM的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点DPTR中有一个数,A中有一个数,执行指令时,将A和DPTR中的数加起来,就成为要查找单元的地址。

2、查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同。

例:有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0-5)

MOV  DPTR,#TABLE

MOV  A,R0

MOVC A,@A+DPTR

TABLE:DB   0,1,4,9,16,25

设R0中的值为2,送入A中,而DPTR中的值则为TABLE,则最终确定的ROM单元的地址就是TABLE+2,也就是到这个单元中去取数,取到的是4,显然它正是2的平方。其它数据也可以类推

标号的真实含义:从这个地方也可以看到另一个问题,我们使用了标号来替代具体的单元地址。事实上,标号的真实含义就是地址数值。在这里它代表了0,1,4,9,16,25这几个数据在ROM中存放的起点位置。我们经常看到的指令,如LCALL DELAY指令中,DELAY则代表了以DELAY为标号的那段程序在ROM中存放的起始地址。事实上,CPU正是通过这个地址才找到这段程序的。

可以通过以下的例子再来看看标号的含义:

MOV  DPTR,#100H

MOV  A,R0

MOVC A,@A+DPTR

.....

ORG  0100H

DB   0,1,4,9,16,25

如果R0中的值为2,则最终地址为100H+2为102H,到102H单元中找到的是4。这样应看明白了吧?

那么为什么不这样写程序,要用标号呢?不是增加疑惑吗?

如果这样写程序的话,在写程序时,我们就必须确定这张表格在ROM中的具体的位置,如果写完程序后,又想在这段程序前插入一段程序,那么这张表格的位置就又要改变了,要改为ORG  100H这句话了,我们是经常需要修改程序的,那么麻烦,所以就用标号来替代,只要一编译程序,位置就自动发生变化,我们把这个麻烦的事交给计算机去做了。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值