這個就是程序存儲器中的表數據的傳輸。 現(xiàn)有的設計,它是先要將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個全部都用完了。但是,這個取表數據可經常是工作量很大的工作,所以,對所有指令進行優(yōu)化取消某些指令給它讓個位,很有必要吧? 再說了,PSW中不是還有個D1空位么,用它來轉換一下使用哪幾條指令不行么?這個,不會影響兼容性的。 以現(xiàn)有的制造技術,這些應該都很容易做到吧? 也許,當初做51機芯片設計時,基于當時的需要及條件而這樣設計,或者,設計者智商...... 說得不一定對,盼指教。反正,以上所說,對于程序存儲器中表數據尋址與傳輸命令的理解,有一定幫助。
|