ARM指令的寻址方式

发布者:Tianran2021最新更新时间:2016-12-13 来源: eefocus关键字:ARM指令  寻址方式 手机看文章 扫描二维码
随时随地手机看文章

所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前 ARM 指令系统支持如下几种常见的寻址方式。

立即寻址

立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:

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

ADD R0 , R0 ,# 0x3f ; R0 ←R0+0x3f

在以上两条指令中,第二个源操作数即为立即数,要求以 “ # ” 为前缀,对于以十六进制表示的立即数,还要求在 “ # ” 后加上 “ 0x ” 或 “ & ” 。

寄存器寻址

寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令:

ADD R0 , R1 , R2 ; R0 ←R1+R2

该指令的执行效果是将寄存器 R1 和 R2 的内容相加,其结果存放在寄存器 R0 中。

寄存器间接寻址

寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:

ADD R0 , R1 , [R2] ; R0 ←R1+[R2]

LDR R0,[R1] ; R0 ←[R1]

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

在第一条指令中,以寄存器 R2 的值作为操作数的地址,在存储器中取得一个操作数后与 R1 相加,结果存入寄存器 R0 中。

第二条指令将以 R1 的值为地址的存储器中的数据传送到 R0 中。

第三条指令将 R0 的值传送到以 R1 的值为地址的存储器中。

基址变址寻址

基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令常见有以下几种形式,如下所示:

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 中。

多寄存器寻址

采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多 16 个通用寄存器的值。以下指令:

LDMIA R0 , {R1 , R2 , R3 , R4} ; R1 ←[R0]; R2 ←[R0+4]; R3 ←[R0+8];

                   R4←[R0+12]

该指令的后缀 IA 表示在每次执行完加载 / 存储操作后, R0 按字长度增加,因此,指令可将连续存储单元的值传送到 R1 ~ R4 。

相对寻址

与基址变址寻址方式相类似,相对寻址以程序计数器 PC 的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令 BL 采用了相对寻址方式:

BL NEXT ;跳转到子程序 NEXT 处执行

……

NEXT

……

MOV PC,LR ;从子程序返回

堆栈寻址

堆栈是一种数据结构,按先进后出( First In Last Out , FILO )的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。

当堆栈指针指向最后压入堆栈的数据时,称为满堆栈( Full Stack ),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈( Empty Stack )。

同时,根据堆栈的生成方式,又可以分为递增堆栈( Ascending Stack )和递减堆栈( Decending Stack ),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式, ARM 微处理器支持这四种类型的堆栈工作方式,即:

- 满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。

- 满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。

- 空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。

- 空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。


关键字:ARM指令  寻址方式 引用地址:ARM指令的寻址方式

上一篇:ARM 指令的分类与格式
下一篇:ARM指令集-跳转指令

推荐阅读最新更新时间:2024-03-16 15:25

