关于单片机汇编的 MOVC A,@A+DPTR,"@A+"多余吗?

来源:百度知道 编辑:UC知道 时间:2024/05/18 22:42:32
...
LOOP:
CLR A
MOVC A,@A+DPTR
INC DPTR
...
JMP LOOP

"MOVC A,@A+DPTR" 的"@A+"多余吗?
上面有CLR A,下面 INC DPTR了,中间那句 "MOVC A,@A+DPTR" 的"@A+"多余吗?

这个问题很好答嘛。
首先,MOVC A,@A+DPTR这个是51单片机的固有指令,去掉A+,就是错的。
这个指令的好处在于:当你查表的时候,将表头地址赋给DPTR,然后将
键号传给A,然后直接通过MOVC A,@A+DPTR,就可以查到键号对应的键值了。

这里,是循环查表,不需要A就清零A,用DPTR来控制咯,也可以用A来控制,
就是inc A,但是一般不这样用,因为A用到的地方很多,到时候值覆盖了不好
控制了。

@A+当然不是多余的,这是一条寻址的命令,是把地址为A+DPTR的内容送入累加器A中,通常是用于查表的

CLR A ; A清零
MOVC A,@A+DPTR ;A+DPTR的内容送入累加器A中
INC DPTR ;DPIR加一
看似多余,这是汇编的书写格式,@是间接寻址.