标题: 关于单片机查表指令的问题 [打印本页]

作者: zhangzhao2423    时间: 2019-1-18 22:23
标题: 关于单片机查表指令的问题
关于查表指令的问题
第一:为什么开始汇编程序给累加器是14的偏移量
第二:当进入Roop子程序时,入栈累加器A,那么A是不是要加一,那么偏移量是不是就变成了15
第三:在比较指令不想等时,累加器加一和地址指针分别加一是什么意思,为什么要两个都加一

Screenshot_20190117-203424.jpg (296.06 KB, 下载次数: 40)

Screenshot_20190117-203424.jpg

作者: ahshmj    时间: 2019-1-19 08:49
从本条指令起,到TAB4表中间的各条指令的机器码一共有14个,所以是14
作者: ahshmj    时间: 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文件看看便知。

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

有好几个网友的回帖都讲的非常详细了,就是基础再差也该看懂了。
这么详细还是看不懂?
作者: ahshmj    时间: 2019-1-19 09:00
在看不懂你就别用这个指令了。用:

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

这个可以不用考虑偏移量。
作者: zhangzhao2423    时间: 2019-1-19 17:18
ahshmj 发表于 2019-1-19 08:49
从本条指令起,到TAB4表中间的各条指令的机器码一共有14个,所以是14

一个字节是一个机器码吗?我数的是12个机器码,中间是不是有哪个是两个机器码的啊
作者: ahshmj    时间: 2019-1-20 08:01
zhangzhao2423 发表于 2019-1-19 17:18
一个字节是一个机器码吗?我数的是12个机器码,中间是不是有哪个是两个机器码的啊

每条指令的机器码不一定相同,有单字节的、两字节的、三字节的。
作者: zhangzhao2423    时间: 2019-1-20 10:05
ahshmj 发表于 2019-1-20 08:01
每条指令的机器码不一定相同,有单字节的、两字节的、三字节的。

我想请问一下,它这个机器码怎么算的啊
MOV  R2,DPH和MOV R3,DPL分别占用几个字节
MOV   R2,#00H和MOV  R3,#00H分别占用几个字节啊?我算出来不止14个机器码了
作者: ahshmj    时间: 2019-1-20 18:41
第一问:
   操作内容:Rn←(direct),(n=0~7)
    字节数: 2
    机器周期:2
第二问:
    操作内容:Rn←data,(n=0~7)
    字节数: 2
    机器周期:1

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


作者: zhangzhao2423    时间: 2019-1-21 07:11
ahshmj 发表于 2019-1-20 18:41
第一问:
   操作内容:Rn←(direct),(n=0~7)
    字节数: 2

你好前辈,如果给寄存器的算两个字节的话,那么我从查表指令数下来就有16个偏移量啦,这还是不对啊??




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1