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

ARM汇编中ALIGN 4,3指令的对齐行为困惑求解

ARM汇编ALIGN指令的地址计算误区解析

你对ALIGN指令的参数理解完全搞反了——第二个参数不是“对齐到边界后再加的偏移量”,而是要求最终地址满足 (最终地址 - offset) 能被第一个参数整除,也就是最终地址 = k*expr + offset(k为整数,且最终地址 ≥ 当前地址)。

回到你的代码示例:

DCB 0xFF        ; 0xFF is placed at address 0x20000000
ALIGN 4, 3      ; Align to a 4-byte boundary with a 3-byte offset
DCB 0x33        ; Where will 0x33 be placed?

具体计算过程:

  • 执行DCB 0xFF后,下一个可用地址是0x20000001
  • ALIGN 4,3的核心要求是:找到≥0x20000001的最小地址Addr,使得(Addr - 3) mod 4 == 0,等价于Addr mod 4 == 3
  • 满足条件的最小Addr是0x20000003(0x20000003-3=0x20000000,是4的倍数;而0x20000001、0x20000002的模4结果分别为1、2,不满足要求)
  • 因此汇编器会在0x20000001和0x20000002位置填充2个字节(填充值由汇编器默认规则决定,通常为0),之后将0x33存储在0x20000003。

你之前的错误在于把offset当成了“对齐到标准4字节边界后额外添加的偏移”,但实际上它是参与对齐规则计算的偏移量,用来定义最终地址需要满足的模运算关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:50:06