您的位置 首页 方案

程序存储器向累加器A传送指令MOVC 举例说明

MOVCA,@A+DPTR 本指令是将ROM中的数送入A中。本指令也被称为单片机查表指令,常用此指令来查一个已做好在ROM中的表格

MOVCA,@A+DPTR 本指令是将ROM中的数送入A中。本指令也被称为单片机查表指令,常用此指令来查一个已做好在ROM中的表格 阐明:
此条指令引出一个新的寻址方法:变址寻址。本指令是要在ROM的一个地址单元中找出数据,明显有必要知道这个单元的地址,这个单元的地址是这样确认的:在履行本指令立脚点DPTR中有一个数,A中有一个数,履行指令时,将A和DPTR中的数加起为,就成为要查找的单元的地址。
查找到的成果被放在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这句话了,咱们是常常需求修正程序的,那多费事,所以就用标号来代替,只需一编译程序,方位就主动发生变化,咱们把这个费事事交给计算机指咱们用的电脑去做了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/131990.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部