ARM指令寻址方式

合集下载

04.1 ARM指令集

04.1 ARM指令集

Rm[32-shift_imm]的值。举例如下:
MOV MOV R3,#30 R4,R3,LSL #0x12
则寄存器R4的值为0x00780000。
Softeem Consultancy Service
(2)<Rm>,LSL <Rs> 指令的操作数shifter_operand为寄存器Rm的数值逻辑左移一定位数的值, 移位的位数由Rs寄存器的最低8位Rs[7:0]决定。当Rs[7:0]=0时, shifter_operand的值就是Rm的值,循环器的进位值(Carry-out)为CPSR 中的C标志位;当0<Rs[7:0]<32时,shifter_operand的值为Rm中值逻辑 左移Rs[7:0]位后的值,循环器的进位值为Rm寄存器中最后被移出的位
状态寄存器传送指令、Load/Store指令、协处理器指令和 异常产生指令。本章按指令系统的基本分类方法,分三大部
分(即运算、传送和控制)分ultancy Service
目录 寄存器的寻址方式
1 2 3 4 5 6 7 8 9 寄存器寻址 立即寻址 寄存器偏移寻址 寄存器间接寻址 基址寻址 多寄存器寻址 堆栈寻址 块拷贝寻址 相对寻址
Softeem Consultancy Service
(1)<Rm>,LSL #<shift_imm> 指令的操作数shifter_operand为寄存器Rm的数值逻辑左移shift_imm位。 这里shift_imm的范围为0~31。如果shift_imm为0,则shifter_operand的 值就是Rm的值,循环器的进位值(Carry-out)为CPSR中的C标志位; 如果shift_imm不为零,则shifter_operand 的值为Rm中值逻辑左移 shift_imm位后的值,循环器的进位值为Rm寄存器中最后被移出的位

ARM指令大全

ARM指令大全

目录一、跳转指令 (4)1、B指令 (4)2、BL指令 (4)3、BLX指令 (4)4、BX指令 (5)二、数据处理指令 (5)1、MOV指令 (5)2、MVN指令 (5)3、CMP指令 (6)4、CMN指令 (6)5、TST指令 (6)6、TEQ指令 (7)7、ADD指令 (7)8、ADC指令 (7)9、SUB指令 (7)10、~~~~C指令 (8)11、R~~~~指令 (8)12、RSC指令 (8)13、AND指令 (9)14、ORR指令 (9)15、EOR指令 (9)16、BIC指令 (9)三、法指令与乘加指令 (10)1、MUL指令 (10)2、MLA指令 (10)3、SMULL指令 (10)4、SMLAL指令 (11)5、UMULL指令 (11)6、UMLAL指令 (11)四、程序状态寄存器访问指令 (12)1、MRS指令 (12)2、MSR指令 (12)五、加载/存储指令 (12)1、LDR指令 (12)2、LDRB指令 (13)3、LDRH指令 (14)4、STR指令 (14)5、STRB指令 (14)6、STRH指令 (15)六、批量数据加载/存储指令 (15)LDM(或STM)指令 (15)IA (15)IB (15)DA (15)DB (15)FD (15)ED (15)FA (15)EA (15)七、数据交换指令 (16)1、SWP指令 (16)2、SWPB指令 (16)八、移位指令(操作) (16)1、LSL(或ASL) (17)2、LSR (17)3、ASR (17)4、ROR (17)5、RRX (17)九、协处理器指令 (18)1、CDP指令 (18)2、LDC指令 (18)3、STC指令 (18)4、MCR指令 (19)5、MRC指令 (19)十、异常产生指令 (19)1、SWI指令 (19)2、BKPT指令 (20)一、符号定义(Symbol Definition)伪指令 (20)1、GBLA、GBLL和GBLS (20)2、LCLA、LCLL和LCLS (21)3、SETA、SETL和SETS (22)4、RLIST (22)二、数据定义(Data Definition)伪指令 (23)1、DCB (23)2、DCW(或DCWU) (23)3、DCD(或DCDU) (24)4、DCFD(或DCFDU) (24)5、DCFS(或DCFSU) (25)6、DCQ(或DCQU) (25)7、SPACE (25)8、MAP (26)9、FILED (26)三、汇编控制(Assembly Control)伪指令 (27)1、IF、ELSE、ENDIF (27)2、WHILE、WEND (28)3、MACRO、MEND (29)4、MEXIT (29)四、其他常用的伪指令 (30)1、AREA (30)2、ALIGN (31)3、CODE16、CODE32 (31)4、ENTRY (32)5、END (32)6、EQU (33)7、EXPORT(或GLOBAL) (33)8、IMPORT (34)9、EXTERN (35)10、GET(或INCLUDE) (35)11、INCBIN (36)12、RN (36)13、ROUT (37)一、跳转指令跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转:Ⅰ.使用专门的跳转指令。

