我的理解是,对于皮层M4,BX和BLX的地址寄存器必须将位(0)设置为1.我很困惑这对于BLX指令如何工作,地址是否插入到LR寄存器中执行后BLX指令将位(0)设置为1?在使用BX指令执行返回之前,是否需要手动将其更改为1?
另一种选择是使用:MOV PC,LR,但似乎是在破坏分支指令的目的。
答案 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上,您也可以使用该指令。