标题:
ARM指令集-ARM寻址方式(1)
[打印本页]
作者:
look_w
时间:
2017-9-24 15:30
标题:
ARM指令集-ARM寻址方式(1)
3.2 ARM
指令的寻址方式
所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前
ARM
指令系统支持如下几种常见的寻址方式。
3.2.1
立即寻址
立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:
ADD R0
,
R0
,#
1
;
R0
←
R0
+
1
ADD R0
,
R0
,#
0x3f
;
R0
←
R0
+
0x3f
在以上两条指令中,第二操作数即为立即数,要求以
“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“
0x
”,以二进制表示的立即数,要求在“#”后加上“
%
”。
当立即数大于第二操作数的表示范围时,通常用以下伪指令实现:
LDR R0,=#0xffff0000
3.2.2
寄存器寻址
寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令:
ADD R0
,
R1
,
R2
;
R0
←
R1
+
R2
该指令的执行效果是将寄存器
R1
和
R2
的内容相加,其结果存放在寄存器
R0
中。
3.2.3
寄存器间接寻址
寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:
ADD R0
,
R1
,
[R2]
;
R0
←
R1
+
[R2]
LDR R0
,
[R1]
;
R0
←
[R1]
STR R0
,
[R1]
;
[R1]
←
R0
在第一条指令中,以寄存器
R2
的值作为操作数的地址,在存储器中取得一个操作数后与
R1
相加,结果存入寄存器
R0
中。
第二条指令将以
R1
的值为地址的存储器中的数据传送到
R0
中。
第三条指令将
R0
的值传送到以
R1
的值为地址的存储器中。
3.2.4
基址变址寻址
基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令常见有以下几种形式,如下所示:
LDR R0
,
[R1
,#
4]
;
R0
←
[R1
+
4]
LDR R0
,
[R1
,#
4]
!
;
R0
←
[R1
+
4]
、
R1
←
R1
+
4
LDR R0
,
[R1]
,#
4
;
R0
←
[R1]
、
R1
←
R1
+
4
LDR R0
,
[R1
,
R2]
;
R0
←
[R1
+
R2]
在第一条指令中,将寄存器
R1
的内容加上
4
形成操作数的有效地址,从而取得操作数存入寄存器
R0
中。
在第二条指令中,将寄存器
R1
的内容加上
4
形成操作数的有效地址,从而取得操作数存入寄存器
R0
中,然后,
R1
的内容自增
4
个字节。
在第三条指令中,以寄存器
R1
的内容作为操作数的有效地址,从而取得操作数存入寄存器
R0
中,然后,
R1
的内容自增
4
个字节。
在第四条指令中,将寄存器
R1
的内容加上寄存器
R2
的内容形成操作数的有效地址,从而取得操作数存入寄存器
R0
中。
3.2.5
多寄存器寻址
多寄存器寻址是
ARM
处理器特有的一种寻址方式。由于
ARM
内核有较多的通用寄存器,采用多寄存器寻址方式,一条指令可以一次完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多
16
个通用寄存器的值。例如以下指令:
LDMIA R0
,
{R1
,
R2
,
R3
,
R4}
;
R1
←
[R0]
;
R2
←
[R0
+
4]
;
R3
←
[R0
+
8]
;
R4
←
[R0
+
12]
该指令的后缀
IA
表示在每次执行完加载
/
存储操作后,
R0
按字长度增加,因此,指令可将连续存储单元的值传送到
R1
~
R4
。
多个连续的寄存器可以用
“
-
”符号连接;不连续的寄存器用“,”分隔书写,如上例可写成:
LDMIA R0
,
{R1-R4}
LDMIA R0
,
{R1-R3
,
R4}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0