在介绍循环右移寻址之前,需要先聊一下扩展循环右移寻址RRX,因为后面有用的到的地方。
扩展的循环右移寻址:<Rm>, RRX
指令编码格式:
指令操作数<shifter_operand>为寄存器Rm的数值右移一位,并用CPSR中的C位标志填补空出的位。CPSR中的C位标志被移出的位代替。
注:当R15用作第一个源操作数或第二个操作数Rm时,操作数即为当前指令地址加8。
循环右移寻址:<Rm>,ROR #<shift_imm>
指令编码格式:
指令操作数<shifter_operand>为寄存器Rm循环右移shift_imm位。shift_imm位5位,范围0~31位。在进行移位操作时,从寄存器中移出的位,又插入到寄存器左端空出的位。
当shift_imm = 0时,将执行上文中介绍的RRX寻址操作。
当shift_imm != 0时,操作数<shifter_operand>为寄存器Rm的数值循环右移shift_imm位,循环器的进位值为最后被移除的位。
注:当R15用作第一个源操作数或第二个操作数Rm时,操作数即为当前指令地址加8。