ahshmj 发表于 2019-1-20 18:41 你好前辈,如果给寄存器的算两个字节的话,那么我从查表指令数下来就有16个偏移量啦,这还是不对啊?? |
第一问: 操作内容:Rn←(direct),(n=0~7) 字节数: 2 机器周期:2 第二问: 操作内容:Rn←data,(n=0~7) 字节数: 2 机器周期:1 你问的4条指令全是2字节。 |
ahshmj 发表于 2019-1-20 08:01 我想请问一下,它这个机器码怎么算的啊 MOV R2,DPH和MOV R3,DPL分别占用几个字节 MOV R2,#00H和MOV R3,#00H分别占用几个字节啊?我算出来不止14个机器码了 |
zhangzhao2423 发表于 2019-1-19 17:18 每条指令的机器码不一定相同,有单字节的、两字节的、三字节的。 |
ahshmj 发表于 2019-1-19 08:49 一个字节是一个机器码吗?我数的是12个机器码,中间是不是有哪个是两个机器码的啊 |
在看不懂你就别用这个指令了。用: MOV DPTR, #TAB4 MOVC A, @A+DPTR 这个可以不用考虑偏移量。 |
本帖最后由 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文件看看便知。 根据你的提问,你现在理解这些还有一定的难度,如果你真心的想学、想掌握这门技术,建议你还是扎扎实实的打好基础。 有好几个网友的回帖都讲的非常详细了,就是基础再差也该看懂了。 这么详细还是看不懂? |
从本条指令起,到TAB4表中间的各条指令的机器码一共有14个,所以是14 |