ARM处理器9种基本寻址方式
ARM9寻址方式及指令集介绍

ARM9寻址方式及指令集介绍ARM9是一种32位精简指令集计算机(RISC)架构的微处理器。
在本文中,我们将介绍ARM9寻址方式和指令集的基本特点。
直接寻址是最简单的寻址方式,寻址单元根据操作码中给出的直接地址来访问内存。
例如,LDR指令将数据从内存中的特定地址加载到寄存器中。
直接寻址在寻址范围上有限制,因为地址是直接编码在指令中的。
间接寻址是通过一个保存数据的寄存器的地址来访问内存。
寄存器中的地址表示需要访问数据的内存地址。
例如,LDR指令可以使用R0寄存器中的地址来获取数据。
间接寻址使得程序可以动态地计算内存地址,提高了灵活性。
相对寻址是通过相对于当前指令地址的偏移量来访问内存。
偏移量在指令的操作码中给出,并且通常是一个8位或12位的整数。
相对寻址使得程序可以方便地访问位于当前指令之前或之后的内存位置。
基址寻址是通过一个基址寄存器和一个偏移量来访问内存,其中基址寄存器存储了起始地址,偏移量存储了与起始地址的相对位置。
例如,LDR指令可以使用R0寄存器作为基址寄存器,并使用R1作为偏移量。
基址寻址适用于访问数组或数据结构等连续的内存块。
核心寄存器寻址是指通过核心寄存器的内容来访问内存。
在ARM9架构中,核心寄存器包括程序计数器、堆栈指针和链接寄存器等。
这些寄存器具有特殊的寻址方式,允许对于特定的功能进行优化。
ARM9的指令集包括数据处理指令、分支和跳转指令、访存指令和特权指令等。
数据处理指令是最常用的指令类型,用于完成算术和逻辑操作。
例如,ADD指令将两个操作数相加,并将结果存储在目的寄存器中。
分支和跳转指令用于控制程序的流程。
例如,B指令可以根据条件跳转到指定的地址上。
访存指令用于读写内存和I/O端口。
例如,LDR指令可以将数据从内存加载到寄存器中,STR指令可以将寄存器中的数据存储到内存地址中。
特权指令用于进行特权级别的操作,例如,访问系统寄存器或控制外设。
这些指令一般只能由操作系统或系统软件使用。
ARM指令分类及寻址方式

