凌阳教育的个人空间 https://blog.eetop.cn/204849 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

ARM寻址方式——寄存器寻址与间接寄存器寻址

已有 807 次阅读| 2015-12-24 16:03 |个人分类:linux技术

寄存器寻址利用寄存器中的数值作为操作数,指令中地址码给出的是寄存器编号。例如:

ADD              R0R1R2                       ;R0<-R1+R2

本指令将2个寄存器的内容相加,结果放入第3个寄存器R0中。必须注意写操作数的顺序:第1个事结果寄存器,然后是第1操作数寄存器,最后是第2操作数寄存器。

1.       2操作数为寄存器型的移位操作

ARM指令的数据处理指令中参与操作的第2操作数为寄存器型时,若在执行寄存器寻址操作,则可选择是否对第2操作数进行移位,即“Rm{<shift>}”,其中Rm称为第2操作数寄存器,<shift>用来指定移位类型和移位位数。移位位数可以是5位立即数或寄存器。在指令执行时,将移位后的内容作为第2操作数参与运算。需要注意的是,第2操作数必须是寄存器,而且指令执行完毕后第2操作数寄存器的内容不变;对于第2操作数不是寄存器的情况,则不允许有移位操作。例如:

ADD              R3R2R1LSR      #2    ;R3<-R2+R1÷4

寄存器R1的内容逻辑右移2位,再与寄存器R2的内容相加,结果放在R3中。指令执行结束后,第2操作数寄存器R1的内容不变,参与操作的第二操作数为R1左移2位的结果。

2.       2操作数移位方式

ARM可采用的移位操作有:

LSL        逻辑左移。空出的最低有效位用0填充。

LSR        逻辑右移。空出的最高有效位用0填充。

ASL        算数左移。由于左移空出的有效位用0填充,因此它与LSL同义

ASR              算数右移。算数移位的对象是有符数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,则空出的最高有效位用0填充;如果是负数,则用1填充。

ROR       循环右移。移出的字的最低有效位依次填入空出的 最高有效位。

RRX       带扩展的循环右移。将寄存器的内容循环右移1位,空位用原来的C标志位填充。只有当移位的类型为RRX时,才无须指定移位位数。

这些移位操作如图所示。

3.       2操作数的移位位数

移位位数可用立即数方式或寄存器方式给出。例如,下面2条指令分别是以立即数和寄存器方式给出了移位位数:

ADD       R3R2R1LSR      #2           ;R3<-R2+R1÷4

ADD       R3R2R1LSR      R4          ;R3<-R2+R1÷

寄存器R1的内容分别是逻辑右移2位、R4位,再与寄存器R2的内容相加,结果放入R3中。

寄存器间接寻址

ARM的数据指令都是基于寄存器间接寻址,即通过Load/Store完成对数据的传送操作。寄存器间接寻址利用一个寄存器的值(这个寄存器相当于指针的作用,在基址加变址的寻址方式中,它作为基址寄存器来存放基址地址)作为存储器地址,在制定的寄存器中存放有效地址,而操作数则存放在存储单元中。

例如:

LDR       R0.[R1]          ;R0<-[R1]

STR        R0,[R1]          ;[R1]<-R0

1条指令将寄存器R1指向的地址寄存器单元的内容加载到寄存器R0中。第2条指令将寄存器R0的内容存储到寄存器R1指向的地址寄存器单元中。

凌阳教育,专注嵌入式人才培养13年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 1

    获赞
  • 3

    评论
  • 3815

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 03:29 , Processed in 0.013140 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部