ARM架构及ARM指令集、Thumb指令集你了解多少?

ARM架构及ARM指令集、Thumb指令集你了解多少?

ARM架构及ARM指令集、Thumb指令集你了解多少?1991 年ARM 公司成⽴于英国剑桥,在成⽴后的那⼏年,ARM业绩平平,⼯程师们也⼈⼼惶惶,害怕随时都会失业。

在这个情况下,ARM 决定改变他们的产品策略——他们不再⽣产芯⽚,转⽽以授权的⽅式,将芯⽚设计⽅案转让给其他公司,即“Partnership”开放模式。

没想到正是这种模式,开创了属于ARM的全新时代。

ARM所采取的是IP(Intellectual Property,知识产权)授权的商业模式,收取⼀次性技术授权费⽤和版税提成。

具体来说,ARM有三种授权⽅式:处理器、POP以及架构授权。

处理器授权是指授权合作⼚商使⽤ARM设计好的处理器,对⽅不能改变原有设计,但可以根据⾃⼰的需要调整产品的频率、功耗等。

POP(processor optimization pack,处理器优化包)授权是处理器授权的⾼级形式, ARM出售优化后的处理器给授权合作⼚商,⽅便其在特定⼯艺下设计、⽣产出性能有保证的处理器。

架构授权是ARM会授权合作⼚商使⽤⾃⼰的架构,⽅便其根据⾃⼰的需要来设计处理器(例如后来⾼通的Krait架构和苹果的Swift架构,就是在取得ARM的授权后设计完成的)。

所以,授权费和版税就成了ARM的主要收⼊来源。

除此之外,就是软件⼯具和技术⽀持服务的收⼊。

⼀、ARM 微处理器的应⽤领域及特点ARM处理器市场覆盖率最⾼、发展趋势⼴阔,基于ARM技术的32位微处理器,市场的占有率⽬前已达到80%。

绝⼤多数IC制造商都推出了⾃⼰的ARM结构芯⽚。

我国的中兴集成电路、⼤唐电讯、华为海思、中芯国际和上海华虹,以及国外的⼀些公司如德州仪器、意法半导体、Philips、Intel、Samsung等都推出了⾃⼰设计的基于ARM核的处理器。

⼯业控制领域:作为32 的RISC 架构,基于ARM 核的微控制器芯⽚不但占据了⾼端微控制器市场的⼤部分市场份额,同时也逐渐向低端微控制器应⽤领域扩展,ARM 微控制器的低功耗、⾼性价⽐,向传统的8 位/16 位微控制器提出了挑战。

嵌入式简答题

嵌入式简答题

五、简答题简要阐述ARM的异常处理过程?(6分)答:当任何一个异常发生并得到相应时,ARM内核自动完成一下动作:1、将下一条指令的地址存入相应的连接寄存器中,以便程序正确返回。

(2分)2、将CPSR的值复制到SPSR中(1分)3、根据异常类型,强制设置CPSR的运行模式位(1分)4、设置PC使其从相应的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。

(2分)---------------------------------------------------------------------------1、嵌入式开发环境主要包括哪些组件?答:嵌入式系统开发需要交叉编译和在线调试的开发环境,主要包括●宿主机●目标机(评估电路板)●基于JTAG的ICD仿真器、或调试监控软件、或在线仿真器ICE●运行于宿主机的交叉编译器和链接器、以及开发工具链或软件开发环境●嵌入式操作系统2、ARM核中什么寄存器用于存储PC?R13通常用来存储什么?R14通常用来存储什么? 答:R15用于程序计数寄存器PC,R13通常用来做堆栈指针寄存器,R14通常用来做链接寄存器,保存函数调用的返回地址1、什么是大端格式,什么是小端格式,在RAM920T内核的系统中,常采用什么模式?答:在大端格式中,字数据的高字节存储在低地址单元中,而字数据的低字节则存放在高地址单元中。

