51单片机查表指令的用法

51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:

    MOVC A, @A + PC
    MOVC A, @A + DPTR

其中前一条指令的用法,比较难,使用的时候,需要计算一个“偏移量”。不了解“指令的字节数”的人,都不清楚应该如何计算。
做而论道曾在以前的文章中,介绍过“偏移量”的自动计算方法,可见如下链接:

http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/32df49a09db0db81461064e9.html
http://zhidao.baidu.com/question/125242924.html?si=5


本文根据网友的提问,说一下“MOVC A, @A+DPTR”查表指令的用法。
原题网址:http://zhidao.baidu.com/question/150571761.html?si=1
解决时间:2010-5-2 23:25
-------------------------------
最佳答案:
51单片机汇编语言有一条查表指令是:
    MOVC A, @A + DPTR
它不是单独使用的,要和 DB 伪指令配套使用。

例如:若累加器A中有一个0~9的数,请用查表法求出该数的平方值,设平方表表头地址为1000H。
程序如下:
;-------------------------------------
    MOV DPTR, #1000H
    MOVC A, @A + DPTR
    ……

    ORG 1000H
    DB   0, 1, 4, 9, 16, 25......
;-------------------------------------
DB 伪指令从 ROM 1000H 开始,顺序存放了一系列的“平方”数据。
MOVC A, @A+DPTR 指令中的A,如果等于0,就会在“平方”数据中取出第0个,就是0;
MOVC A, @A+DPTR 指令中的A,如果等于1,就会在“平方”数据中取出第1个,就是1;
MOVC A, @A+DPTR 指令中的A,如果等于2,就会在“平方”数据中取出第2个,就是4;
MOVC A, @A+DPTR 指令中的A,如果等于3,就会在“平方”数据中取出第3个,就是9;
……
MOVC A, @A+DPTR 指令中的A,如果等于9,就会在“平方”数据中取出第9个,就是81。
-------------------------------
原题网址:http://zhidao.baidu.com/question/150571761.html?si=1
提问者对于答案的评价:谢谢啦,我弄懂了,前几天我被扣了分。就少点了哈
==============================================================
后记:
这条指令的用法,相对前一条就简单了,事先并不需要计算“偏移量”。但是这条指令必须要使用寄存器DPTR。
大家知道,凡是涉及到片外RAM存储单元的时候,基本上都要使用DPTR,这个DPTR寄存器通常是比较“繁忙”的,它形成了一个片内、片外之间,数据传传输的“瓶颈”。因此在读取ROM数据的时候,能够不用这后一条指令,就不要用它,应该尽量使用前一条指令。
==============================================================

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页