Board logo

标题: ARM指令集-ARM寻址方式(1) [打印本页]

作者: look_w    时间: 2017-9-24 15:30     标题: ARM指令集-ARM寻址方式(1)

3.2  ARM指令的寻址方式所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前ARM指令系统支持如下几种常见的寻址方式。
3.2.1  立即寻址立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:
ADD R0R0,#1R0R01
ADD R0R0,#0x3fR0R00x3f
在以上两条指令中,第二操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”,以二进制表示的立即数,要求在“#”后加上“%”。
当立即数大于第二操作数的表示范围时,通常用以下伪指令实现:
LDR R0,=#0xffff0000
3.2.2  寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令:
ADD R0R1R2R0R1R2
该指令的执行效果是将寄存器R1R2的内容相加,其结果存放在寄存器R0中。
3.2.3  寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:
ADD R0R1[R2]R0R1[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[R14]
LDR R0[R1,#4]R0[R14]R1R14
LDR R0[R1],#4R0[R1]R1R14
LDR R0[R1R2]R0[R1R2]
在第一条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中。
在第二条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。
在第三条指令中,以寄存器R1的内容作为操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。
在第四条指令中,将寄存器R1的内容加上寄存器R2的内容形成操作数的有效地址,从而取得操作数存入寄存器R0中。
3.2.5  多寄存器寻址多寄存器寻址是ARM处理器特有的一种寻址方式。由于ARM内核有较多的通用寄存器,采用多寄存器寻址方式,一条指令可以一次完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值。例如以下指令:
LDMIA R0{R1R2R3R4}R1[R0]
R2[R04]
R3[R08]
R4[R012]
该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加,因此,指令可将连续存储单元的值传送到R1R4
多个连续的寄存器可以用-”符号连接;不连续的寄存器用“,”分隔书写,如上例可写成:
LDMIA R0{R1-R4}
LDMIA R0{R1-R3R4}




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0