马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在Thumb指令集中,移位和循环移位作为独立的指令,对寄存器的内容进行移位和循环移位操作。这些指令可使用寄存器中的值或立即数来表示移位量。 格式 op Rd,Rs op Rd,Rm,#expr 其中,op是下列情况之一: ASP算数右移,将寄存器中的内容看作补码形式的有符号整数。将符号位拷贝到空出的位。 LSL逻辑左移,空出的位用0填充。 LSR逻辑右移,空出的位用0填充。 ROR循环右移,将寄存器右端移出的位循环移回到左端。注意,ROR仅能与寄存器控制的移位一起使用,也即它只能用第一种格式。 Rd 目的寄存器,它也是第1操作数寄存器。Rd必须在R0~R7范围内。 Rs 包含移位量的寄存器,Rs必须在R0~R7范围内。 Rm 存放源操作数的寄存器,Rm必须在R0~R7范围内。 expr 立即数移位量。它是一个取值为整数的表达式。整数的范围如下:若op是LSL,则为0~31;其他情况则是1~32. 用法 对于寄存器控制移位的指令,也即是寄存器存放移位位数,这些指令从Rd中取值,并对其进行移位,结果放回Rd。只有Rs的最低有效字节可用作移位量。 对于除ROR以外的所有指令,若移位量为32,则Rd清0,最后一处的位保留在标志C中,并根据结果影响N、Z标志位。若移位量大于32,则Rd和标志C均被清0,并根据结果影响N、Z标志位。 对于ROR指令,若移位量为32,则Rd不变且不影响标志位,若移位量大于或小于32时,则最后移出的位都将存入到C中,并根据结果影响N、Z标志位。 对于立即数移位的指令,指令从Rm取指,并对其进行移位,结果放到Rd中。 注意:这些指令根据结果更新标志N和Z,且不影响标志V。对于标志C,若移位量是0,则不受影响;若移位量不是0且移位量在允许的范围中,则C包含源寄存器的最后移出的位。 例子 ASR R3,R5 ;将R3中的值算数右移[R5]次后的值再放入R3 LSR R0,R2,#6 ;将R2中的值逻辑右移6次后的值放入R0 LSR R5,R5,zyb ;zyb必须在汇编时取指为1~32范围内的整数 LSL R0,R4,#0 ;将R4的内容放到R0中,除了不影响标志C和V外,同“MOV R0,R4” ROR R2,R3 ;让R2中的值循环右移[R3]次后再存入R2中 凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网 |