在小端存储格式中,低地址单元中存放的是字数据的低字节,高地址单元存放的是字数据的高字节。

在基于ARM920T内核的嵌入式系统中,常用小端存储格式来储存字数据。

2、简述S3C2410的I/O端口的控制寄存器,数据寄存器、上拉电阻允许寄存器的作用?答:端口控制寄存器定义了每个管脚的功能如果端口被配置成了输出端口,可以向数据寄存器的相应位写数据。

如果端口被配置成了输入端口,可以从数据寄存器的相应位读出数据端口上拉寄存器控制了每个端口组的上拉电阻的允许/禁止。

嵌入式课后题答案

嵌入式课后题答案

嵌入式课后答案第一章1. 什么是嵌入式系统?请列举几个常见的嵌入式系统。

答:根据国际电气和电子工程师协会(IEEE)的定义,嵌入式系统是控制、监视或者辅助设备、机器和生产线运行的装置(Devices used to control, monitor, or assist the operation of equipment, machinery or plants)。

这主要是从产品的应用角度加以定义的,由此可以看出嵌入式系统是软件和硬件的综合体,可以涵盖机械等附属装置。

目前被我国科学家普遍认同的定义是:嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统。

常见的嵌入式系统:手机,DVD,路由器,核磁共振仪,全自动洗衣机。

2.嵌入式系统与通用计算机有哪些区别?答:(1) 以应用为中心;(2) 以计算机技术为基础(3) 软件和硬件可裁减(4) 对系统性能要求严格(5)软件的固件化(6)需要专用的开发工具3.嵌入式系统的发展分为哪几个阶段?答:第一阶段:无操作系统的嵌入算法阶段。

第二阶段:以嵌入式CPU为基础,以简单操作系统为核心的嵌入式系统。

第三阶段:以嵌入式操作系统为标志的嵌入式系统。

第四阶段:以基于Internet为标志的嵌入式系统。

4.请列举嵌入式系统的主要应用领域。

答:(1)工业控制领域(2)交通运输领域(3)消费电子产品(4)家电领域(5)通信领域(6)商业和金融领域(7)环境监测领域(8)医疗领域(9)建筑领域(10)军事国防领域(11)航天航空领域第二章1. 简述简单嵌入式系统与复杂嵌入式系统的主要区别。

答:简单嵌入式系统很早就已经存在,这类嵌入式系统因为软硬件复杂度都很低,一般不使用操作系统,例如常用的单片机系统。

对于复杂的嵌入式系统,它的开发模式发生了极大的改变。

一个复杂的嵌入式系统不仅硬件系统的开发比单片机复杂了许多,更重要的是在该系统中采用了嵌入式操作系统,其应用软件的开发转变为使用操作系统标准接口的计算机工程领域的应用软件开发。

arm汇编subs指令

arm汇编subs指令

arm汇编subs指令摘要:一、arm汇编语言简介1.arm汇编语言的概念2.arm汇编语言的特点二、subs指令的概述1.subs指令的作用2.subs指令的语法三、subs指令的执行过程1.操作数的寻址方式2.操作数的寄存器选择3.操作数的计算过程四、subs指令的应用实例1.减法运算2.减法运算并保存结果正文:一、arm汇编语言简介arm汇编语言是一种基于arm处理器的低级编程语言,通过汇编指令直接操作硬件,具有执行速度快、代码密度高等优点。

arm汇编语言与通用汇编语言有很大的相似性,都采用助记符来表示指令,但同时也具有自己独特的特性。

二、subs指令的概述subs指令是arm汇编语言中用于执行减法运算的指令,其作用是将第二个操作数从第一个操作数中减去,并将结果保存回第一个操作数。

subs指令的语法为:```subs <寄存器>, <寄存器>```其中,<寄存器>表示参与运算的寄存器。

三、subs指令的执行过程1.操作数的寻址方式subs指令的操作数可以是通用寄存器,也可以是特定目的寄存器。

在执行subs指令时,需要将操作数的地址传递给指令,以便确定操作数的值。

2.操作数的寄存器选择在subs指令中,需要指定两个操作数,这两个操作数可以是不同的寄存器,也可以是同一个寄存器。

在执行subs指令时,需要将两个操作数的值传递给指令,以便进行减法运算。

3.操作数的计算过程subs指令执行时,将第二个操作数的值从第一个操作数的值中减去,并将结果保存回第一个操作数。

如果第一个操作数是基址寄存器,第二个操作数是索引寄存器,那么subs指令实际上执行的是基址减去索引的地址运算。

四、subs指令的应用实例1.减法运算假设我们有两个寄存器a和b,它们的值分别为10和5。

我们可以使用subs指令将a的值减去b的值,并将结果保存回a寄存器:```subs a, a, b```执行后,a的值将为5。

ARM指令大全

ARM指令集详解ARM可以用两套指令集:ARM指令集和Thumb指令集。

本文介绍ARM指令集。

在介绍ARM指令集之前,先介绍指令的格式。

1 指令格式(1)基本格式<opcode>{<cond>}{S} <Rd>,<Rn>{,<opcode2>}其中,<>内的项是必须的,{}内的项是可选的,如<opcode>是指令助记符,是必须的,而{<cond>}为指令执行条件,是可选的,如果不写则使用默认条件AL(无条件执行)。

opcode 指令助记符,如LDR,STR 等cond 执行条件,如EQ,NE 等S 是否影响CPSR 寄存器的值,书写时影响CPSR,否则不影响Rd 目标寄存器Rn 第一个操作数的寄存器operand2 第二个操作数指令格式举例如下:LDR R0,[R1] ;读取R1 地址上的存储器单元内容,执行条件ALBEQ DATAEVEN ;跳转指令,执行条件EQ,即相等跳转到DATAEVENADDS R1,R1,#1 ;加法指令,R1+1=R1 影响CPSR 寄存器,带有SSUBNES R1,R1,#0xD;条件执行减法运算(NE),R1-0xD=>R1,影响CPSR 寄存器,带有S(2)第2个操作数在ARM 指令中,灵活的使用第2个操作数能提高代码效率,第2个操作数的形式如下:#immed_8r常数表达式,该常数必须对应8 位位图,即常数是由一个8 位的常数循环移位偶数位得到。

合法常量0x3FC、0、0xF0000000、200、0xF0000001等都是合法常量。

非法常量0x1FE、511、0xFFFF、0x1010、0xF0000010等都是非法常量。

常数表达式应用举例如下:MOV R0,#1 ;R0=1AND R1,R2,#0x0F ;R2 与0x0F,结果保存在R1LDR R0,[R1],#-4 ;读取R1 地址上的存储器单元内容,且R1=R1-4Rm寄存器方式,在寄存器方式下操作数即为寄存器的数值。

ARMCortexM3指令集

ARMCortexM3指令集⼀、跳转指令跳转指令⽤于实现程序流程的跳转,在ARM 程序中有两种⽅法可以实现程序流程的跳转:Ⅰ.使⽤专门的跳转指令。

Ⅱ.直接向程序计数器PC 写⼊跳转地址值。

通过向程序计数器PC 写⼊跳转地址值,可以实现在4GB 的地址空间中的任意跳转,在跳转之前结合使⽤ MOV LR,PC 等类似指令,可以保存将来的返回地址值,从⽽实现在4GB 连续的线性地址空间的⼦程序调⽤。

ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4 条指令:1、 B 指令B 指令的格式为:B{条件} ⽬标地址B 指令是最简单的跳转指令。

⼀旦遇到⼀个 B 指令,ARM 处理器将⽴即跳转到给定的⽬标地址,从那⾥继续执⾏。

注意存储在跳转指令中的实际值是相对当前PC 值的⼀个偏移量,⽽不是⼀个绝对地址,它的值由汇编器来计算(参考寻址⽅式中的相对寻址)。

它是 24 位有符号数,左移两位后有符号扩展为 32 位,表⽰的有效偏移为 26 位(前后32MB 的地址空间)。

以下指令:B Label ;程序⽆条件跳转到标号Label 处执⾏CMP R1,#0 ;当CPSR 寄存器中的Z 条件码置位时,程序跳转到标号Label 处执⾏BEQ Label2、 BL 指令BL 指令的格式为:BL{条件} ⽬标地址BL 是另⼀个跳转指令,但跳转之前,会在寄存器R14 中保存PC 的当前内容,因此,可以通过将R14 的内容重新加载到PC 中,来返回到跳转指令之后的那个指令处执⾏。

该指令是实现⼦程序调⽤的⼀个基本但常⽤的⼿段。

