ARM-V7-A ADD指令结合LSL

ARM-V7-A ADD instruction combined with LSL

add r1, r1, r0, lsl #3

我不确定这条指令执行的操作。 是否表示:

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

提前致谢。

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

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

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

所以在你的例子中,r0, lsl #3add 指令的第二个操作数,因此移位在加法之前执行。

有关详细信息,请参阅 ARM developer documentation