MOV 20H,R0是将R0存储的内容复制到20H
MOV 20H,@R0是将R0内容指向的地址中的内容复制给20H。比如R0存储的内容是30H,这指令的效果就相当于将30H的内容复制到20H。
是不是有点绕?
首先在单片机的数据存储器里,都是使用十六进制数来标识每一个存储单元的,比如51单片机中数据存储器是00H~7FH的,而对于一些存储单元又使用了特殊的名称,例如00H存储单元,又是我们常用的R0,也就是说一个存储单元可能有多个名称叫法。然而单片机的数据也是一十六进制形式存储的所以在理解上就容易混淆,在下面的解释中,请看清每个数据前面的强调修饰语
而这两条语句就是如果 此时R0里面的内容是5DH,那么MOV 20H,R0,就是说吧R0里面的【数据】5DH存入20H【单元】,而MOV 20H,@R0是个寄存器间接寻址,就是说寄存器R0里面【数据】是5DH,那么现在程序自动找到5DH这个【存储数据的单元】,把5DH【单元】内的【数据】存入20H【单元】,其中5DH【单元】里的【数据】你就不用管了
一个是直接寻址指令,一个是间接寻址指令
如果 R0 = 0X8E
MOV 20H , R0 // 20H = 0X8E
MOV 20H, @R0 // 20H 等于存贮在地址为0X8E的数据,@R0存放的是地址 0X8E 的数据
直接寻址和间接寻址,这两个你理解吗?关于这方面的,一些书籍、资料一定介绍很清楚,希望认真看看书,祝你成功!