学习正点原子嵌入式第二期第八讲时,涉及汇编LDR、STR指令。
LDR R1,[R0] 是读取R0地址所对应的数据给R1寄存器。而STR R1,[R0] 则是将R1里的数据给到R0地址中,而不是和LDR语句一样,R0地址所对应的数据?(其实这是一个很笨的问题,数据给到R0地址中,与R0地址所对应的数据是一个意思,都是修改了R0地址中所对应的数据的值)。
后查阅资料个人理解:[R0] 类似于51单片机中@R0 指R0中的值作为地址所对应的数据。
同时知道了
LDR R0,0xff (没有等号为指令)即将0xff这个值所对应的地址(即地址为0xff)中的值给到寄存器R0,相当于51中MOV R0,@R1 (R1=0xff,这里想表达的是51中的以寄存器中的值为地址所对应的值这个意思,语句MOV R0,@R1 可能有错,但表达的意思没错,已经好久没看过51的书了);为什么此处不用MOV呢?MOV只能在寄存器之间移动数据,或者把立即数移动到寄存器中。
LDR R0,=0xff (有等号为伪指令)即将0xff这个值给到寄存器R0,相当于51中取立即数;LDR伪指令和MOV的作用差不多,主要区别为MOV 操作的立即数的长度为8位,LDR伪指令没有限制。
在使用LDR伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该LDR伪指令是会被转换为MOV的,如下图所示。
查阅资料链接为:adr adrl ldr mov总结整理 - 宋桓公 - 博客园 (cnblogs.com)