以下指令:BL Label ;当程序⽆条件跳转到标号Label 处执⾏时,同时将当前的PC 值保存到R14 中3、 BLX 指令BLX 指令的格式为:BLX ⽬标地址BLX 指令从ARM 指令集跳转到指令中所指定的⽬标地址,并将处理器的⼯作状态有ARM 状态切换到Thumb 状态,该指令同时将PC 的当前内容保存到寄存器R14 中。

ARM的体系结构与编程


MPU支持实时操作系统。 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
ARM微处理器系列
ARM9微处理器系列
ARM9系列微处理器主要应用于无线设备、仪器 仪表、安全系统、机顶盒、高端打印机、数字照 相机和数字摄像机等。
ARM9系列微处理器包含ARM920T、ARM922T和 ARM940T三种类型,以适用于不同的应用场合。
ARM微处理器系列
StrongARM微处理器系列 (StrongARM SA-110 微处理器)
早期Intel StrongARM SA-1100处理器是采用ARM体系结 构高度集成的32位RISC微处理器。它融合了Intel公司的 设计和处理技术以及ARM体系结构的电源效率,采用在软 件上兼容ARMv4体系结构、同时采用具有Intel技术优点 的体系结构。
全性能的MMU,支持众多嵌入式操作系统。
支持数据Cache和指令Cache,具有更高的处理能力。
主频最高可达300M。
ARM微处理器系列
ARM9E微处理器系列
ARM9E系列微处理器主要应用于下一代无线设 备、数字消费品、成像设备、工业控制、存储 设备和网络设备等领域。
ARM9E系列微处理器包含ARM926EJ-S、 ARM946E-S和ARM966E-S三种类型,以适用于不 同的应用场合。
ARM技术的应用领域及特点
ARM微处理器的特点—大量使用寄存器
ARM 处理器共有37个寄存器,被分为若干个组,这些 寄存器包括:
31个通用寄存器,包括程序计数器(PC 指针), 均为32位的寄存器;
6个状态寄存器,用以标识CPU的工作状态及程 序的运行状态,均为32位。
ARM技术的应用领域及特点

ARM嵌入式系统结构与编程(第2版)_第1-4章_习题答案


思考与练习题答案
1. 在指令编码中,条件码占有几位,最多有多少个条件,各个条件是如何形成的? 答:见教材 3.1 节的描述。
2. 指令条件码中,V 标志位在什么情况下才能等于 1? 答:当指令的算术运算发生异常时,V 标志位置 1。例如,两个正数相加,其
结果为一负数;或者是两个负数相加,其结果为一正数,都会置 V 标志位。
《ARM 嵌入式系统结构与编程》第 2 版,邱铁 编著. 清华大学出版社. 2013 年 8 月第 2 版,2015 年 8 月第 4 次印刷
称为异常模式
4. 分析程序状态寄存器(PSR)各位的功能描述,并说明 C、Z、N、V 在什 么情况下进行置位和清零。
答:PSR 的具体格式为
V—溢出标志位 对于加/减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,
4. 分析逻辑右移、算术右移、循环右移、带扩展的循环右移它们间的差别。 答:见教材 3.2 节的图 3-1 移位操作功能描述。
5. ARM 数据处理指令具体的寻址方式有哪些,如果程序计数器 PC 作为目标寄存 器,会产生什么结果?
答:ARM 数据处理指令具体的寻址方式有 5 种,见教材 3.2 节的具体说明。 如果程序计数器 PC 作为目标寄存器,会产生程序发生跳转。
0x1FE80000
答:每个立即数由一个 8 位的常数进行 32 位循环右移偶数位得到,其中循环右
移的位数由一个 4 位二进制的两倍表示。即:
<immediate>=immed_8 进行 32 位循环右移(2*rotate_4)位
符合这一条件的都为合法的立即数。
1) 0x5430 0B 0101 0100 0011 0000
3. 在 ARM 指令中,什么是合法的立即数?判断下面各立即数是否合法,如果合
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Before) :操作完成前地址增
After) :操作完成后地址减
DA(Decrement
DB(Decrement
Before) :操作完成前地址减
22
7)块拷贝寻址/多寄存器寻址
LDMIA R1,{R0,R2,R5} ; R0[R1]
; R2[R1+4] ; R5[R1+8] 该指令的后缀IA表示在每次执行完加载/存储 操作后,R1按字长度增加,指令可将连续存 储单元的值送到R0,R2,R5寄存器中
STMDA R9!, {R0,R1,R5}
STMDB R9!, {R0,R1,R5}
26
8)相对寻址
相对寻址: 以程序计数器PC的当前值为基地址,指令 中的地址标号作为偏移量,两者相加得操作数的有效 地址。以下程序段完成子程序的调用和返回,跳转指 令BL采用了相对寻址方式:
BL NEXT …… …… ;跳转到子程序NEXT处执行 ;返回到此 ;当前PC
通过阅读报刊,我们能增长见识,扩大自己
有许多书籍还能培养我们的道德情操,
High
Base, High 2 1 Low
SP
空递增堆栈
空递减堆栈
20
6)堆栈寻址