〈immediate〉= immed_8循环右移(2 X rotate_imm)
8bit
最大为0xff
4bit(0—15)
范围:0—30
一个合法的立即数可能有多种编码方法。如0x3f0是一个合法的立即数,它可以 采用下面两种编码方法: Immed_8=0x3f,rotate_imm=0xe 或者 Immed_8=0xfc,rotate_imm=0xf ARM汇编编译器按照下面的规则来生成立即数的编码: 当立即数数值在0—0xff范围内时,令<immediate>=immed_8, rotate_imm=0 其它情况下,汇编编译器选择rotate_imm数值最小的编码方法
立即寻址,操作数不是存储在寄存器或存储器 中,而是包含在指令的操作码中,也就是说,数据 就包含在指令当中,取出指令也就取出了可以立即 程序存储 使用的操作数(这样的数称为立即数)。立即寻址指 MOV R0,#0xFF00 令举例如下: 从代码中获得数据
SUBS
MOV
R0,R0,#1 R0
;R0减1,结果放入R0,并且影响标志位 0xFF00 0x55
• 寻址方式分类——变址寻址
变址寻址就是将基址寄存器的内容与指令中给出的偏 移量相加,形成操作数的有效地址。变址寻址用于访问基 址附近的存储单元,常用于查表、数组操作、功能部件寄 0x4000000C 0xAA 存器访问等。变址寻址指令举例如下: LDR R2,[R3,#0x0C] ;读取R3+0x0C地址上的存储单元 将R3+0x0C作 R3 0x40000000 为地址装载数 ;的内容,放入R2,执行后R3 不变。 R2 0xAA 0x55 据 STR R1,[R0,#-4]! ;先R0=R0-4,然后把R1的值寄存 LDR
ARM——精选推荐

1、ARM处理器具有8种基本寻址方式:1.寄存器寻址;2.立即寻址;3.寄存器移位寻址;4.寄存器间接寻址;5.基址寻址;6.多寄存器寻址;7.堆栈寻址;8.相对寻址。
2、实时操作系统的特点:实时性、可靠性和灵活性。
从实时系统的应用特点来看实时操作系统可以分为两种:一般实时操作系统和嵌入式实时操作系统。
3、以下代码是初始化外部中断0,用它来唤醒掉电的LPC2114,请填空。
PINSEL0= =0x00000000;PINSEL1= =(PINSEL1&0xFFFFFFFC) | 0x01;//设置I/O口连接,P0.16设置为EINT0EXTMODE= =EXTMODE & 0x0E ; //设置EINT0为电平触发模式EXTPOLAR= =EXTPOLAR & 0x0E; //设置EINT0为低电平触发EXTWAKE= =EXTWAKE& 0x0E; //允许外部中断0唤醒掉电的CPUEXTINT= = 0x0F ; //清除外部中断标志EXTMODE = EXTMODE | 0x01; //设置EINT0为边沿触发模式EXTPOLAR = EXTPOLAR & 0x0E; //初始化EINT0为下降沿中断4、使用NOP伪指令、比较指令、条件跳转指令等完成一个软件延时子程序,延时长度由R0寄存器的数值控制?DelayNOP ;空操作NOPNOPSUBS R0,R0,#1 ;循环次数减一BNE Delay ;如果循环未结束,跳转Delay继续MOV PC,LR ;子程序返回5、初始化串口0程序。
设置为8位数据位,1位停止位,无奇偶校验,入口参数:bps 通讯波特率void UART0Init(uint32 bps){ uint16 Fdiv;PINSEL0=(PINSEL0&(~0x0F))|0x05; //不影响其它管脚连接,设置I/O连接到UART0U0LCR = 0x83; // DLAB = 1,可设置波特率Fdiv = (Fpclk/16) / bps; // 设置波特率U0DLM = Fdiv / 256;U0DLL = Fdiv % 256;U0LCR = 0x03;}6、设计完成主模式I2C的初始化V oid I2C_init(uint32 fi2c) //传入参数为I2C时钟频率{ if(fi2c > 400000)fi2c = 400000;//过滤传入参数,最高400K时钟频率PINSEL0=(PINSEL0 & 0xFFFFFF0F)|0x50;//设置引脚连接模块(PINSEL0)I2SCLH=(Fpclk/fi2c+1)/2; //设置通信波特率(I2SCLH、I2SCLL)I2SCLL=(Fpclk/fi2c)/2;I2CONCLR= 0x2C;I2CONSET=0x40; //使能主I2C(I2CONSET)VICIntSelect=0x00000000;VICV ectCntl0=0x29;VICV ectAddr0=(int)IRQ_I2C; //设置中断向量(VICxxx)VICIntEnable = 0x0200;}7、下列程序语句完成什么操作,并在空格里说明程序中语句的作用?答: ARM状态切换到Thumb状态。
指令集

1、寄存器寻址:
3
5、变址寻址: LDR R0,[R1,#4] 6、多寄存器寻址: LDMIA R1,{R0,R2,R5] ;R0<<[R1] ;R2<<[R1+4] ;R5<<[R1+8] 7、堆栈寻址: 8、块拷贝寻址: LDMIA R0!,{R2-R9} STMIA R1,{R2-R9} ;R0<<[r1+4]
3.1 ARM处理器寻址方式
寻址方式分类——多寄存器寻址
多寄存器寻址一次可传送几个寄存器值,允许 R6 0x04 0x?? 0x04 0x4000000C 一条指令传送16个寄存器的任何子集或所有寄存器。 R4 0x03 0x?? 0x03 0x40000008 多寄存器寻址指令举例如下: R3 0x02 0x?? 0x02 0x40000004 LDMIA R1!,{R2-R7,R12} ;将R1指向的单元中的数据读出到 R2 0x01 0x?? 0x01 0x40000000 ;R2~R7 、R12中 (R1自动加4) 0x40000000 STMIA R1 R0!,{R2-R7,R12} LDMIA
以寄存器R1 的内容作为操作数的有效地址,从而取得操作
数存入寄存器R0中,然后,R1 的内容自增4 个字节。 (后变址必回写)
;R0←[R1+R2]
LDR R0,[R1,R2]
将寄存器R1 的内容加上寄存器R2 的内容形成操作数的有
效地址,从而取得操作数存入寄存器R0 中。 (前变址不 回写)
块拷贝寻址可实现连续地址数据从存储器的某一
位置拷贝到另一位置。
例:
LDMIA R0,{R2-R6}; STMIA R1,{R2-R6}; 第一条指令从以R0的值为起始地址的存储单元中 取出5个字的数据,第二条指令将取出的数据存入 以R1的值为起始地址的存储单元中。 实际上是多寄存器寻址的组合。
嵌入式课后题答案

嵌入式课后答案第一章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. 简述简单嵌入式系统与复杂嵌入式系统的主要区别。
答:简单嵌入式系统很早就已经存在,这类嵌入式系统因为软硬件复杂度都很低,一般不使用操作系统,例如常用的单片机系统。
对于复杂的嵌入式系统,它的开发模式发生了极大的改变。
一个复杂的嵌入式系统不仅硬件系统的开发比单片机复杂了许多,更重要的是在该系统中采用了嵌入式操作系统,其应用软件的开发转变为使用操作系统标准接口的计算机工程领域的应用软件开发。
第3章_ARM指令系统

23
3.2 ARM指令的 寻址方式
堆栈寻址和多寄存器寻址有很多相似之处,可以说 堆栈寻址是多寄存器寻址的特例,堆栈操作的指令
也有一一对应的多寄存器访问指令,如下表所示。
递增 满 先增 增值 后增 先减 减值 后减 LDMDA LDMFA STMIB STMFA STMIA LDMIA 空 满 递减 空 LDMIB LDMED
、后索引偏移和自动索引之分。
零偏移----实际上就是寄存器间接寻址 前索引偏移: LDR R2, [R3, #0X12] ; [(R3)+ #0X12]送R2,R3值不变 后索引偏移: STR R2, [R3], #0X12; R2送[R3],R3+0X12送R3 自动索引: LDR R2, [R3,#0X12]!; [(R3)+ #0X12]送R2,R3+0X12送R3
存储器 R2 0X00009000 0X00009000
0X20
R1
0X20
13
3.2 ARM指令的寻址方式
(6)基址变址寻址
基址变址寻址是指操作数的有效地址是由寄存器的内容加
上指令中给出的变址来确定的;
操作数所在存储单元的基地址由寄存器给出,这个寄存器 就叫做基址寄存器。 变址既可以以立即数形式给出,也可以由寄存器来提供。
4
3.2 ARM指令的寻址方式
所谓寻址方式就是人们根据操作数所在位置、数据 类型及其数据结构的不同,人为规定的根据指令中
给出的信息找出操作数有效地址的方式。
根据操作数的种类不同,ARM寻址方式可以分为
数据操作数寻址方式和地址操作数寻址方式两大类
,其中,数据操作数又有立即数、寄存器操作数、 存储器操作数和I/O操作数之分。 操作的对象不同,所用的寻址方式也不同。
嵌入式系统设计教程(第2版)简答题答案.pdf

第一章嵌入式系统概论1.嵌入式系统的定义是什么?答:以应用为中心,以计算机技术为基础,硬件、软件可裁剪,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
2.简述嵌入式系统的主要特点。
答:(1)功耗低、体积小、具有专用性(2)实时性强、系统内核小(3)创新性和高可靠性(4)高效率的设计(5)需要开发环境和调试工具3. 嵌入式系统一般可以应用到那些领域?答:嵌入式系统可以应用在工业控制、交通管理、信息家电、家庭智能管理系统、网络及电子商务、环境监测和机器人等方面。
4. 简述嵌入式系统的发展趋势答:(1)嵌入式应用的开发需要强大的开发工具和操作系统的支持(2)连网成为必然趋势(3)精简系统内核、算法,设备实现小尺寸、微功耗和低成本(4)提供精巧的多媒体人机界面(5)嵌入式软件开发走向标准化5.嵌入式系统基本架构主要包括那几部分?答:嵌入式系统的组织架构是由嵌入式处理器、存储器等硬件、嵌入式系统软件和嵌入式应用软件组成。
嵌入式系统一般由硬件系统和软件系统两大部分组成,其中,硬件系统包括嵌入式处理器、存储器、I/O系统和配置必要的外围接口部件;软件系统包括操作系统和应用软件。
6.嵌入式操作系统按实时性分为几种类型,各自特点是什么?答:(1)具有强实时特点的嵌入式操作系统。
(2)具有弱实时特点的嵌入式操作系统。
(3)没有实时特点的嵌入式操作系统。
第二章嵌入式系统的基础知识1.嵌入式系统体系结构有哪两种基本形式?各自特点是什么?答:冯诺依曼体系和哈佛体系。
冯诺依曼体系结构的特点之一是系统内部的数据与指令都存储在同一存储器中,其二是典型指令的执行周期包含取指令TF,指令译码TD,执行指令TE,存储TS四部分,目前应用的低端嵌入式处理器。
哈佛体系结构的特点是程序存储器与数据存储器分开,提供了较大的数据存储器带宽,适用于数据信号处理及高速数据处理的计算机。
2.在嵌入式系统中采用了哪些先进技术?答:(1)流水线技术(2)超标量执行(3)总线和总线桥3.简述基于ARM架构的总线形式答:ARM架构总线具有支持32位数据传输和32位寻址的能力,通过先进微控制器总线架构AMBA支持将CPU、存储器和外围都制作在同一个系统板中。
ARM基本寻址方式

ARM基本寻址方式所谓寻址方式,指的是处理器根据指令中给出的内存地址信息,找出操作数的物理地址,实现对操作数的访问。
根据指令中给出的操作数的不同形式,ARM 指令系统支持的常见寻址方式有:立即寻址、寄存器寻址、寄存器移位寻址、寄存器间接寻址、基址变址寻址、多寄存器寻址、相对寻址及堆栈寻址。
1.立即寻址立即寻址又称为立即数寻址,是一种特殊的寻址方式,指令中直接给出操作数,只要取出指令也就取到了操作数,这个操作数称为立即数。
例如,MOV R0,#2 ;R0←2ADD R0,R0,#100 ;R0←R0+100以上两条指令中,以“#”为前缀的操作数即为立即数。
对于以十六进制数表示的立即数,要求在“#”后加上“0X'’或“&”;对于以二进制数表示的立即数,要求在“#”后加上“0b”;对于以十进制数表示的立即数,要求在“#”后加上“Od”或缺省。
2.寄存器寻址寄存器寻址指的是将寄存器中存放的数值作为操作数,这是各类微处理器常采用的一种执行效率较高的寻址方式。
例如,ADD R0,R1,R2 ;R0←R1+R2此指令中,两个输入操作数存放在寄存器R1和R2中,该指令将R1和R2中的数值相加,结果存放在寄存器R0中。
3.寄存器移位寻址寄存器移位寻址是ARM指令系统特有的寻址方式。
寻址的操作数由寄存器中的数值进行相应移位得到,移位的方式在指令中以助记符形式给出。
关于移位操作将在5.3.3节中详细介绍。
移位的位数可由立即数或寄存器寻址方式表示。
例如,ADD R0,R1,R2,LSL#1该指令表示将R2中的值向左移1位,然后与R1中的值相加,结果存人R0中。
MOV Ri,R0,LSR R2该指令表示将R0中的值向右移位,移位的次数由R2中的值决定,移位后的结果存人R1中。
4.寄存器间接寻址寄存器间接寻址指的是将寄存器中存放的数值作为操作数的有效地址,而操作数存放在内存中。
用于寄存器间接寻址的寄存器必须用“[]”括起来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,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微处理器支持这四种类型的堆栈工作方式,即:(LDM、STM : ; F、E 表示满堆栈、空堆栈 ; A、D 表示递增、递减堆栈)
满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。
如指令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。