问题描述
add r1,r1,r0,lsl #3
我不确定用这条指令执行的操作。 意思是:
- 将r0和r1相加,取结果并执行3位左移,然后将结果存入r1 或
- 将 r1 和(r0 左移 3 位)相加,然后将结果保存在 r1 中
提前致谢。
解决方法
Thumb 和 Thumb-2 指令集中的大多数算术和逻辑指令都带有三个参数。第一个是目标寄存器,第二个是第一操作数(也是一个寄存器),第三个是灵活的第二操作数。 (如果目标寄存器被省略,则第一个操作数用作目标。)
几乎在所有情况下,灵活的第二个操作数可以是:
- 一个寄存器
- 应用了移位或轮换的寄存器,其中可用的移位是
-
ASR #n
(算术右移) -
LSL #n
(逻辑左移) -
LSR #n
(逻辑右移) -
ROR #n
(向右旋转) -
RRX
(通过进位向右循环一位)
-
- 格式为
#constant
的常量,其中#constant
可以是:- 可以通过将 8 位值左移 32 位字内的任意位数而产生的任何常量
- 任何
0x00XY00XY
形式的常量 - 任何
0xXY00XY00
形式的常量 - 任何
0xXYXYXYXY
形式的常量
因此,在您的情况下,r0,lsl #3
是 add
指令的第二个操作数,因此在添加之前执行移位。
有关详细信息,请参阅 ARM developer documentation。