ARM
STMFD LDMFD
SP! {r0,r1,r3-r5} ; r0-r1,r3-r5入栈 SP! {r0,r1,r3-r5} ; r0-r1,r3-r5出栈
Thumb
PUSH POP
{r0,r1,r3-r5} ; r0-r1,r3-r5入栈 {r0,r1,r3-r5} ; r0-r1,r3-r5出栈
6
2)寄存器寻址
寄存器寻址:操作数在寄存器中,指令中的 地址码为寄存器编号,寄存器的内容即为操 作数。执行效率较高的寻址方式。例
目的 寄存 器
第一操 作数寄 存器
第二操作 数寄存器
ADD R0,R1,R2
/*R0←R1+R2*/
该指令的执行效果是将寄存器R1和R2的内容 相加,其结果存放在R0寄存器中。
21
7)块拷贝寻址/多寄存器寻址
多寄存器寻址中,用一条指令把存储器中的一块数据 加载到多个寄存器,或把多个寄存器中的内容保存到 存储器中。寻址操作中的寄存器可以是R0~R15或其子 集。
LDM/STM加下列后缀即成为多寄存器寻址指令
IA(Increment
After) :
操作完成后地址增
IB(Increment
RRX(Rotate
Right Extended by 1 Place)带扩展 循环右移:寄存器的内容循环右移1位进入C标志位 ,空出的位用原来的C标志位填充。
Rotate Right Rotate Right through Carry CF
Destination
Destination
CF
12
4)寄存器间接寻址
制作: 王 亮 讲解:张娴静 熊祝青
ARM指令系统
1
ARM指令系统概述
ARM指令的寻址方式 ARM指令集
2
3
4
Thumb指令集
2
ARM指令系统概述
ARM指令的基本汇编格式
助记符
可选条 件后缀
可选标志 位后缀
第2操作 数

Opcode {cond} {S} Rd,Rn{,operand2} 目标寄存器 第1操作数 寄存器
14
5)基址变址寻址
例如:
LDR LDR
前变址
R0,[R1,#4]
;R0←[R1+4]
自动变址
R0,[R1,#4]!;R0← [R1+4], R1←R1+4
后变址 LDR R0,[R1] ,#4 ;R0←[R1], R1←R1+4
LDR LDR
R0,[R1,R2]
;R0← [R1+R2]
ARM有哪些寻址方式?
4
ARM指令的寻址方式
ARM的寻址方式
1) 2) 3) 4)
立即寻址 寄存器寻址 寄存器移位寻址 寄存器间接寻址
5)
6) 7) 8)
基址加偏址寻址
堆栈寻址
块拷贝寻址 /多寄存器寻址
相对寻址
5
1)立即寻址
立即寻址/立即数寻址:操作数直接包含在指 令中,只要取出指令也就取到了操作数,这个 操作数被称为立即数。例如:

