CORTEX M4:对BX和BLX指令的混淆以及LR

时间:2017-04-10 04:49:27

标签: assembly arm cortex-m

我的理解是,对于皮层M4,BX和BLX的地址寄存器必须将位(0)设置为1.我很困惑这对于BLX指令如何工作,地址是否插入到LR寄存器中执行后BLX指令将位(0)设置为1?在使用BX指令执行返回之前,是否需要手动将其更改为1?

另一种选择是使用:MOV PC,LR,但似乎是在破坏分支指令的目的。

1 个答案:

答案 0 :(得分:3)

  

执行BLX指令后将地址插入LR寄存器,将位(0)设置为1?

如果CPU在跳转前以ARM模式运行,则BLX指令将LR的位(0)设置为0,如果CPU在Thumb模式下运行,则将其设置为1。

由于Cortex M4仅支持Thumb指令模式(而不是ARM模式),因此BLX将始终将位(0)设置为1。

  

另一种选择是使用:MOV PC,LR,但似乎是在破坏分支指令的目的。

在没有Thumb模式的旧ARM CPU上,MOV PC,LR指令是"官方"返回指令。

缺点是您无法从ARM功能返回Thumb功能,反之亦然。

在仅支持Thumb模式的CPU上,您也可以使用该指令。