单片机的指令系统和寻址方式介绍
1、MOVA,#20H 这条指令表示把20H这个数送入累加器A中(一个特殊功能寄存器)。 2、ADDA,70H 这条指令表示把累加器A中的内容(在上例中送入的#20H)和存贮器中地址为70H单元中的内容(也是一个数字),通过算术逻辑单元(英文缩写为ALU)相加,并将结果保留在A中。这里MOV、ADD等称为操作码,而A、#20H、70H等均称为操作数。在汇编语言程序中,操作码通常由英文单词缩写而成,这样有助于记忆,所以又称助记符。如MOV就是英文单词MOVE的缩写,含有搬移的意思;而ADD即为英文单词,其意为相加。因此,对于略懂英语的用户,掌握单片机指令的含意是较为方便的。操作数有多种表示法,如以上的#20H称为立即数,
[单片机]
51单片机直接寻址方式与编程举例
直接寻址方式是指在指令中操作数直接以单元地址的形式给出,也就是在这种寻址方式中,操作数项给出的是参加运算的操作数的地址,而不是操作数。 例如:MOV A,30H 这条指令中操作数就在30H单元中,也就是30H是操作数的地址,并非操作数。 在80C51单片机中,直接地址只能用来表示特殊功能寄存器、内部数据存储器以及位地址空间,具体的说就是: 1、内部数据存储器RAM低128单元。在指令中是以直接单元地址形式给出。 我们知道低128单元的地址是00H-7FH。在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、127位就是以7FH形
[单片机]
ARM指令集-协处理器指令
ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。 ARM 的协处理器指令主要用于 ARM 处理器初始化 ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在 ARM 协处理器的寄存器和 存储器 之间传送数据。 ARM 协处理器指令包括以下 5 条: CDP 协处理器数操作指令 LDC 协处理器数据加载指令 STC 协处理器数据存储指令 MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令 MRC 协处理器寄存器到ARM 处理器寄存器的数据传送
[单片机]
ARM指令集----寻址方式
ARM指令集可以分为跳转指令,数据处理指令,程序状态寄存器传输指令,LOAD/Store指令,协处理器指令和异常中断产生指令6类 ARM指令集的寻址方式   数据处理指令的操作数的寻址方式   字以及无符号字节的Load、Store指令的寻址方式   杂类Laod、Store指令的寻址方式   批量Load、Store指令的寻址方式   协处理器Load、Store指令的寻址方式 数据处理指令的操作数的寻址方式   立即数荀子,每个立即数有由一个8位的参数循环右移 偶数位得到,其中循环移位的位数由一个4位二进制的两倍表示 指令编码格式: 常见的:   MOV R0,#0xFC0 令
[单片机]
七种寻址方式(相对基址加变址寻址方式)
操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则其缺省的段寄存器为SS;否则,其缺省的段寄存器为DS。 指令中给出的8位/16位偏移量用补码表示。在计算有效地址时,如果偏移量是8位,则进行符号扩展成16位。当所得的有效地址超过0FFFFH,则取其64K的模。 例:假设指令:MOV AX, ,在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。问该指令执行后,AX的值是什么? 解:根据相对基址加
[单片机]
七种<font color='red'>寻址</font><font color='red'>方式</font>(相对基址加变址<font color='red'>寻址</font><font color='red'>方式</font>)
ARM指令集----杂项指令
ARM指令集可以分为6类,即是跳转指令,数据处理指令,程序状态传输指令,Load、Store指令,协处理器指令和异常中断指令 跳转指令: 在ARM中有两种方式可以实现程序的跳转,一种是跳转指令,另一种是直接向PC寄存器写入目标地址的值 通过直接向PC寄存器写入目标寄存器的数字可以实现在4GB 地址空间的任意跳转,这种跳转又称为长跳转,如果在残肢令前面使用MOV LR,PC等指令,可以保存返回来的地址值,这样就实现了在4GB空间中的子程序调用 ARM的跳转指令可以从当前指令向前或者是向后的32位的地址进行空间跳转,这类跳转指令有一下4种 B 跳转指令 BL带换回的跳转指令 BLX 带返回的跳转和切换指令 BX 带状态切换的跳
[单片机]
ARM指令集及混合编程
一、ARM指令集 1、跳转指令:B、BL(带返回)、BLX、BX(带状态) 2、数据传送:MOV(通用寄存区)、MVN(按位取反)、CMP(比较结果存在CPSR)、TST(按位置位)、ADD、SUB、AND、ORR、BIC、MUL、 3、访问状态寄存器:MSR、MRS 二、汇编指令集 1、LDR、STR(B) 2、STR、 3、LDM、STM (批处理) 4、swp 5、LSL、ROR 6、SWI、BKPT 三、伪指令 1、GBLA、GBLL、GBLS、LCLA、LCLL、LCLS 、SETA、SETL、SETS、 2、RLIST 3、DCB (分配存储单元) 4、SPA
[单片机]
ARM的寻址方式
目前ARM处理器支持9种寻址方式,分别是立即数寻址、寄存器寻址、寄存器偏移寻址、寄存器间接寻址、基址变址寻址、多寄存器寻址、相对寻址、堆栈寻址和块拷贝寻址。 立即数寻址:操作数直接就在指令中给出 寄存器寻址:操作数放在寄存器中 寄存器间接寻址:寄存器中的数是存放操作数的地址
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved