ARM汇编:如何用R8的值替换R3中的第二个带符号字节?
正确的ARM汇编指令方案
首先要明确你的需求场景,分两种情况处理:
场景1:修改寄存器R3本身的第二个字节
寄存器R3是32位,第二个字节对应bit8~bit15的位置(从0开始计数,第0字节为最低8位)。要替换这个字节为R8的低8位值,需要通过位操作指令组合实现:
; 清除R3中第二个字节的原有内容 AND R3, R3, #0xFFFF00FF ; 将R8的低8位移到第二个字节的位置 MOV R0, R8, LSL #8 ; 合并得到修改后的R3 ORR R3, R3, R0
如果你的ARM架构支持复合指令,也可以用更简洁的组合写法:
BIC R3, R3, #0xFF00 @ 清除第二个字节 ORR R3, R3, R8, LSL #8 @ 写入R8的低8位到第二个字节位置
场景2:修改R3指向的内存地址中的第二个字节
如果你的实际需求是操作R3指向的内存区域里的第二个字节(即内存地址R3+1处),直接用字节存储指令STRB即可:
STRB R8, [R3, #1]
这条指令会把R8的低8位值存储到R3+1的内存位置,覆盖原有字节。你提到的LDRSB是带符号加载字节的指令,仅用于从内存读取带符号字节到寄存器,和你要做的“替换写入”操作不符,所以不能用在这里。
内容的提问来源于stack exchange,提问作者Cjknsefkjnzlsk
相关产品推荐
相关产品推荐

