您的位置 首页 汽车

ARM处理器9种根本寻址方法

基本寻址方式寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,ARM处理器有9种基本寻址方式。1.寄存器寻址操作数…

根本寻址方法

寻址方法是依据指令中给出的地址码字段来完结寻觅实在操作数地址的方法,ARM处理器有9 种根本寻址方法。

1.寄存器寻址

操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。

例如指令:

MOV R1,R2 ;R1←R2

SUB R0,R1,R2 ;R0←R1- R2

2.当即寻址

在当即寻址指令中数据就包含在指令傍边,当即寻址指令的操作码字段后边的地址码部分便是操作数自身,取出指令也就取出了能够当即运用的操作数(也称为当即数)。当即数要以“#”为前缀,表明16进制数值时以“0x”表明。

例如指令:

ADD R0,R0,#1 ;R0←R0 + 1

MOV R0,#0xff00 ;R0←0xff00

3.寄存器移位寻址

寄存器移位寻址是ARM指令集特有的寻址方法。第2个寄存器操作数在与第1个操作数结合之前,先进行移位操作。

例如指令:

MOV R0,R2,LSL #3 ;R2的值左移3位,成果放入R0,即R0=R2 * 8

ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相与操作,成果放入R1

可选用的移位操作如下:

LSL:逻辑左移(Logical Shift Left),寄存器中字的低端空出的位补0。

LSR:逻辑右移(Logical Shift Right),寄存器中字的高端空出的位补0。

ASR:算术右移(Arithmetic Shift Right),移位过程中坚持符号位不变,即假如源操作数为正数,则字的高端空出的位补0,不然补1

ROR:循环右移(Rotate Right),由字的低端移出的位填入字的高端空出的位

RRX:带扩展的循环右移(Rotate Right extended by 1 place),操作数右移一位,高端空出的位用原C 标志值填充。

各移位操作过程如图所示。

4.寄存器直接寻址

指令中的地址码给出的是一个通用寄存器编号,所需求的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针,操作数存放在存储器中。

例如指令 :

LDR R0,[R1] ;R0←[R1](将R1中的数值作为地址,取出此地址中的数据保存在R0中)

STR R0,[R1] ;[R1] ←R0

5.变址寻址

变址寻址是将基址寄存器的内容与指令中给出的偏移量相加,构成操作数的有用地址,变址寻址用于拜访基址邻近的存储单元,常用于查表,数组操作,功用部件寄存器拜访等。

例如指令:

LDR R2,[R3,#4] ;R2←[R3 + 4](将R3中的数值加4作为地

址,取出此地址的数值保存在R2 中)

STR R1,[R0,#-2] ;[R0-2] ← R1(将R0中的数值减2 作为地址,把R1中的内容保存到此地址方位)

6.多寄存器寻址

选用多寄存器寻址方法,一条指令能够完结多个寄存器值的传送,这种寻址方法用一条指令最多能够完结16个寄存器值的传送。

例如指令:

LDMIA R0,{R1,R2,R3,R5}

7. 仓库寻址

仓库是一种数据结构,仓库是特定次序进行存取的存储区,操作次序分为“后进先出”和“先进后出”,仓库寻址时隐含的,它运用一个专门的寄存器(仓库指针)指向一块存储区域(仓库),指针所指向的存储单元便是仓库的栈顶。存储器成长仓库可分为两种:

向上成长:向高地址方向成长,称为递加仓库(Ascending Stack)。

向下成长:向低地址方向成长,称为递减仓库(Decending Stack)。

仓库指针指向最终压入的仓库的有用数据项,称为满仓库(Full Stack);仓库指针指向下一个要放入的空方位,称为空仓库(Empty Stack)。

这样就有四种类型的仓库工作方法,ARM微处理器支撑这四种类型的仓库工作方法,即:

满递加仓库:仓库指针指向最终压入的数据,且由低地址向高地址生成。如指令LDMFA,STMFA 等。

满递减仓库:仓库指针指向最终压入的数据,且由高地址向低地址生成。如指令LDMFD,STMFD 等。

空递加仓库:仓库指针指向下一个即将放入数据的空方位,且由低地址向高地址生成。如指令LDMEA,STMEA 等。

空递减仓库:仓库指针指向下一个即将放入数据的空方位,且由高地址向低地址生成。如指令LDMED,STMED 等。

8.块仿制寻址

块仿制寻址用于把一块从存储器的某一方位仿制到另一方位,是一个多寄存器传送指令。例如指令:

STMIA R0!,{R1-R7} ;将R1~R7的数据保存到存储器中,存储器指针在保存第一个值之后添加,添加方向为向上添加。

STMDA R0!,{R1-R7} ;将R1~R7的数据保存到存储器中,存储器指针在保存第一个值之后添加,添加方向为向下添加。

9.相对寻址

相对寻址是变址寻址的一种变通,由程序计数器PC供给基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有用地址。

例如指令:

BL ROUTE1 ;调用到ROUTE1子程序

BEQ LOOP ;条件跳转到LOOP标号处

LOOP MOV R2,#2

ROUTE1

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/262665.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部