ARM Cortex-M0 指令集---数据操作指令-移位指令(7)

 文章目录
概要

下表为移位指令的汇编程序和一条指令所需要的周期数:

序号描述汇编程序所需要的机器周期
1Logical shift left by immediate

LSLS Rd,Rm,#<shift1>

1
2Logical shift left by registerLSLS Rd,Rd,Rs1
3Logical shift right by immediateLSRS Rd,Rm,#<shift2>1
4Logical shift right by registerLSRS Rd,Rd,Rs1
5Arithmetic shift right ASRS Rd,Rm,#<shift3>1
6Arithmetic shift right by registerASRS Rd,Rd,Rs1
7Rotate right by register RORS Rd,Rd,Rs1

注:1、所有指令的Rd、Rs和Rm只能是R0-R7寄存器中的一个

       2、#<shift>移位的长度,ASR的长度取值1-32,LSL的长度取值0-31,LSR的长度1-32

       3、逻辑右移和算数右移的区别:逻辑右移不考虑符号位,左边补零;算数右移需要考虑符号位,若符号位为1,则左边补1,否则补0

举例说明

1、LSLS Rd,Rm,#<shift1>  将寄存器 Rm 中的数据向左移动立即数#<shift1>,移位的结果保存在寄存器 Rd 中,即:Rd=Rm<<#shift1。在左移过程中,最后移出去的位保存在寄存器 APSR的C标志中,并更新N和Z标志。

MOVS R1,#0X3
LSLS R0,R1,#31

仿真如下,一个时钟周期后,将0X3左移31位复制到寄存器R0中,此时N、C标志位置位

2、LSLS Rd,Rd,Rs  将寄存器 Rd 中的数据向左移动寄存器Rs,移位的结果保存在寄存器 Rd 中,即:Rd=Rd<<Rs。在左移过程中,最后移出去的位保存在寄存器 APSR 的C标志中,并更新 N 和Z标志

MOVS R1,#0X3
MOVS R2,#0X3
LSLS R1,R1,R2

仿真如下,一个时钟周期后,将0X3左移3位复制到寄存器R1中

3、LSRS Rd,Rm,#<shift2> 将寄存器 Rm 中的数据向右移动立即数#<shift2>,移位的结果保存在寄存器 Rd 中,即:Rd=Rm>>#shift2。在右移过程中,最后移出去的位保存在寄存器 APSR的C标志中,并更新N和Z标志

MOVS R1,#0X3
LSRS R0,R1,#2

仿真如下,一个时钟周期后,将0X3右移2位复制到寄存器R0中,此时Z、C标志位置位

4、LSRS Rd,Rd,Rs 将寄存器 Rd 中的数据向右移动 Rs 所指定的次数移位的,结果保存在寄存器 Rd 中,即:Rd=Rd>>Rs。在右移过程中,最后移出去的位保存在寄存器 APSR 的C标志中,并更新 N 和Z标志

MOVS R1,#0X12
MOVS R2,#0X3
LSRS R1,R1,R2

仿真如下,一个时钟周期后,将0X12右移3位复制到寄存器R1中

5、ASRS Rd,Rm,#<shift3> 将寄存器 Rm 中的数据算术右移立即数#<shift3>,移位的结果保存在寄存器 Rd 中,即:Rd=Rm>>#shift3。在右移过程中,最后移出去的位保存在寄存器 APSR的C标志中,并更新N和Z标志

MOVS R1,#0X1
LSLS R0,R1,#31
LSRS R0,R0,R1    ;逻辑右移
LSLS R0,R1,#31
ASRS R0,R0,R1    ;算术右移

仿真如下,0X80000000逻辑右移的结果为0X40000000,0X80000000算术右移的结果为0XC0000000

6、ASRS Rd,Rd,Rs  将寄存器 Rd 中的数据算术右移 Rs 所指定的次数移位的,结果保存在寄存器 Rd 中,即:Rd=Rd>>Rs。在右移过程中,最后移出去的位保存在寄存器 APSR 的C标志中,并更新 N 和Z标志

MOVS R1,#0X3
MOVS R2,#0X1
LSLS R1,R1,R2

仿真如下,0X3算术右移1位得到0X1,此时C(进位标志)置1

7、RORS Rd,Rd,Rs  保存在寄存器 Rd 中的数据向右循环移动 Rm 所指定的次数,移位的结果保存在寄存器 Rd中。在循环右移过程中,最后移出去的位保存在寄存器 APSR的C标志中,并更新N和Z标志

MOVS R1,#0X3
MOVS R2,#0X1
RORS R1,R1,R2

仿真如下:0X3循环右移1位,最低位1移动到最高位,得到结果0X80000001

  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨鱼yy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值