CORTEX M4:混淆 BX 和 BLX 指令以及 LR 的位 (0)
CORTEX M4: Confusion on BX and BLX instruction and bit(0) of LR
我的理解是,对于 cortex M4,BX 和 BLX 的地址寄存器必须将位 (0) 设置为 1。我对 BLX 指令的工作原理感到困惑,插入到执行 BLX 指令后 LR 寄存器的位(0)设置为 1?在使用 BX 指令执行 return 之前,是否需要手动将其更改为 1?
另一种选择是使用:MOV PC, LR,但这似乎违背了分支指令的目的。
does the address inserted into the LR register after execution BLX instruction have bit(0) set to 1?
是的。
如果 CPU 在跳转之前在 ARM 模式下为 运行,则 BLX 指令将 LR 的位 (0) 设置为 0,如果 CPU 为 [=31],则为 1 =] 在 Thumb 模式下。
因为Cortex M4只支持Thumb指令模式(不支持ARM模式)bit(0)会一直被BLX设置为1
The other option is to use: MOV PC, LR but it seems like that is defeating the purpose of the branch instructions.
在没有 Thumb 模式的旧 ARM CPU 上,MOV PC,LR
指令是 "official" return 指令。
缺点是不能从 ARM 函数 return 到 Thumb 函数,反之亦然。
在仅支持 Thumb 模式的 CPU 上,您也可以使用该指令。
我的理解是,对于 cortex M4,BX 和 BLX 的地址寄存器必须将位 (0) 设置为 1。我对 BLX 指令的工作原理感到困惑,插入到执行 BLX 指令后 LR 寄存器的位(0)设置为 1?在使用 BX 指令执行 return 之前,是否需要手动将其更改为 1?
另一种选择是使用:MOV PC, LR,但这似乎违背了分支指令的目的。
does the address inserted into the LR register after execution BLX instruction have bit(0) set to 1?
是的。
如果 CPU 在跳转之前在 ARM 模式下为 运行,则 BLX 指令将 LR 的位 (0) 设置为 0,如果 CPU 为 [=31],则为 1 =] 在 Thumb 模式下。
因为Cortex M4只支持Thumb指令模式(不支持ARM模式)bit(0)会一直被BLX设置为1
The other option is to use: MOV PC, LR but it seems like that is defeating the purpose of the branch instructions.
在没有 Thumb 模式的旧 ARM CPU 上,MOV PC,LR
指令是 "official" return 指令。
缺点是不能从 ARM 函数 return 到 Thumb 函数,反之亦然。
在仅支持 Thumb 模式的 CPU 上,您也可以使用该指令。