ARM-V7-A ADD指令与LSL结合

Pao*_*ato 4 arm armv7

add r1, r1, r0, lsl #3
Run Code Online (Sandbox Code Playgroud)

我不确定使用该指令执行的操作。是不是意味着:

  1. r0和r1相加,将结果左移3位,然后将结果保存到r1或
  2. 将 r1 和(r0 左移 3 位)相加,然后将结果保存到 r1

提前致谢。

coo*_*sed 5

Thumb 和 Thumb-2 指令集中的大多数算术和逻辑指令都采用三个参数。第一个是目标寄存器,第二个是第一个操作数(也是寄存器),第三个是灵活的第二操作数。(如果省略目标寄存器,则第一个操作数用作目标。)

在几乎所有情况下,灵活的第二操作数可以是:

  • 一个寄存器
  • 应用了移位或循环的寄存器,其中可用的移位是
    • ASR #n(算术右移)
    • LSL #n(逻辑左移)
    • LSR #n(逻辑右移)
    • ROR #n(右旋)
    • RRX(通过进位右移一位)
  • 格式为 的常量#constant,其中#constant可以是:
    • 通过将 32 位字中的 8 位值左移任意位数可以生成的任何常量
    • 任何形式的常数0x00XY00XY
    • 任何形式的常数0xXY00XY00
    • 任何形式的常数0xXYXYXYXY

因此,在您的情况下,r0, lsl #3是指令的第二个操作数add,因此移位是在添加之前执行的。

有关详细信息,请参阅ARM 开发人员文档