ADD R0,R0,#1
SUB R0,R0,#1
/*R0←R0+1*/
/*R0R0-1*/
ADD R0,R0,#0x3f /*R0←R0+0x3f*/
第二个源操作数即为立即数,以“#”为前缀,
十进制另加“0d”或省略。
十六进制立即数另加“0x”或“&”,
二进制另加“0b”或“2_”;
13
5)基址变址寻址
基址变址寻址:将寄存器(基址寄存器)的内容与指 令中给出的地址偏移量相加,得到操作数的有效地址 ,操作数存放在该地址指向的存储区中。 基址变址寻址又可分为: 1)基址加偏移量寻址 a.前索引寻址方式:基址需加(或减)偏移来计算访 问的地址。 b.后索引寻址方式:基址不带偏移作为传送的地址 , 传送后自动索引。 2)基址加索引寻址 :指令指定一个基址寄存器,再指定 另一个寄存器(索引),其值作为位移加到基址上形 成存储器地址。
LDR
R0,[R1]
; R0 [R1]
ADDS
R2,R1,#1
; R2R1+1,影响CPSR
SUBNES R2,R1,R0 ;R2R1-R0 While NE,影响CPSR
3
ARM指令的寻址方式
什么是寻址方式
寻找操作数地址的方式或寻找操作数的方式称为
寻址方式。
如在计算2+3=?时,需先找到2和3的地址,才 能把它们取出来进行加法操作,寻找2和3的地 址的方式即寻址方式。
STMIB R9!, {R0,R1,R5}
25
7)块拷贝寻址/多寄存器寻址
STMDA STMDB
R9!, {R0,R1,R5} ;R0/1/5存入
R9!, {R0,R1,R5} ;R0/1/5存入
r9所指内存,先存后减
R9所指内存,先减后存
1018 R9 R9’ R5 R1 R0 100c 1000 R9 R9’ R5 R1 R0 1018 100c 1000
寄存器间接寻址:寄存器中的值作为操作数的地址, 而操作数本身存放在该地址所指向的存储器区中。例
;R0←[R1]
;[R1]←R0 ;R3 ←R2+[R1]


LDR
STR ADD
R0,[R1]
R0,[R1] R3, R2,[R1]
第一条指令将R1的值为地址的存储器中的数据传送 到R0中。第二条指令将R0的值传送到R1的值为地址 的存储器中。
23
7)块拷贝寻址/多寄存器寻址
STMIA R1,{R0,R2,R5} ; [R1] R0
; [R1+4] R2 ; [R1+8] R5 该指令的后缀IA表示在每次执行完加载/存储 操作后,R1按字长度增加,指令可将 R0,R2,R5寄存器的值送到连续存储单元中。
24
7)块拷贝寻址/多寄存器寻址
ADD
ADD
R3,R2,R1,LSR #2 ;R3R2+R1÷4
R3,R2,R1,LSR R4 ;R3R2+R1÷2R4
ADD
MOV
R3,R2,R1,LSL #3 ;R3R2+R1x8
R0, R2, LSL #3 ;R0 R2X8
9
3)寄存器移位寻址
移位类型
LSL(Logical
Arithmetic Shift Right
Destination
Sign bit shifted in
CF
11
3)寄存器移位寻址
ROR(Rotate
Right)循环右移:移出的最低位依 次填入空出的最高位,最后移出的进C标志位。
(Rotate Left)循环左移。
ROL
注意:进位标志C不在循环回路内。
Base, High
SP
2 1 Low
18
6)堆栈寻址
堆栈的四种工作方式
满递增堆栈:堆栈指针指向最后压入或第一个要
读出的数据,且由低地址向高地址生长。
满递减堆栈:堆栈指针指向最后压入或第一个要
读出的数据,且由高地址向低地址生长。
High SP 2 1 Base,Low 满递增堆栈 满递减堆栈
19
1 1
17
空堆栈(Empty
6)堆栈寻址
根据堆栈指针变化的方式可分为如下两种堆栈
递增堆栈(Ascending
Stack) :当堆栈由低地 址向高地址生成时,称为递增堆栈
递减堆栈(Decending
Stack):当堆栈由高地址 向低地址生成时,称为递减堆栈
High SP 2 1 Base,Low 递增堆栈 递减堆栈
R0,[R1,R2,LSL#2];R0← [R1+R2*4]
变址寻址方式常用于访问某基址附近的地址单元,常 用于查表、数组操作。
15
5)基址变址寻址
在第一条指令中,将寄存器R1的内容加上4形成操 作数的有效地址,从而取得操作数存寄存器R0中。
在第二条指令中,将寄存器R1的内容加上4形成操 作数的有效地址,从而取得操作数存寄存器R0中, 然后R1的内容自增4。请注意这里的“!”的用法 ,它表示操作完成后刷新“!”前的寄存器的数值 。 在第三条指令中,将寄存器R1的内容作为操作数的 有效地址,从而取得操作数存寄存器R0中,然后, R1的内容自增4。
Shift Left)逻辑左移:向左移,最后 移出的进CF,空出的最低有效位用零填充 Shift Right)逻辑右移:向右移,最 后移出的进CF,空出的最高有效位用零填充
相关文档
最新文档