ARM架构三类ADD指令汇编代码正确性求证
ARM ADD指令汇编代码正确性分析
针对你给出的三类ADD指令场景,逐一分析如下:
场景1:rd=r3、rn=r2、rot=3、imm8=15
- 你的代码:
ADD r3,r2,#15,#2
错误点:格式不符合ARM立即数型ADD指令规范,且旋转参数错误(rot=3对应循环右移6位,而非#2)。ARM汇编无需手动指定imm8和rot,只需写出最终计算后的立即数,或用移位后缀明确旋转逻辑。 - 正确代码:
两种写法均可:- 直接写计算后的立即数:
ADD r3, r2, #60(0xF循环右移6位等价于左移2位,结果为0x3C即十进制60) - 用移位后缀明确旋转:
ADD r3, r2, #15 ROR #6(部分汇编器支持该写法,会自动编码为imm8=15、rot=3的机器码)
- 直接写计算后的立即数:
场景2:rd=r3、rn=r2、shamt=5、rm=r8、sh=00(逻辑左移)
- 你的代码:
ADD r3, r2, rm,#00, #5
错误点:寄存器名写错(应为r8而非rm),格式混乱,未指定移位类型(逻辑左移对应LSL),多余的#00无意义。 - 正确代码:
ADD r3, r2, r8, LSL #5
场景3:rd=r3、rn=r2、rs=r5、rm=r8、sh=00(逻辑左移)
- 你的代码:
ADD r3,r2, r8, #00, r5
错误点:多余的#00无意义,未指定移位类型(逻辑左移对应LSL),格式不符合寄存器移位型ADD指令规范。 - 正确代码:
ADD r3, r2, r8, LSL r5
内容的提问来源于stack exchange,提问作者user394334
相关产品推荐
相关产品推荐

