首页 > 解决方案 > 如何在 ARM 汇编中移动字节

问题描述

假设我在寄存器中存储了以下十六进制值;

r1 = #0x1

r2 = #0x2

r3 = #0x3

r4 = #0xA

我想将#0x123A 存储在 r0 中。

有没有一种移位字节值的方法,类似于使用 LSL/LSR 移位位,以便我可以将每个寄存器 (r1-r4) 与掩码相加,然后将字节移位到 r0 中的正确位置?

标签: assemblyarm

解决方案


ARM 移位是作为其他操作中第二个操作数的一部分完成的。所以你会做这样的事情:

OR r0, r4, r3, LSL #4
OR r0, r0, r2, LSL #8
OR r0, r0, r1, LSL #12

尽管如果源寄存器的其他位不为零,这不会执行“掩码”部分。


推荐阅读