标题: 关于单片机movc指令的应用程序 [打印本页]

作者: zhangzhao2423    时间: 2019-1-13 15:41
标题: 关于单片机movc指令的应用程序
不懂为什么要add a,r3,
       为什么要ADD   A,#6加这么对偏移量

Screenshot_20190113-153528.jpg (280.07 KB, 下载次数: 23)

Screenshot_20190113-153528.jpg

作者: xuyaqi    时间: 2019-1-13 16:03
add a,r3      把r3里的值加到累加器a里去。
ADD   A,#6  把直接数6加到累加器a里去。
和偏移量没任何关系。

作者: ahshmj    时间: 2019-1-13 18:24
MOVC  A,  @A+PC 本条指令是查表指令,也叫作:“程序存储器读指令”,要读的值在“TAB3”表中。“PC”是当前(本条指令)代码在程序存储器中的位置,而TAB3表距离当前“PC”还有6个字节的距离,所以当前的“PC”值+6,才是TAB3的首字符位置。

作者: Y_G_G    时间: 2019-1-13 20:38
因为表是DW      用两个字节来放一个数据,如果是DB就是直接计算偏移量
DW的话,是乘以2来计算的

作者: 放大    时间: 2019-1-13 21:31
MOVC  A,  @A+PC 本条指令是查表指令,也叫作:“程序存储器读指令”,要读的值在“TAB3”表中。“PC”是当前(本条指令)代码在程序存储器中的位置,而TAB3表距离当前“PC”还有6个字节的距离,所以当前的“PC”值+6,才是TAB3的首字符位置。
作者: zhangzhao2423    时间: 2019-1-14 00:00
ahshmj 发表于 2019-1-13 18:24
MOVC  A,  @A+PC 本条指令是查表指令,也叫作:“程序存储器读指令”,要读的值在“TAB3”表中。“PC”是当 ...

为什么说TAB3的首地址距离PC有6个字节的距离啊?是怎么求出来的啊
作者: zhangzhao2423    时间: 2019-1-14 00:01
Y_G_G 发表于 2019-1-13 20:38
因为表是DW      用两个字节来放一个数据,如果是DB就是直接计算偏移量
DW的话,是乘以2来计算的

请问ADDC  A,#06H它是怎么得出的啊?为什么是加6?
作者: ahshmj    时间: 2019-1-14 10:49
你看看从“MOVC  A,  @A+PC”这语句到“TAB3”之间有几条指令(不含本语句)?这几条指令的机器码就是6个字节。

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

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

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

根据你的提问,你现在理解这些还有一定的难度,如果你真心的想学、想掌握这门技术,建议你还是扎扎实实的打好基础。
作者: Y_G_G    时间: 2019-1-14 19:01
zhangzhao2423 发表于 2019-1-14 00:01
请问ADDC  A,#06H它是怎么得出的啊?为什么是加6?

从“MOVC  A,  @A+PC”这个指令到“TAB3”之间有几条指令,每条指令占用不同的空间,你得打开8051汇编指令看这几条指令占用的空间,加在一起就是占用了6B,就是6个字节
这是一个非常应试教育的题目:一个酒杯的容积怎么计算,2B一样的老师要告诉你,酒杯的高度,直径,弧度之类,估计你还得用到微积分,说不定还算不出来。
实际上,把酒杯装满水,再称水的重量就知道容量了。
明明有更好的方法,非得叫人用PC值,以为这样就可以练习基本功什么之类的。
用PC值的缺点:你得对着8051汇编指令,慢慢找到你那条指令占用空间的大小,一条一条的加上去。这样还不行,你还要看PC加上去不是大于255了,大于255了就不行,也就是说这个查表指令是不能随便放的,你得把这指令放在前面。不然,PC值就会超过255了
用16位查表就什么都没有了
一般来说尽量少用PC值这个计算
一般来说尽量少用汇编,能用C就尽量用C
作者: zhangzhao2423    时间: 2019-1-14 22:29
Y_G_G 发表于 2019-1-14 19:01
从“MOVC  A,  @A+PC”这个指令到“TAB3”之间有几条指令,每条指令占用不同的空间,你得打开8051汇编指 ...

师傅,能不能加我微信啊?zhangzhao2423,万分感谢,有不懂请多多指教,我们是新人,求带路
作者: Y_G_G    时间: 2019-1-15 00:11
zhangzhao2423 发表于 2019-1-14 22:29
师傅,能不能加我微信啊?zhangzhao2423,万分感谢,有不懂请多多指教,我们是新人,求带路

汇编学个差不多就可以了,以后还是要用C多一点的
我也是一直用汇编,准备学C了
难不成你要用汇编??
作者: zhangzhao2423    时间: 2019-1-15 07:03
Y_G_G 发表于 2019-1-15 00:11
汇编学个差不多就可以了,以后还是要用C多一点的
我也是一直用汇编,准备学C了
难不成你要用汇编??

二级C以前学校学的,还有一点点印象了。汇编我也学。我都学。先从汇编开始。现在想把单片机搞熟了,我刚接触单片机不久。还请指教




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