You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM Cortex A9中`ldr pc, _boot`与`b _boot`指令的区别是什么

ARM Cortex-A9 中 B _boot 与 LDR PC, _boot 的核心差异

指令本质与特性差异

  • B _boot 是相对跳转指令:机器码中存储的是当前PC值到目标_boot地址的偏移量,执行时直接将当前PC加上偏移量得到目标地址写入PC完成跳转。
    • 跳转范围有限:32位ARM模式下B指令的偏移量为24位有符号数,左移2位后对应±32MB的跳转范围,若_boot地址超出该范围,链接阶段会直接报错。
    • 支持位置无关执行:只要_boot和当前指令的相对偏移固定,不管这段代码被加载到内存的任意地址,都可以正常完成跳转。
    • 不修改链接寄存器LR:仅BL/BLX这类带链接属性的跳转指令才会自动写入返回地址到LR,普通B指令完全不涉及LR操作。
  • LDR PC, _boot 是绝对跳转指令:本质是从_boot对应的内存单元中读取存储的数值,直接写入PC寄存器完成跳转。
    • 无跳转范围限制:支持32位地址空间内的任意地址跳转,不受±32MB范围约束,通常用在跳转距离较远的场景,比如向量表跳转到外部Flash或DDR中的内核入口。
    • 属于位置相关执行:读取的是_boot地址中存储的绝对地址值,若代码被加载到非链接指定的地址,_boot的实际地址会偏移,跳转也会失效。
    • 不修改链接寄存器LR:该指令属于普通内存加载操作,硬件不会自动操作LR。

与链接寄存器LR的关联

二者的差异完全和LR无关,两条指令执行时都不会修改LR的值,只有BL(带链接跳转)、BLX(带链接的指令集切换跳转)这类明确标注链接属性的指令,才会在跳转前自动把下一条指令的地址写入LR,用于后续函数返回。

内容的提问来源于stack exchange,提问作者Stone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:15:03