作业帮 > 综合 > 作业

8051 单片机 设A=40H,执行指令 1000H:MOVC A,@A+PC后,把存储器_______单元内容送入累加

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/06 04:34:14
8051 单片机 设A=40H,执行指令 1000H:MOVC A,@A+PC后,把存储器_______单元内容送入累加器A.
把存储器1041H的单元内容送到A.
解题过程没有什么复杂的,只是有一个陷井而已.
1000H:MOVC A,@A+PC
大家都会认为,执行这条的时候,PC的数值应该是 1000H,其实是错误的,是1001H,因为指令MOVC A,@A+PC本身占有一个字节的地址空间,这条指令的位置才是1000H
再问: 非常感谢你的回答。 不过还有两点疑惑 1.MOVC A,@A+PC 这条指令的意义是什么,我查询资料,是读取ROM中的表单吗? 2.你说PC的数值应该是 1001H,是指这条指令本身“MOVC A,@A+PC”另占一个字节吗?这个和PC寄存器指向下一条指令的地址有关系吗?
再答: 哦,是这样的,我的表达让你产生歧义了。 先回答你第一个问题,那条指令的意义就是查表,如果你接触C语言,你就会知道了,我们在开发程序的过程中,可能会用到很大的常数数组,例如NTC的AD转换或者CRC计算等等,比如: NTC_Table[1024],这个数值非常大,51单片机的RAM通常装不下,所以,我们会这么定义: code unsigned short NTC_Table[1024],这样,那个表格就被放在ROM中,我们调用这个表格的时候,就是用到了那条指令。 第二个问题,是我的表达方式严重有误, 1000H:MOVC A,@A+PC,这个指令占用一个字节,且这个指令地址是 1000H, 但是,你对这条指令进行计算的时候,要把PC当作是1001H,注意,是当作是,其实际PC值在执行这条指令的时候仍然是 1000H,执行完成后才是 1001H,只是这条指令在进行计算的时候,PC值会有一个偏置1,逻辑上看起来好像是 PC=1001H,其实际物理上,PC依旧是1000H 不知道我这样说你明白不,我不知道再怎么表达了。