EDA365电子论坛网

标题: ARM寻址方式——寄存器寻址 [打印本页]

作者: wu68aq    时间: 2016-10-22 15:18
标题: ARM寻址方式——寄存器寻址
寄存器寻址利用寄存器中的数值作为操作数,指令中地址码给出的是寄存器编号。例如:
. }0 M7 E. q, @+ sADD              R0,R1,R2                       ;R0<-R1+R2
$ \) y2 e. Z( r# m, Y本指令将2个寄存器的内容相加,结果放入第3个寄存器R0中。必须注意写操作数的顺序:第1个事结果寄存器,然后是第1操作数寄存器,最后是第2操作数寄存器。. G$ ]5 n6 J0 C
1.
1 o# Y8 J' G6 |* n5 h$ m第2操作数为寄存器型的移位操作
4 u& c4 K0 D; \; Y+ A在ARM指令的数据处理指令中参与操作的第2操作数为寄存器型时,若在执行寄存器寻址操作,则可选择是否对第2操作数进行移位,即“Rm,{<shift>}”,其中Rm称为第2操作数寄存器,<shift>用来指定移位类型和移位位数。移位位数可以是5位立即数或寄存器。在指令执行时,将移位后的内容作为第2操作数参与运算。需要注意的是,第2操作数必须是寄存器,而且指令执行完毕后第2操作数寄存器的内容不变;对于第2操作数不是寄存器的情况,则不允许有移位操作。例如:3 I5 G9 t$ l: t5 I6 f8 Z# P
ADD              R3,R2,R1,LSR      #2    ;R3<-R2+R1÷4
2 O1 ~$ V2 r+ H+ J$ _" ?8 M寄存器R1的内容逻辑右移2位,再与寄存器R2的内容相加,结果放在R3中。指令执行结束后,第2操作数寄存器R1的内容不变,参与操作的第二操作数为R1左移2位的结果。- K* N( W8 e/ ?( G; l/ _7 P* L
2.
4 ~& s! A- M0 _9 ?: q6 B! Z第2操作数移位方式2 ?5 g) [/ u7 A7 D9 j- Q/ t- v
ARM可采用的移位操作有:/ a' @( d$ e9 ^! {! U) a( h
LSL        逻辑左移。空出的最低有效位用0填充。- V5 z% |4 V5 J
LSR        逻辑右移。空出的最高有效位用0填充。! z( Q0 o; q7 x* O. f4 Y
ASL        算数左移。由于左移空出的有效位用0填充,因此它与LSL同义! |9 X& P5 K9 b* T
ASR              算数右移。算数移位的对象是有符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,则空出的最高有效位用0填充;如果是负数,则用1填充。7 X  }$ Y" @1 B- }, }
ROR       循环右移。移出的字的最低有效位依次填入空出的 最高有效位。! ?4 _3 ^% w" s+ y" S
RRX       带扩展的循环右移。将寄存器的内容循环右移1位,空位用原来的C标志位填充。只有当移位的类型为RRX时,才无须指定移位位数。
' O) }) i+ \- C5 n/ @1 b: @这些移位操作如图所示。8 U" r. R* M9 C' I4 Q
3.5 d5 M2 q2 `9 M7 C
第2操作数的移位位数
  u$ K% Y5 V7 w( ]; J移位位数可用立即数方式或寄存器方式给出。例如,下面2条指令分别是以立即数和寄存器方式给出了移位位数:
4 ]# ^% R1 d) J; i7 A5 PADD       R3,R2,R1,LSR      #2           ;R3<-R2+R1÷46 A+ H) {) u& r+ c! q. |# C
ADD       R3,R2,R1,LSR      R4          ;R3<-R2+R1÷
9 Y4 p* O" Q& _: j; f& p8 D% D6 q9 A寄存器R1的内容分别是逻辑右移2位、R4位,再与寄存器R2的内容相加,结果放入R3中。
作者: yhg-lee    时间: 2016-10-24 13:39
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈
# _. Q( i1 w! {( Q+ z. z$ v
作者: Hh0203    时间: 2016-10-25 14:36
学习中,谢谢分享# P+ E/ [+ ^. o' N- ?





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2