逻辑左移: 可以使寄存器也可以是 立即数
LSL : 字母缩写
举例:
MOV R0,R1 ,LSL #2
向左移位后,右面填0补充
逻辑右移: 可以使寄存器也可以是 立即数
LSR : 字母缩写
举例:
MOV R0,R1 ,LSR #2
向右移位后,左面填0补充
算数左移: 可以使寄存器也可以是 立即数
ASL : 字母缩写
举例:
MOV R0,R1 ,ASL #2
向左移位后,右面填0补充
总结; 逻辑左移 与算数左移是一样的。
算数右移: 可以使寄存器也可以是 立即数
ASR : 字母缩写
举例:
MOV R0,R1 ,ASR #2
向右移位后,左面填充 第31位的值 ,如果这个数是一个负数的话,那么就用1 来补充。
循环右移: 可以使寄存器也可以是立即数
ROR:字母缩写。
举例:
Mov R0,R1,ROR #2
带扩展的循环右移: 可以使寄存器也可以是立即数
RRX: 字母缩写
举例:
MOV,R0,R1,RRX #2
最高位要补 CPSR的C位。
网上的截图:
实际上不是很理解这个C位的作用。
注意: 在移位的过程中,移动的个数也可以是 寄存器,但是只是寄存器的低5个bit有效。
举例;
MOV,R2 #0xffffffff
MOV,R0,LSL,R2
最终移动的是 R2 的数值的低五个bit (共6个bit), 也就是移动了 31位。