单片机MOV R0,A.和MOV @R0,A的区别

Python014

单片机MOV R0,A.和MOV @R0,A的区别,第1张

一、作用不同

MOV A,R0是直接寻址指令(直接寻址方式的操作指令直接把地址作为操作数来运行,既可作为源操作数,也可作为目的操作数)因此是传递的R0中存储的数据。

MOV A,@R0是间接寻址指令(间接寻址时,寄存器的内容是操作数的地址。通过@Ri可以对片内数据存储器单元间接寻址),因此Ri中存储的是数据存储器的地址,Ri相当于指针,@Ri中存储的是数据存储器的地址的内容。

二、意思不同

MOV R0,A是把累加器中的数送给寄存器R0,MOV @R0,A是把累加器的内容给R0指向的内存单元。

三、用法不同

比如MOV A,#01H

MOV R0,A 执行完这一句之后,R0=#01H

MOV A,#20H

MOV @R0,A 把#20H送给R0指向的单元#01H,执行完之后01地址中存储的内容就变成#20H

后者是一个间接寻址的问题。

MOA A,R0是把R0的内容给A

MOV A,@R0是把R0中的内容作为地址,所指向的存储单元的内容给A

也就是说R0中存放的是一个地址,@R0是指这个地址里存放的数据

是的,这结果完全一样

并且由于51指令中工作寄存器之间是没有传送指令的,此时要完成传送必须用直接地址比如:

MOV R0,R2这是没有的必须用

MOV 00H,02H