ADD R1,R2,R2, LSL #1
=> R1= R2+R2<<1 = R2+R2*2 =R2*3;
是的,左移2位就是乘2*2。
逻辑左移是从2进制来看,比如结尾是01,左移变10,1变成了2。
对比十进制来看,十进制的一个数左移一位,后面加了个0,相当于乘10。
二进制左移也是后面添0,只不过是最高位移到进位标志里,结果就是乘以2。
扩展资料:
128 位结果: 寄存器 0、1、2、和 3
第一个 128 位数: 寄存器 4、5、6、和 7
第二个 128 位数: 寄存器 8、9、10、和 11。
ADDS R0, R4, R8 ; 加低端的字
ADCS R1, R5, R9 ; 加下一个字,带进位
ADCS R2, R6, R10 ; 加第三个字,带进位
ADCS R3, R7, R11 ; 加高端的字,带进位
注意: 如果如果要做这样的加法,不要忘记设置 S 后缀来更改进位标志。
参考资料来源:百度百科-ARM指令集
ADD R1,R2,R2, LSL #1
=> R1= R2+R2<<1 = R2+R2*2 =R2*3;