【问题标题】:ARM-V7-A ADD instruction combined with LSLARM-V7-A ADD指令结合LSL
【发布时间】:2021-07-02 12:06:56
【问题描述】:
add r1, r1, r0, lsl #3

我不确定使用此指令执行的操作。 是什么意思:

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

提前致谢。

【问题讨论】:

  • 这意味着,将r0中的值移动3,然后将r1中的值添加到r0 << 3并将其放入r1。或r1 = r1 + (r0 << 3)
  • 谢谢,一清二楚!

标签: arm armv7


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2023-03-11
    • 2019-04-30
    • 2011-09-13
    • 2015-05-19
    • 2012-07-14
    相关资源
    最近更新 更多