Cortex-M0使用汇编进行数据访问时,需要注意的几点
1、对不同的数据宽度选择正确的指令,不同的指令用于不同的数据宽度。
Cortex-M0处理器支持多个存储器访问指令,并且支持各种宽度的数据传输和寻址
方式。可以使用的数据宽度可以包括字(4字节)、半字(2字节)和字节,另外对
有符号和无符号数,还有不同的指令。
不同数据宽度的存储器访问指令
![](https://img.haomeiwen.com/i206361/9508262c38b03129.png)
2、确保访问为对齐的,非对齐访问会触发错误异常,使用错误数据宽度的
指令操作数据时就会引发这一情况。
例如: LDR <Rt>,[PC, #immed8]; 字读
这条指令展开为: Rt = 存储器[字对齐(PC + 4) + 零展开(#immed8 << 2)]
Rt为低寄存器(也就是32位寄存器的低16位),目的地址需要为字对齐的,
这也就是加4的原因。
3、多种寻址方式可供选择,并使得汇编代码简化。例如,当设置/访问一个外设
时,你可以将一个寄存器设置为外设的基址地址,然后使用立即数偏移寻址方式
访问每个寄存器。这样,你就不必在访问每一个寄存器时都去设置寄存器的地址。
例如:将单个存储器数据读到寄存器中,可以使用 寄存器寻址方式
LDR<Rt>,[<Rn>,<Rm>] //Rt = 存储器[Rn + Rm]
也可以使用立即数偏移寻址方式
LDR<Rt>,[<Rn>, #immed5] //Rt = 存储器[Rn + 零展开(#immed5 << 2)];
LDR的传输大小是字,即4个字节,所以,LDR使用时立即数偏移值需要左移2位,
即低4字节进行对齐。