Cortex-M0使用汇编进行数据访问时,需要注意的几点

1、对不同的数据宽度选择正确的指令,不同的指令用于不同的数据宽度。

   Cortex-M0处理器支持多个存储器访问指令,并且支持各种宽度的数据传输和寻址

方式。可以使用的数据宽度可以包括字(4字节)、半字(2字节)和字节,另外对

有符号和无符号数,还有不同的指令。

                                不同数据宽度的存储器访问指令


2、确保访问为对齐的,非对齐访问会触发错误异常,使用错误数据宽度的

指令操作数据时就会引发这一情况。

例如: LDR ,[PC, #immed8]; 字读

  这条指令展开为: Rt = 存储器[字对齐(PC + 4) + 零展开(#immed8 << 2)]

  Rt为低寄存器(也就是32位寄存器的低16位),目的地址需要为字对齐的,

这也就是加4的原因。

3、多种寻址方式可供选择,并使得汇编代码简化。例如,当设置/访问一个外设

时,你可以将一个寄存器设置为外设的基址地址,然后使用立即数偏移寻址方式

访问每个寄存器。这样,你就不必在访问每一个寄存器时都去设置寄存器的地址。

   例如:将单个存储器数据读到寄存器中,可以使用 寄存器寻址方式

             LDR,[,]          //Rt = 存储器[Rn + Rm]                                       

             也可以使用立即数偏移寻址方式

            LDR,[, #immed5]          //Rt = 存储器[Rn + 零展开(#immed5 << 2)];   

           LDR的传输大小是字,即4个字节,所以,LDR使用时立即数偏移值需要左移2位,

          即低4字节进行对齐。

你可能感兴趣的:(Cortex-M0使用汇编进行数据访问时,需要注意的几点)