ARM处理器9种基本寻址方式

发布者:龙爱泉也最新更新时间:2016-04-20 来源: eefocus关键字:ARM  处理器  寻址方式 手机看文章 扫描二维码
随时随地手机看文章
基本寻址方式

寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,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


关键字:ARM  处理器  寻址方式 引用地址:ARM处理器9种基本寻址方式

上一篇:ARM标准汇编与GNU汇编
下一篇:基于S3C2440的u-boot的移植

推荐阅读最新更新时间:2024-03-16 14:51

英特尔安腾高级设计师变节 带8同事投靠AMD
  【赛迪网讯】3月31日消息 有媒体报道称AMD已从竞争对手英特尔那里聘走了安腾处理器高级设计师塞缪尔·纳夫齐格(Samuel Naffziger)和他的八位同事。纳夫齐格2005年有惠普跳槽至英特尔,在英特尔呆的时间还不到一年。   据Betanews网站报道,AMD周三证实了这一消息,并表示纳夫齐格将在AMD担任高级技术人员,从事芯片设计方面的工作。不过,AMD不愿意披露纳夫齐格和他的八位同事的具体   工作。而英特尔方面对这一损失似乎并不十分介意。纳夫齐格在好几款芯片开发中扮演了关键角色,其中就包括“McKinley”和“Montecito”微处理器。   据悉,纳夫齐格在2月底或3月初就加盟了AMD,并将帮助AMD
[焦点新闻]
Globalfoundries可开始为AMD代工GPU及主机处理器
Globalfoundries(格罗方德,简称GF)是从AMD原来的晶圆厂业务分离出来的公司,结交的是中东石油富豪,并且成为仅次于TSMC的全球 第二大晶圆代工公司。不过对AMD来说,GF是离不开但又有点无奈的合作伙伴,GF之前在代工生产上磕磕绊绊,AMD是深受其害。不过现在来看GF最近变 得靠谱多了,AMD官方证实GF不仅可以为他们代工CPU和APU产品,还能代工GPU和主机处理器了。 传统上AMD的CPU及APU才交给GF代工,FX及目前的APU分别使用32nm SOI和28nm SHP工艺,而GPU、主机处理器都是交给TSMC的28nm工艺代工的。现在的情况有所改变了,AMD CFO Devinder Kumar在
[单片机]
苹果A12Z处理器:100亿个晶体管,五万亿次运算,强大至极
最近发布的iPad Pro 2020款配备了一颗特殊的A12Z处理器,这也是苹果第一次使用“Z”字母作为处理器型号的后缀,那么它和上代iPad Pro使用的A12X有什么不同呢?A12X处理器采用台积电7nm工艺制造,拥有多达100亿个晶体管,集成八核心CPU、七核心GPU、神经网络引擎,每秒运算高达五万亿次,还支持先进的机器学习。 A12Z其实在芯片层面和A12X是一模一样的,唯一主要区别就是开启了隐藏的第八个GPU核心,也就是拥有八核心CPU、八核心GPU,图形性能因此有所提升。 到现在,我们才终于知道A12X为什么会是奇怪的七个GPU核心,原来是隐藏了一个,可能是为了提高良品率和产能,也可能是故意留后手,这种做
[嵌入式]
苹果A12Z<font color='red'>处理器</font>:100亿个晶体管,五万亿次运算,强大至极
痞子衡嵌入式:ARM Cortex-M调试那些事(1)- 4线协议标准(JTAG)
  在结束 《ARM Cortex-M文件那些事》 系列文章之后,痞子衡休整了一小段时间,但是讲课的心完全停不下来啊,所以忍不住新开了一个系列文章,叫《ARM Cortex-M调试那些事》,本文是这个系列文章的第一篇,欢迎各位嵌入式朋友前来围观捧场~~~   嵌入式开发中,大家免不了需要仿真调试代码,尤其是当应用工程功能逻辑复杂到一定程度时,免不了在写代码时会引入一些逻辑bug,仅靠代码审查有时候并不一定能排除所有bug,所以在线调试便成为排除bug最有效直接的方式,今天我们要聊的是调试里最基础的东西,即接口标准。ARM内核原生支持2种业界通用的接口标准,分别是JTAG和SWD。本节课痞子衡先给大家详细讲讲JTAG接口。 一、J
[单片机]
痞子衡嵌入式:<font color='red'>ARM</font> Cortex-M调试那些事(1)- 4线协议标准(JTAG)
OK6410A 开发板 (八) 118 linux-5.11 OK6410A arm异常原因及linux应用场景及结果
异常之后,会返回吗? 应用程序会被杀掉吗?内核会崩溃吗? gic 还会一直中断吗? .section .vectors, ax , %progbits .L__vectors_start: W(b) vector_rst W(b) vector_und W(ldr) pc, .L__vectors_start + 0x1000 W(b) vector_pabt W(b) vector_dabt W(b) vector_addrexcptn W(b) vector_irq W(b) vector_fiq reset 异常 产生根本原因 通过管脚或寄存器访问对 c
[单片机]
一种改进的Wallace树型乘法器的设计
引言   在微处理器芯片中,乘法器是进行数字信号处理的核心,同时也是微处理器中进行数据处理的关键部件。乘法器完成一次操作的周期基本上决定了微处理器的主频。乘法器的速度和面积优化对于整个CPU的性能来说是非常重要的。为了加快乘法器的执行速度,减少乘法器的面积,有必要对乘法器的算法、结构及电路的具体实现做深入的研究。 基4Booth算法与乘法器的一般结构   乘法器工作的基本原理是首先生成部分积,再将这些部分积相加得到乘积。在目前的乘法器设计中,基4Booth算法是部分积生成过程中普遍采用的算法。对于N位有符号数乘法A×B来说,常规的乘法运算会产生N个部分积。如果对乘数B进行基4Booth编码,每次需考虑3位:相邻高位、本位和相
[模拟电子]
ARM Cortex-R52专属汽车安全管理程序面世
ARM表示OpenSynergy公司正在为其最先进的实时安全处理器ARM® Cortex®-R52 开发业界第一款软件管理程序。该管理程序可将任何基于Cortex-R52的芯片变为虚拟机,并能同时执行不同的软件任务。针对诸如无人驾驶和工业控制系统等设备中芯片不断提升的复杂性,该方法可以将安全性至关重要的功能与无需严格控制的功能相隔离。此外,它能够将应用程序整合到更少的电子控制单元(ECU),以便管理复杂性并降低成本。 ARM嵌入式营销副总裁Richard York表示:“面向大众市场的无人汽车将被赋予大幅增强的ECU计算能力和安全管理更复杂软件栈的能力。为此,Cortex-R52应运而生,借助管理程序实现软件隔离,从而保护重要
[汽车电子]
基于iMX8处理器的SGTL5000音频接口设计
Apalis iMX8 计算机模块的数字音频接口 SAI(Synchronous Audio Interface)可以配置为 AC97、I2S格式,用于连接外部音频编解码器。文章接下来将介绍在 Linux BSP v6 上如何扩展第二路 SGTL5000。 iMX8 处理器具有多路 SAI 通道,SAI1 已经被模块片上的 SGTL5000 使用,SAI0 通道引出到模块金手指上,并且是兼容 Apalis 标准数字音频接口,该通道在基于其他 CPU 的 Apalis 模块也可以直接使用。因此,我们选择 SAI0 扩展外部 SGTL5000。 SGTL5000 面向 iMX8 处理器的接口主要是 I2S 和时钟信号。 A
[嵌入式]
基于iMX8<font color='red'>处理器</font>的SGTL5000音频接口设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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