1、嵌入式系统概述嵌入式系统概述l嵌入式系统简介嵌入式系统简介l现实中的嵌入式系统现实中的嵌入式系统l嵌入式系统的概念和特点嵌入式系统的概念和特点l嵌入式系统的组成嵌入式系统的组成l嵌入式操作系统嵌入式操作系统l嵌入式系统开发流程概述嵌入式系统开发流程概述第第1 1章章 嵌入式系统概述嵌入式系统概述1.1 1.1 嵌入式系统简介嵌入式系统简介 1976年,出现最早的单片机,它是由Intel公司推出。Motorola公司同时推出了68HC05,Zilog公司推出了Z80系列。从20世纪80年代早期开始,嵌入式系统的程序员开始用商业级的“操作系统”编写嵌入式应用软件,此刻“嵌入式系统”才真正出现了。2
2、0世纪90年代以后,随着对实时性要求的提高,软件规模不断上升,实时核逐渐发展为实时多任务操作系统(RTOS),并作为一种软件平台逐步成为目前国际嵌入式系统的主流。第第1 1章章 嵌入式系统概述嵌入式系统概述1.21.2 现实中的现实中的嵌入式系统嵌入式系统n日常生活 手持媒体设备、数码相机、打印机、全自动洗衣机、电饭煲等都是嵌入式系统的具体应用。n工业控制 工业过程控制、数字机床、电力系统、电网安全、电网设备监测、石油化工系统的自动化都需要嵌入式微控制器的参与。n交通管理第第1 1章章 嵌入式系统概述嵌入式系统概述n环境工程 水文资料实时监测、防洪体系及水土质量监测、堤坝安全、地震监测网、实时
3、气象信息网、水源和空气污染监测都涉及大量数据的实时处理分析。n国防与航天 神舟飞船和长征火箭中有很多嵌入式系统,导弹的制导系统也是一种嵌入式系统。第第1 1章章 嵌入式系统概述嵌入式系统概述1.31.3 嵌入式系统嵌入式系统的概念和特点的概念和特点概念:按照IEEE(国际电气和电子工程师协会)的定义,嵌入式系统即“控制、监视或者辅助装置、机器和设备运行的装置”(原文为devices used to control,monitor,or assist the operation of equipment,machinery or plants)。这主要是从应用上加以定义的,从中可以看出嵌入式系统
4、是软件和硬件的综合体,并且涵盖机械等附属装置。第第1 1章章 嵌入式系统概述嵌入式系统概述特点:软硬件可裁剪;对功能、可靠性、成本、体积、功耗要求严格;代码短小精悍,可固化;实时性;弱交互性;需要专门的开发环境和开发工具;第第1 1章章 嵌入式系统概述嵌入式系统概述1.41.4 嵌入式系统嵌入式系统的组成的组成图1.1 嵌入式系统组成框图第第1 1章章 嵌入式系统概述嵌入式系统概述1.4.1 嵌入式系统的硬件组成嵌入式系统的硬件组成嵌入式系统硬件设备包括嵌入式处理器和外围设备。其中,嵌入式处理器是嵌入式系统的核心部分。它将通用处理器中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设
5、计时趋于小型化,同时还具有很高的效率和可靠性。外围设备是嵌入式系统中用于完成存储、通信、调试、显示等辅助功能的其他部件。目前常用的嵌入式外围设备按功能可以分为存储设备(如RAM、SRAM、Flash等)、通信设备(如RS-232接口、SPI接口、以太网接口)和显示设备(如LCD等)三类。第第1 1章章 嵌入式系统概述嵌入式系统概述1.4.2 嵌入式系统的嵌入式系统的软软件组成件组成图1.2 嵌入式系统软件子系统组成框图 嵌入式操作系统和嵌入式应用软件是整个系统的控制核心,控制整个系统的运行,提供人机交互的信息等。在嵌入式系统不同的应用领域和不同的发展阶段,嵌入式系统软件组成也不完全相同,但基本
6、上可以分为应用层、操作系统(OS)层和硬件设备驱动层。如左图所示。第第1 1章章 嵌入式系统概述嵌入式系统概述1.51.5 嵌入式嵌入式操作操作系统系统 嵌入式操作系统(Embedded Operating System,EOS)是指用于嵌入式系统的操作系统。目前常用的包括VxWorks、Windows CE、C/OS-、Linux等。VxWorks:美国WindRiver公司开发的嵌入式实时操作系统。单就性能而言,它是非常优秀的操作系统:具有可裁剪的微内核结构,高效的任务管理,灵活的任务间通信,微秒级的中断处理,支持POSIX 1003.1b实时扩展标准,支持多种物理介质及标准、完整的TCP
7、/IP网络协议等。第第1 1章章 嵌入式系统概述嵌入式系统概述Windows CE:微软公司针对嵌入式设备开发的32位、多任务、多线程的操作系统。它支持x86、ARM、MIPS、SH等架构的CPU,硬件驱动程序丰富,比如支持WiFi、USB2.0等新型设备,并具有强大的多媒体功能;可以灵活裁剪,以减小系统体积;但是,其源代码没有开放(目前仅开放了一小部分),开发人员难以进行更细致的定制;占用的内存较多,整个系统相对庞大;版权许可费用也比较高。第第1 1章章 嵌入式系统概述嵌入式系统概述C/OS-:一个源码公开、可移植、可固化、可裁剪、占先式的实时多任务操作系统,可用于8位、16位和32位处理器
8、。其特点包括:可裁剪,对硬件要求较低;可以运行最多64个任务;调度方式为抢占式,即总是运行最高优先级的就绪任务。需要说明的是,C/OS-仅是一个实时内核,用户需要完成其他更多的工作,比如编写硬件驱动程序、实现文件系统操作(使用文件的话)等。第第1 1章章 嵌入式系统概述嵌入式系统概述Linux:遵循GPL协议的开放源码的操作系统,使用时无需交纳许可费用。内核可任意裁剪,几乎支持所有的32位、64位CPU;内核中支持的硬件种类繁多,几乎可以从网络上找到所有硬件驱动程序;支持几乎所有的网络协议;有大量的应用程序可用,从编译工具、调试工具到GUI程序。其缺点在于实时性,虽然2.6版本的Linux在实
9、时性方面有较大改进,但是仍无法称为实时操作系统。第第1 1章章 嵌入式系统概述嵌入式系统概述1.6 1.6 嵌入式系统嵌入式系统开发流程开发流程用户需求分析 系统的需求一般分为功能性需求和非功能性需求两个方面。功能性需求就是系统的基本功能。体系结构设计 体系结构设计描述系统如何实现需求分析里面所述的功能性和非功能性需求。软/硬件设计 由于ARM硬件体系的一致性,因此嵌入式系统设计工作大部分都集中在软件设计上。第第1 1章章 嵌入式系统概述嵌入式系统概述系统集成 系统集成即把初步设计好的硬件、软件和执行装置等集成在一起,进行联调;在联调过程中发现并改进单元设计过程中的不足或错误;针对具体的问题,
10、对软硬件进行调整。系统测试 系统测试即对设计好的系统进行测试,验证其是否满足规格说明中规定的要求。针对不同复杂程度的系统,目前有一些常用的系统设计方法,如瀑布设计法、自顶向下设计法、自下向上设计法、螺旋设计法、逐步细化设计法和并行设计法等。第第1 1章章 嵌入式系统概述嵌入式系统概述图1.3 嵌入式开发流程框图第第1 1章章 嵌入式系统概述嵌入式系统概述1.列举几个你身边的嵌入式系统的例子。2.什么叫嵌入式系统?3.什么是嵌入式处理器?嵌入式处理器分为哪几类?4.什么是嵌入式操作系统?为何要使用嵌入式操作系统?5.嵌入式系统的特点是什么?ARM微处理器体系结构微处理器体系结构lARM简介简介l
11、Cortex-A9内部功能及特点内部功能及特点lCortex-A9架构的处理器状态架构的处理器状态lCortex-A9内核的工作模式内核的工作模式lCortex-A9架构的内核寄存器架构的内核寄存器lARM的异常中断的异常中断lCortex-A9的存储系统的存储系统第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.12.1 ARM简介简介 ARM公司是一家知识产权供应商,它与一般的半导体公司最大的不同就是不制造芯片且不向终端用户出售芯片,而是通过转让设计方案,由合作伙伴生产出各具特色的芯片。目前,100多家公司与ARM公司签订了技术使用许可协议,其中包括Intel、IBM、LG、
12、NEC、SONY、NXP、NS、Samsung、Freescale、Atmel等这样的大公司。第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.1.1 2.1.1 RISCRISC结构结构 RISC即精简指令集计算机,它的指令格式和长度通常是固定的(如ARM是32位的指令),且指令和寻址方式少而简单,大多数指令在一个周期内就可以执行完毕。RISC的设计重点在于降低处理器中指令执行部件的硬件复杂度,这是因为软件比硬件更容易提供更大的灵活性和更高的智能化。与RISC架构对应的是CISC(复杂指令集计算机)架构。特点是通过存放在只读存储器中的微码(Microcode)来控制整个处理器的
13、运行。在CISC架构下,一条指令往往可以完成一串运算动作,但却需要多个时钟周期来执行。第第2 2章章 ARMARM微处理器体系结构微处理器体系结构RISC和CISC在构架上的不同:nRISC构架的指令格式和长度通常是固定的;CISC构架下的指令长度通常是可变的;nRISC在结构设计上是一个载入/存储的构架,只有载入和存储指令可以访问存储器,数据处理指令只对寄存器的内容进行操作。为了加速程序的运算,RISC会设定多组寄存器,并且指定特殊用途的寄存器。CISC架构则允许数据处理指令对存储器进行操作,对寄存器的要求相对不高。第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.1.2 AR
14、M体系架构的发展体系架构的发展ARMv4ARMv4EARMv5TEARMv5TEJARMv6ARMv7ARMv8图2.1 ARM体系发展过程第第2 2章章 ARMARM微处理器体系结构微处理器体系结构ARMv4:只支持32位的指令集,支持32位的地址空间。ARMv4E:在ARMv4基础上增加了16位的Thumb指令集,代码更紧凑。ARMv5TE:改进了Thumb指令集:增加了一些“增强型DSP指令”,用于增强处理器对一些典型的DSP算法的处理性能。ARMv5TEJ:增加了Jazelle技术,用于提供Java加速功能。ARMv6:在存储系统、异常处理以及对多媒体功能的支持等多方面都有改进。ARM
15、v7:使用Thumb-2技术,还使用了NEON技术。ARMv8:ARM公司的首款支持64位指令集的处理器架构。第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.1.2 ARM处理器系列处理器系列ARM7ARM9ARM9EARM10 通用处理器通用处理器属低端ARM处理器核,没有内存管理单元(MMU)。增加了MMU和CACHE,执行效率进一步得到提升。在单一的处理器内核上提供了微控制器、DSP、Java应用系统的解决方案。使用新的体系结构,具有更加杰出的高性能、低功耗两个特点。第第2 2章章 ARMARM微处理器体系结构微处理器体系结构 ARM11 Cortex SecurCore
16、 OptimoDE Data EnginesARMv6架构的第一代实现。基于v7A的Cortex-A系列,面向尖端的基于虚拟内存的操作系统和用户应用。SecurCore系列微处理器专为安全需要而设计,提供了完善的32位RISC技术的安全解决方案。针对高性能的嵌入式信号处理应用而设计。基于v7R的Cortex-R系列,针对实时系统。基于v7M的Cortex-M系列,针对微控制器。第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.2 Cortex-A9内部功能及特点内部功能及特点2.2.1 2.2.1 功能特点功能特点图2.2 Cortex-A9处理器的体系结构第第2 2章章 ARM
17、ARM微处理器体系结构微处理器体系结构010204030506Thumb-2技术NEON媒体处理 引擎技术浮点运算单元优化了一级缓存的性能和功耗二级缓存控制器采用高效超标量流水线07SCU技术08多核TrustZone技术第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.2.2 Cortex-A9的流水线的流水线 传统的单片机(如8051)中,处理器只有完成一条指令的读取和执行后,才会开始下一条指令的处理,所以PC(程序计数器)总是指向正在执行的指令。而在ARM体系架构中则引入了流水线的概念。流水线是ARM体系架构提高执行效率的一种有效策略。第第2 2章章 ARMARM微处理器体
18、系结构微处理器体系结构图2.3 三级流水线结构的指令执行顺序(1)在第1个周期,PC指向指令1,此时指令1进入三级流水线的取指阶段。(2)在第2个周期,PC指向指令2,此时指令1进入三级流水线的译码阶段,同时取出指令2。(3)在第3个周期,PC指向指令3,此时指令1进入三级流水线的执行阶段,指令2进入译码阶段,取出指令3。(4)在第4个周期,指令1执行完成,指令2和指令3流水线推进一级,同时开始指令4的取指处理第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.3 Cortex-A9架构的处理器状态架构的处理器状态四种状态:指令集状态、执行状态、安全状态和调试状态。指令集状态提供了
19、4种指令集状态,分别是ARM状态、Thumb状态、Jazelle状态和ThumbEE状态。执行状态包括指令集状态和一些控制指令流编码的位。安全状态安全状态的数目依赖于是否执行安全扩展。调试状态由于调试事件的存在,处理器被配置成暂停调试模式。第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.4 Cortex-A9内核的工作模内核的工作模式式表2.1 ARM处理器的模式第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.5 Cortex-A9架构的内核寄存器架构的内核寄存器 从系统角度来看,Cortex-A9架构内部共有42个用户可以访问的32位寄存器,这些寄存器分别为:
20、(1)13个通用32位寄存器:R0_usrR12_usr。特殊的,在FIQ模式下,R8R12对应为R8_fiq、R9_fiq、R10_fiq、R11_fiq、R12_fiq。(2)8个状态寄存器:CPSR、SPSR_hyp、SPSR_svc、SPSR_abt、SPSR_und、SPSR_mon、SPSR_irq、SPSR_fiq。第第2 2章章 ARMARM微处理器体系结构微处理器体系结构(3)针对不同模式的三种寄存器:SP(R13)、LR(R14)、PC(R15)。在不同模式下,它们分别为SP_usr(R13)、SP_hyp、SP_scv、SP_abt、SP_und、SP_mon、SP_ir
21、q、SP_fiq、LR_usr(R14)、LR_svc、LR_abt、LR_und、LR_mon、LR_irq、LR_fiq、PC。第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.5.1 ARM状态下的寄存器状态下的寄存器表2.2 ARM处理器各种模式下的寄存器第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2、一般通用寄存器:R0R7为保存数据或地址值的通用寄存器;R8R14所对应的物理寄存器取决于当前的物理寄存器模式;R13、R14在不同模式下分别对应不同的寄存器,除用户模式和系统模式外。第第2 2章章 ARMARM微处理器体系结构微处理器体系结构3、堆栈指针寄
22、存器SP4、链接寄存器LR第第2 2章章 ARMARM微处理器体系结构微处理器体系结构5、程序指针寄存器PC6、程序状态寄存器CPSR和程序状态保存寄存器SPSRCPSR和和SPSR的区别的区别第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.6 ARM异常中断异常中断表2.3 ARM的异常向量地址一览表第第2 2章章 ARMARM微处理器体系结构微处理器体系结构1.复位异常当复位异常时,系统主要执行下列伪操作:R14_svc=UNPREDICTABLE value SPSR_svc=UNPREDICTABLE value CPSR4:0=0b10011;进入特权模式 CPSR5
23、=0;处理器进入ARM状态 CPSR6=1;禁止快速中断 CPSR7=1;禁止外设中断 If high vectors configured then PC=0 xffff0000 else PC=0 x00000000第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.未定义指令异常当未定义指令异常发生时,系统主要执行下列伪操作:r14_und=address of next instruction after the undefined instruction SPSR_und=CPSR CPSR4:0=0b11011;进入未定义指令模式 CPSR5=0;处理器进入ARM状态;
24、CPSR6保持不变 CPSR7=1;禁止外设中断 If high vectors configured then PC=0 xffff0004 else PC=0 x00000004第第2 2章章 ARMARM微处理器体系结构微处理器体系结构3.软件中断异常:软件中断异常发生时,处理器主要执行下列伪操作:r14_svc=address of next instruction after the SWI instruction SPSR_und=CPSR CPSR4:0=0b10011;进入特权模式 CPSR5=0;处理器进入ARM状态;CPSR6保持不变 CPSR7=1;禁止外设中断 If h
25、igh vectors configured then PC=0 xffff0008 else PC=0 x00000008第第2 2章章 ARMARM微处理器体系结构微处理器体系结构4.预取中止异常:预取中止异常发生时,处理器主要执行下列伪操作:r14_svc=address of the aborted instruction+4 SPSR_und=CPSR CPSR4:0=0b10111;进入特权模式 CPSR5=0;处理器进入ARM状态;CPSR6保持不变 CPSR7=1;禁止外设中断 If high vectors configured then PC=0 xffff000C els
26、e PC=0 x0000000C第第2 2章章 ARMARM微处理器体系结构微处理器体系结构5.数据中止异常:当数据中止异常发生时,处理器主要执行下列伪操作:r14_abt=address of the aborted instruction+8 SPSR_ abt=CPSR CPSR4:0=0b10111 CPSR5=0;处理器进入ARM状态;CPSR6保 持不变 CPSR7=1;禁止外设中断 If high vectors configured then PC=0 xffff000C10 else PC=0 x00000010第第2 2章章 ARMARM微处理器体系结构微处理器体系结构6.
27、外部中断异常:当外部中断异常发生时,处理器主要执行下列伪操作:r14_irq=address of next instruction to be executed+4 SPSR_irq=CPSR CPSR4:0=0b10010;进入特权模式 CPSR5=0;处理器进入ARM状态;CPSR6保持不变 CPSR7=1;禁止外设中断 If high vectors configured then PC=0 xffff0018 else PC=0 x00000018第第2 2章章 ARMARM微处理器体系结构微处理器体系结构7.快速中断异常:当快速中断异常发生时,处理器主要执行下列伪操作:r14_fi
28、q=address of next instruction to be executed+4 SPSR_ fiq=CPSR CPSR4:0=0b10001;进入快速中断模式 CPSR5=0;处理器进入ARM状态 CPSR6=0;允许快速中断 CPSR7=1;禁止外设中断 If high vectors configured PC=0 xffff001c else PC=0 x0000001c第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.6.3 ARM异常优先级异常优先级表2.4 ARM异常的优先级第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.7 Cortex
29、-A9的存储系统的存储系统2.7.1 ARM存储系统的相关概念存储系统的相关概念1、存储器的字节、半字、字与双字2、存储方式:表2.5 字对齐和半字对齐地址示例第第2 2章章 ARMARM微处理器体系结构微处理器体系结构3、存储格式:1)大端存储系统图2.6 大端存储系统示意图第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2)小 端存储系统图2.7 小端存储系统示意图第第2 2章章 ARMARM微处理器体系结构微处理器体系结构2.7.1 ARM Cortex-A9存储系统的架构存储系统的架构 Cortex-A9采用虚拟存储系统架构(VMSA)的处理器,其存储系统的架构示意图如图2
30、.6所示:图2.8 多层次高速缓存架构第第2 2章章 ARMARM微处理器体系结构微处理器体系结构1.RISC和CISC架构的区别是什么?2.简述三级流水线的概念?Cortex-A9面向多核技术的特点有哪些?3.ARM处理器模式和ARM处理器状态有何区别?列举Cortex-A9处理器的模式和状态。4.ARMv7的内核工作模式有哪些?哪些属于异常工作模式?5.针对不同的异常模式,SP和LR分别使用哪个寄存器?6.简述Cortex-A9存储器的体系架构。ARM的指令系统及汇编程序设计l指令指令系统简介系统简介l寻址方式寻址方式lARM指令集指令集lGNU ARM汇编器支持的伪操作指令汇编器支持的伪
31、操作指令lARM汇编伪指令汇编伪指令lARM汇编编程简介汇编编程简介第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计3.1 3.1 指令系统简介指令系统简介 指令是规定处理器进行某种操作的命令,处理器能够执行的各种指令的集合称为指令系统。3.1.1 ARM指令分类指令分类1、ARM指令集 ARM指令集主要包括数据处理和杂项指令、分支指令、存储器访问指令、程序状态寄存器处理指令、协处理器指令和异常中断指令六大类。所有ARM指令均为32位长度,指令以字对齐方式保存在存储器中。2、Thumb指令集 当处理器工作在Thumb状态时,执行Thumb指令集。所有的Thumb指令
32、都是16位长度,指令以半字对齐方式保存在存储器中。第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计表3.1 ARM指令的典型编码格式3.1.2 ARM指令的编码格式指令的编码格式各部分编码含义如下:lcond:指令执行的条件码;lopcode:指令操作符的编码;lS:决定指令的执行是否影响CPSR(当前程序状态寄存器)的值;lRn:包含第一个源操作数的寄存器编码;第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计3.1.3 ARM指令的条件码域指令的条件码域表3.2
33、 指令的条件码第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计 当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件地执行,如表3.2所示。当指令的执行条件满足时,指令被执行,否则指令被忽略,继续执行下一条指令。第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计3.2 寻址方式寻址方式1.立即数寻址立即数寻址立即数寻址指令中,操作码字段后面的地址部分即操作数本身。SUBS R0,R0,#1 ;R0R0 1,并且影响标志位ADD R0,R0,#0 x3f ;R0R0+0 x3f第第3 3章章 ARMARM
34、的指令系统及汇编程序设计的指令系统及汇编程序设计2.寄存器寻址寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数。ADD R0,R1,R2 ;R0R1+R2该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计3.寄存器移位寻址寄存器移位寻址寄存器移位寻址是ARM指令集特有的寻址方式。当第二个操作数是寄存器方式时,第二个寄存器操作数在与第一个操作数结合之前,先进行移位操作。MOV R0,R2,LSL#3 ;R2的值左移3位,结果放入R0ANDS R1,R1,R2,LSL R3;R2的值左移R3位,
35、然后和R1相“与”,结果放入R1中第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计4.寄存器间接寻址寄存器间接寻址寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。LDR R1,R2;将R2指向的存储单元的数据读出,保存在R1中SWP R1,R1,R2;将寄存器R1的值和R2指定的存储单元的内容交换第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计5.基址变址寻址基址变址寻址基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相
36、加,从而得到一个操作数的有效地址。LDR R0,R1,#4;将寄存器R1的内容加上4形成操作数的有效地址,从该地 址取得操作数存入寄存器R0中。LDR R0,R1,R2;将寄存器R1的内容加上寄存器R2的内容,形成操作数的有效地址,从该地址取得操作数存入寄存器R0中。LDR R0,R1,#4;寄存器R1的内容作为操作数的有效地址,从该地址取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计6.多寄存器寻址多寄存器寻址该指令可以一次完成多个寄存器值的传送,这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值。
37、LDMIA R0,R1,R2,R3,R4 ;R1R0,R2R0+4,R3R0+8,R4R0+12第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计7.相对相对寻址寻址相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到的操作数作为有效地址。8.堆栈寻址堆栈寻址使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计3.3 ARM指令集指令集3.3.1 移位操作指令移位操作指令 移位操作包括LSL(逻辑左移)、ASL(算术左移)、LSR(逻辑
38、右移)、ASR(算术右移)、ROR(循环右移)和RRX(带扩展的循环右移)6种类型。1.LSL(或ASL)LSL(或ASL)可完成对通用寄存器中的内容进行逻辑(或算术)左移的操作。MOV R0,R1,LSL#2 ;将R1中的内容左移两位后传送到R0中。第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计2.LSR LSR可完成对通用寄存器中的内容进行逻辑右移的操作,按操作数所指定的数量向右移位,左端用零来填充。MOV R0,R1,LSR#2 ;将R1中的内容右移两位后传送到R0中,左端用零来填充。3.ASR ASR可完成对通用寄存器中的内容进行算术右移的操作,按操作数所
39、指定的数量向右移位,左端用位31的值来填充。MOV R0,R1,ASR#2 ;将R1中的内容右移两位后传送到R0中,左端用位31的值来填充第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计4.ROR ROR可完成对通用寄存器中的内容进行循环右移的操作,按操作数所指定的数量向右循环移位,左端用右端移出的位来填充。MOV R0,R1,ROR#2 ;将R1中的内容循环右移两位后传送到R0中。5.RRX RRX可完成对通用寄存器中的内容进行带扩展的循环右移的操作,按操作数所指定的数量向右循环移位,左端用进位标志位C来填充。MOV R0,R1,RRX#2 ;将R1中的内容进行带
40、扩展的循环右移两位后传送到R0中。第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计3.3.2 数据处理指令数据处理指令 数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。p数据传送指令:1)MOV MOV R1,R0;将寄存器R0的值传送到寄存器R1中 MOV PC,R14;将寄存器R14的值传送到PC中,常用于子程序返回第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p数据传送指令:2)MOVN 与MOV不同的是在传送之前,将操作数按位取反,再进行传送。MVN R0,#0;将立即数0取反传送到寄存器R0中,完成后R0=-1第
41、第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p算术逻辑运算指令:1)AND 将两个操作数进行逻辑与操作,常用于屏蔽操作数1的某些位。AND R0,R0,#3(#00000011);指令保持R0的0、1位,其余位清零 2)ORR 将两个操作数进行逻辑或运算,常用于设置操作数1的某些位。ORR R0,R0,#3(#00000011);该指令设置R0的0、1位,其余位保持不变第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p算术逻辑运算指令:3)EOR 将两个操作数进行异或操作,常用于反转操作数1的某些位。EOR R0,R0,#3(#0000
42、0011);该指令反转R0的0、1位,其余位不变 4)ADD 将两个操作数进行算术相加运算。ADD R0,R1,R2;该指令将寄存器R1的内容与R2的内容相加,结果放在寄存器R0里面第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p算术逻辑运算指令:5)ADC与ADD的区别是除了两个操作数进行相加外,还包括CPSR中的C标志位。ADDS R0,R4,R8;加低端的字ADCS R1,R5,R9;加第二个字,带进位ADCS R2,R6,R10;加第三个字,带进位ADC R3,R7,R11;加第四个字,带进位上面四行指令的作用是实现两个128位数的加法运算。第第3 3章章
43、 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p算术逻辑运算指令:6)SUB将两个操作数进行相减操作。SUB R0,R2,R3,LSL#1;将R3寄存器的内容左移一位后的结果与R3相减7)SBC与与SUB的区别是还要减去C标志位的反码。SBC R0,R1,R2;R0=R1-R2-!C,并根据结果设置CPSR的进位标志位第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p算术逻辑运算指令:8)RSB与SUB的区别是:减数与被减数的位置颠倒一下。RSB R0,R1,R2;R0=R2 R19)RSC与与RSB的区别是:除了两个数相减外,还要减去C标志位的反码
44、。RSC R0,R1,R2;R0=R2 R1-!C第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p算术逻辑运算指令:10)TST将操作数1和操作数2按位与运算之后,再更新GPSR中的条件标志位。一般用来检测是否设置了特定的位TST R1,#0 xffee;将寄存器R1的值与0 xffe按位与,并根据结果设置CPSR的标志位11)TEQ将操作数1和操作数2按位异或运算之后,再更新GPSR中的条件标志位。一般用来检测操作数1和操作数2是否相等TEQ R1,R2;检查两个操作数是否相等第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p比较指令
45、:1)CMP将两个操作数进行比较,同时更新CPSR中的标志位。CMP R1,R0 ;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位2)CMN操作数1和取反后的操作数2进行比较,再更新CPSR中的标志位。CMN R1,R0;将寄存器R1的值与寄存器R0的值相加,并根据结果设置CPSR的标志位第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p比较指令:3)BIC操作数2是32位的掩码,如果在掩码中设置了某一位,则相应的在操作数1中清除对应的那一位。BIC R0,R0,#1011 ;该指令清除R0中的位0、1和3,其余的位保持不变第第3 3章章 AR
46、MARM的指令系统及汇编程序设计的指令系统及汇编程序设计3.3.3 乘法指令与乘加指令乘法指令与乘加指令指令中的寄存器必须是通用寄存器,不能是立即数。p乘法指令:1)MUL操作数1和操作数2进行相乘运算。MUL R0,R1,R2 ;R0=R1 R2第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p乘法指令:2)SMULL完成操作数1与操作数2的乘法运算,并把结果的低32位放置到目的寄存器Low中,结果的高32位放置到目的寄存器High中。SMULL R0,R1,R2,R3;R0=(R2 R3)的低32位,R1=(R2 R3)的高32位3)UMLAL与SMULL的区别
47、是操作数1和2均为无符号整数。UMULL R0,R1,R2,R3;R0=(R2R3)的低32位,R1=(R2R3)的高32位第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p乘加指令:1)MLA完成操作数1与操作数2的乘法运算,再将乘积加上操作数3,并把结果放置到目的寄存器中。MLA R0,R1,R2,R3;R0=R1 R2+R32)SMLAL与SMULL的区别是将SMULL得到的结果低32位同目的寄存器的低32位相加放到目的寄存器low中,高32位是类似的。SMLAL R0,R1,R2,R3 ;R0=(R2R3)的低32位+R0,R1=(R2R3)的高32位+R1
48、第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p乘加指令:3)UMLAL与SMLAL的区别是操作数1和2均为无符号的32位整数。UMLAL R0,R1,R2,R3;R0=(R2R3)的低32位+R0,R1=(R2R3)的高32位+R1第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计3.3.4 加载加载/存储指令存储指令加载/存储指令用于寄存器和存储器之间的数据传送。加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。p加载指令:1)LDR从存储器中将一个32位的字数据传送到目的寄存器中。LDR R0,R1,R2;将存储器
49、地址为R1+R2的字数据读入寄存器R0LDR R0,R1,R2;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p加载指令:2)LDRH从存储器中将一个16位的半字数据传送到目的寄存器中,将寄存器的高16位清零。LDRH R0,R1,#8;将存储器地址为R1+8的半字数据读入寄存器R0,并将R0的高16位清零3)LDRB与LDRH的区别是传送的是8位字节数据,将寄存器的高24位清零。LDRB R0,R1;将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零第第3 3章章 ARMARM
50、的指令系统及汇编程序设计的指令系统及汇编程序设计p存储指令:1)STR将源寄存器的32位数据传送到存储器上面。STR R0,R1,#8;将R0中的字数据写入以R1+8为地址的存储器中2)STRH将源寄存器的低16位数据传送到存储器上面。STRH R0,R1,#8;将寄存器R0中的半字数据写入以R1+8为地址的存储器中第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程序设计p存储指令:3)STRB将源寄存器的低8位数据传送到存储器上面。STRB R0,R1;将寄存器R0中的字节数据写入以R1为地址的存储器中第第3 3章章 ARMARM的指令系统及汇编程序设计的指令系统及汇编程