ARM处理器9种基本寻址方式
- 格式:doc
- 大小:55.50 KB
- 文档页数:4
ARM9寻址方式及指令集介绍ARM9是一种32位精简指令集计算机(RISC)架构的微处理器。
在本文中,我们将介绍ARM9寻址方式和指令集的基本特点。
直接寻址是最简单的寻址方式,寻址单元根据操作码中给出的直接地址来访问内存。
例如,LDR指令将数据从内存中的特定地址加载到寄存器中。
直接寻址在寻址范围上有限制,因为地址是直接编码在指令中的。
间接寻址是通过一个保存数据的寄存器的地址来访问内存。
寄存器中的地址表示需要访问数据的内存地址。
例如,LDR指令可以使用R0寄存器中的地址来获取数据。
间接寻址使得程序可以动态地计算内存地址,提高了灵活性。
相对寻址是通过相对于当前指令地址的偏移量来访问内存。
偏移量在指令的操作码中给出,并且通常是一个8位或12位的整数。
相对寻址使得程序可以方便地访问位于当前指令之前或之后的内存位置。
基址寻址是通过一个基址寄存器和一个偏移量来访问内存,其中基址寄存器存储了起始地址,偏移量存储了与起始地址的相对位置。
例如,LDR指令可以使用R0寄存器作为基址寄存器,并使用R1作为偏移量。
基址寻址适用于访问数组或数据结构等连续的内存块。
核心寄存器寻址是指通过核心寄存器的内容来访问内存。
在ARM9架构中,核心寄存器包括程序计数器、堆栈指针和链接寄存器等。
这些寄存器具有特殊的寻址方式,允许对于特定的功能进行优化。
ARM9的指令集包括数据处理指令、分支和跳转指令、访存指令和特权指令等。
数据处理指令是最常用的指令类型,用于完成算术和逻辑操作。
例如,ADD指令将两个操作数相加,并将结果存储在目的寄存器中。
分支和跳转指令用于控制程序的流程。
例如,B指令可以根据条件跳转到指定的地址上。
访存指令用于读写内存和I/O端口。
例如,LDR指令可以将数据从内存加载到寄存器中,STR指令可以将寄存器中的数据存储到内存地址中。
特权指令用于进行特权级别的操作,例如,访问系统寄存器或控制外设。
这些指令一般只能由操作系统或系统软件使用。
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. 什么是嵌入式系统?请列举几个常见的嵌入式系统。
答:根据国际电气和电子工程师协会(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. 简述简单嵌入式系统与复杂嵌入式系统的主要区别。
答:简单嵌入式系统很早就已经存在,这类嵌入式系统因为软硬件复杂度都很低,一般不使用操作系统,例如常用的单片机系统。
对于复杂的嵌入式系统,它的开发模式发生了极大的改变。
一个复杂的嵌入式系统不仅硬件系统的开发比单片机复杂了许多,更重要的是在该系统中采用了嵌入式操作系统,其应用软件的开发转变为使用操作系统标准接口的计算机工程领域的应用软件开发。
第一章嵌入式系统概论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 指令系统支持的常见寻址方式有:立即寻址、寄存器寻址、寄存器移位寻址、寄存器间接寻址、基址变址寻址、多寄存器寻址、相对寻址及堆栈寻址。
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.寄存器间接寻址寄存器间接寻址指的是将寄存器中存放的数值作为操作数的有效地址,而操作数存放在内存中。
用于寄存器间接寻址的寄存器必须用“[]”括起来。
寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,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。