ARM Cortex-M 分支指令编码
B<cond>.<qualifier> <lable> -- Branch causes a branch to a target address
if ConditionPassed(cond) then
{
EncodingSpecificOperations(PC, lable);
BranchWritePC(PC + imm32);
}
// All versions of the Thumb instruction set
T1 : B<cond> <lable> : not allowed in IT block
T2 : B<cond> <lable> : outside or last in IT block
// All versions of the Thumb instruction set from Thumb-2 onwards.
T3 : B<cond>.W <lable> : not allowed in IT block
T4 : B<cond>.W <lable> : outside or last in IT block
<lable>
Specifies the label of the instruction that is to be branched to.
The assembler calculates the required value of the offset
from the PC value of the B instruction to this label,
then selects an encoding that will set imm32 to that offset.
Allowed offsets are even numbers in the range
T1 : -256 to 254 : imm8
T2 : -2048 to 2046 : imm11
T3 : -1048576 to 1048574 : imm6 + imm11
T4 : -16777216 to 16777214 : imm10 + imm11
BX -- Branch and Exchange causes a branch to an address and instruction set specified by a register.
T1 : BX<cond> <Rm> // Outside or last in IT block
BLX (register) -- Branch and Exchange calls a subroutine at an address and instruction set specified by a register.
T1 : BLX<cond> <Rm> // Outside or last in IT block
BL, BLX (immediate) -- Branch with Link (immediate) calls a subroutine at a PC-relative address.
T1 : BL<cond> <label> // Outside or last in IT block
T2 : BLX<cond> <label> // Outside or last in IT block
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本