找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2654|回复: 8
打印 上一主题 下一主题
收起左侧

关于单片机查表指令的问题

[复制链接]
楼主
ID:7485 发表于 2019-1-19 08:49 | 显示全部楼层
从本条指令起,到TAB4表中间的各条指令的机器码一共有14个,所以是14
回复

使用道具 举报

沙发
ID:7485 发表于 2019-1-19 08:55 | 显示全部楼层
本帖最后由 ahshmj 于 2019-1-19 14:08 编辑

上次在你的另外的一个帖子里已经告诉你了:“
MOVC  A,  @A+PC 本条指令是查表指令,也叫作:“程序存储器读指令”,要读的值在“TAB3”表中。“PC”是当前(本条指令)代码在程序存储器中的位置,而TAB3表距离当前“PC”还有6个字节的距离,所以当前的“PC”值+6,才是TAB3的首字符位置。”


你看看从“MOVC  A,  @A+PC”这语句到“TAB3”之间有几条指令(不含本语句)?这几条指令的机器码就是6个字节。

在没有给“TAB3”指定位置的情况下,程序的机器码是按先后顺序存放烧写的。

“PC”的值就是当前语句的机器码烧写在程序存储器中的地址。再加上6个字节,就到“TAB3”的首地址了。

你可以打开你的本工程目录下,经过编译产生的*.lst文件看看便知。

根据你的提问,你现在理解这些还有一定的难度,如果你真心的想学、想掌握这门技术,建议你还是扎扎实实的打好基础。

有好几个网友的回帖都讲的非常详细了,就是基础再差也该看懂了。
这么详细还是看不懂?
回复

使用道具 举报

板凳
ID:7485 发表于 2019-1-19 09:00 | 显示全部楼层
在看不懂你就别用这个指令了。用:

MOV   DPTR,  #TAB4
MOVC    A,   @A+DPTR

这个可以不用考虑偏移量。
回复

使用道具 举报

地板
ID:7485 发表于 2019-1-20 08:01 | 显示全部楼层
zhangzhao2423 发表于 2019-1-19 17:18
一个字节是一个机器码吗?我数的是12个机器码,中间是不是有哪个是两个机器码的啊

每条指令的机器码不一定相同,有单字节的、两字节的、三字节的。
回复

使用道具 举报

5#
ID:7485 发表于 2019-1-20 18:41 | 显示全部楼层
第一问:
   操作内容:Rn←(direct),(n=0~7)
    字节数: 2
    机器周期:2
第二问:
    操作内容:Rn←data,(n=0~7)
    字节数: 2
    机器周期:1

你问的4条指令全是2字节。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表