这个就是程序存储器中的表数据的传输。 现有的设计,它是先要将PC或DPTR作为基地址,再与一个相对地址值相加,得到的值即为程序存储中的绝对地址值。然后程序找到这个地址,将其中的内容送入目的地。这个相对地址,目前的设计中,是必须存在A中;得到的绝对地址值,不知存在哪(不管它了);数据传输目的地,必须是A。也就是说,你必须先将一个数据送入A中,哪怕这个数是0! 汇编命令:MOVC A,@A+PC MOVC A,@A+DPTR 为什么非要用到A作相对地址值的存放地?你用了A就算了,为什么又用最终数据将A中的相对地址值冲掉?你就不能用B存放相对地址值? 为什么非要用与A中值相加的方式来获得绝对地址值?你就不能设计成直接以PC中或DPTR中的值为绝对地址值?基地址与相对地址值的相加工作,程序猿又不是笨蛋。而且,取表数据顺序取的时候是绝大多数,PC自己会加1,DPTR弄个自加1程序也很简单滴嘛。 再说了,你就不能设计个程序存储器绝对地址寻址机器指令啊?目的地址直接对B或Rn不行么?直接对A也行啊?这个没什么难度吧? 我们当然知道,受总指令数限制嘛,256个全部都用完了。但是,这个取表数据可经常是工作量很大的工作,所以,对所有指令进行优化取消某些指令给它让个位,很有必要吧? 再说了,PSW中不是还有个D1空位么,用它来转换一下使用哪几条指令不行么?这个,不会影响兼容性的。 以现有的制造技术,这些应该都很容易做到吧? 也许,当初做51机芯片设计时,基于当时的需要及条件而这样设计,或者,设计者智商...... 说得不一定对,盼指教。反正,以上所说,对于程序存储器中表数据寻址与传输命令的理解,有一定帮助。
|