助记符 操作数 机器码(HEX) 振荡器周期 Meaning 标准51 C8051F MOVC A,@A+DPTR 93 24 3 MOVC A,@A+PC 83 24 3 MOVX A,@Ri E2|E3 24 3 从片外RAM MOVX A,@DPTR E0 24 3 MOVX @Ri,A F2|F3 24 3 MOVX @DPTR,A F0 24 3
MOV DPTR,#data16 90, data 15-8, data 7-0 24 3
MOV Rn,A F8|F9|FA|FB|FC|FD|FE|FF 12 1 MOV Rn,direct A8|A9|AA|AB|AC|AD|AE|AF, direct 24 2 MOV Rn,#data 78|79|7A|7B|7C|7D|7E|7F, data 12 2
MOV A,Rn E8|E9|EA|EB|EC|ED|EE|EF 12 1 MOV A,direct E5, direct 12 2 MOV A,@Ri E6|E7 12 2 MOV A,#data 74, data 12 2 MOV Rn,A F8|F9|FA|FB|FC|FD|FE|FF 12 1 MOV Rn,direct A8|A9|AA|AB|AC|AD|AE|AF, direct 24 2 MOV Rn,#data 78|79|7A|7B|7C|7D|7E|7F, data 12 2
INC A 04 12 1 A++ INC Rn 08|09|0A|0B|0C|0D|0E|0F 12 1 INC direct 05, direct 12 2 INC @Ri 06|07 12 2 INC DPTR A3 24 1
排除赋初值的前提的话,MOVC和MOVX是是一样的。 用DPTR的话,也是一样的,都是3个指令周期
如果单个查表,PC不用赋值,所以MOVC A,@A+PC 和 MOVX @Ri,A差不多; 连续访问时,由于MOVC A,@A+PC会破坏A,所以只能用DPTR,MOVX也可以用DPTR; 但这时MOVX可以用MOVX @Ri,A(Keil里的pdata),所以它最快。
讨论这个基本上没什么用,如果是51的话,才那么点容量,该放code还是xdata不是你想怎样就怎样的,而且速度也差不多;
而对于ARM或DSP,由于频率差异,大多都是RAM更快的,而且还要考虑总线竞争的影响 |