5) RRX带扩展的循环右移
寻址格式:
完成对通用寄存器中的内容进行带扩展的循环右移的操作,按操作数所指定的数量向右循环移位,左端用进位标志位C来填充。其中,操作数可以是通用寄存器,也可以是立即数(0~31)。如:
- MOV R0, R1, RRX #2 ;将R1中的内容进行带扩展的循环右移两位后传送到R0中。
举例
- ; 第二操作数 寄存器移位操作, 5种移位方式, 9种语法
- ;逻辑左移
- mov r0, #0x1
- mov r1, r0, lsl #1 ; 移位位数1-31肯定合法
- mov r0, #0x2
- mov r1, r0, lsr #1 ; 逻辑右移
- mov r0, #0xffffffff
- mov r1, r0, asr #1 ; 算术右移符号位不变, 次高位补符号位
- mov r0, #0x7fffffff
- mov r1, r0, asr #1
- mov r0, #0x7fffffff
- mov r1, r0, ror #1 ; 循环右移
- mov r0, #0xffffffff
- mov r1, r0, rrx ; 唯一不需要指定循环位数的移位方式
- ;带扩展的循环右移
- ;C标志位进入最高位,最低位进入C 标志位
- ; 移位值可以是另一个寄存器的值低5bit, 写法如下
- mov r2, #1
- mov r0, #0x1
- mov r1, r0, lsl r2 ; 移位位数1-31肯定合法
- mov r0, #0xffffffff
- mov r1, r0, asr r2 ; 算术右移符号位不变, 次高位补符号位
- mov r0, #0x7fffffff
- mov r1, r0, asr r2
- mov r0, #0x7fffffff
- mov r1, r0, ror r2 ; 循环右移
上述结果不再截图,读者可以自行拷贝到keil中进行debug,查看寄存器中值以及符号位的变化。
|