1、ARM体系结构与编程2022-12-9内容ARM概述和分类ARM指令集和汇编程序设计ARM体系结构和存储系统ARM中断和异常处理第一章ARM概述和分类2022-12-9内容ARM简介ARM的分类ARM的命名规则基于ARM的嵌入式系统概述2022-12-9ARM介绍什么是ARMARM是一个公司的名字ARM代表一项技术,即Advanced RISC MachineARM是一个内核,而不是我们看到的具体的芯片ARM发展的历程第一片ARM处理器是1983年10月到1985年4月间 在位于英国剑桥的Acorn Computer公司开发 1990年,为广泛推广ARM技术而成立了独立的公司 Advance
2、RISC Machine(ARM)主要设计ARM系列RISC处理器内核授权ARM内核给生产和销售半导体的合作伙伴ARM 公司不生产芯片IP(Intelligence Property)另外也提供基于ARM架构的开发设计技术软件工具,评估板,调试工具,应用软件,总线架构,外围设备单元,等等20世纪90年代,ARM快速进入世界市场。ARM Offices Worldwide800+雇员全球EnglandCambridge,Maidenhead,Sheffield,BlackburnGermanyMunichFrance Paris,Sophia AntipolisKoreaSeoulUSSeatt
3、le,Los Gatos,Walnut Creek,Austin,Boston,San DiegoChinaTaiwan and ShanghaiJapanShin-Yokohama(Tokyo)ARM Partnership Model2022-12-9ARM的应用2022-12-9ARM分类基于指令集体系结构(构架ISA)的分类ARM V1 体系是最初版本,只有26位的寻址空间,没有乘法指令,最终没有商业化ARM V2 体系与V1体系同为26位寻址空间,具有乘法和加法指令,支持协处理器ARM V3 体系的寻址范围扩展到32位,具有乘法和加法指令,支持协处理器ARM V4 体系增加了半字存储
4、操作,对调试的支持以及支持嵌入的ICEARM V5 体系增加了DSP指令支持和对Java指令的支持ARM V6 体系增加了媒体指令,ARMv6指令集合中加入了超过60条SIMD单指令多数据指令ARM V7 体系定义了三种独立的内核型A(应用领域),R(实时领域),M(控制领域)2022-12-9ARM系列处理器基于处理器内核的分类ARM7 系列ARM9 系列ARM9E 系列ARM10E 系列SecurCore 系列StrongARM/Xscale(Intel)ARM112022-12-9ARM命名举例核体系结构ARM1V1ARM2V2ARM2aS,ARM3V2aARM6,ARM600,ARM6
5、10V3ARM7,ARM700,ARM710V3ARM7TDMI,ARM710T,ARM720T ARM740TV4TStrong ARM,ARM8,ARM810V4ARM9TDMI,ARM920T,ARM940TV4TARM9E-SV5TEARM10TDMI,ARM1020EV5TEARM11,ARM1156T2-S,ARM1156T2F-S,ARM1176JZ-S,ARM11JZF-SV62022-12-9ARM体系的变种1)Thumb指令集(T变种)Thumb指令集是把32位的ARM指令集的一个子集重新编码后而形成的一个特殊的16位的指令集 2)长乘指令(M变种)长乘指令是一种生成64位
6、相乘结果的乘法指令(此指令为ARM指令),M变种增加了两条长乘指令3)增强型DSP指令(E变种)E变种的ARM体系增加了一些增强处理器对典型的DSP算法处理能力的附加指令。4)Java加速器Jazelle(J变种)ARM的Jazelle技术是Java语言和先进的32位RISC芯片完美结合的产物。5)ARM媒体功能扩展(SIMD变种)2022-12-9ARM的命名规则ARM的命名分成两类:基于ARM Architecture的版本命名规则;基于ARM Architecture版本的处理器系列命名规则。举个例子,s3c2410采用ARMv4T架构版本,ARM920T处理器系列,其中处理器核为ARM
7、9TDMI。2022-12-9基于ARM Architecture的版本命名 规则:|ARMv|n|variants|x(variants)|分成四个组成部分:ARMv-固定字符,即ARM Version n-指令集版本号。迄今为之,ARM架构版本发布了7个系列,所以n=1:7。其中最新的版本是第7版 variants-变种。x(variants)-排除x后指定的变种常见的变种有:T-Thumb指令集M-长乘法指令E-增强型DSP指令J-Java加速器JazelleSIMD-ARM媒体功能扩展例如,ARMv5TxM表示ARM指令集版本为5,支持T变种,不支持M变种2022-12-9基于ARM
8、Architecture版本的处理器系列命名采用上述的架构,形成一系列的处理器。有时候还要区分处理器核和处理器系列。不过,在这里其实不用区分太细,毕竟这是功能的小部分的变化,核心是相同的。规则:ARMxyzTDMIEJF-Sx-处理器系列y-存储管理/保护单元z-cacheT-支持Thumb指令集D-支持片上调试M-支持快速乘法器I-支持Embedded ICE,支持嵌入式跟踪调试E-支持增强型DSP指令J-支持JazelleF-具备向量浮点单元VFP-S-可综合版本2022-12-9基于ARM的嵌入式系统概述(1)RISC设计思想 与CISC相比,有以下几个方面不同:a:设计重点不同,RIS
9、C重点在于通过软件的灵活降低硬件执行指令的复杂度,即使得编译器更高的复杂性 b:指令集,RISC减少了指令种类,操作也简单,基本是一个周期执行一条指令,每一条指令长度是固定,而CISC指令长度不固定,执行也需要多个周期 c:寄存器,RISC拥有更多寄存器,都可以存放数据或地址,而CISC都是用于特定目的的专用寄存器 d:load-store结构,即处理器只处理寄存器中的数据,独立的load-store指令完成数据在寄存器和外部存储器之间的传送,即数据处理与存储器访问分开,而CISC能够直接处理存取器中的数据注:ARM指令集属于RISC指令集,但与单纯的RISC有以下几方面不同2022-12-9
10、基于ARM的嵌入式系统概述ARM指令集属于RISC指令集,但与单纯的RISC有以下几方面不同:a:大部分ARM指令是单周期完成的,但也有不是的,如多寄存器的load-store指令的执行周期是不确定的,具体由被传送的寄存器个数决定。b:内嵌桶型移位寄存器 c:Thumb 16位指令集 d:条件执行 e:增强指令,如添加了强大的数字信号处理器(DSP)指令,以支持1616位乘法操作及饱和操作2022-12-9基于ARM的嵌入式系统概述(2)高速缓存(cache)1、为什么采用高速缓存 微处理器的时钟频率比内存速度提高快得多,高速缓存可以提高内存的平均性能。2、高速缓存的工作原理 高速缓存是一种小
11、型、快速的存储器,它保存部分主存内容的拷贝。CPU高速缓存控制器CACHE主存数据数据地址2022-12-9基于ARM的嵌入式系统概述(3)嵌入式处理器分类微处理器(Micro Processor Unit,MPU)微控制器(Micro Controller Unit,MCU)嵌入式DSP(Digital Signal Processor,DSP)片上系统(System On Chip)嵌入式微处理器嵌入式微处理器的基础是通用计算机中的CPU。在应用中,将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的母板功能,这样可以大幅度减小系统体积和功耗。为满嵌入式应用 的特殊要求,嵌入式微处
12、理器虽然在功能上和标准微处理器基本是一样的,但在工作温度、抗电磁干扰、可靠性等方面都做了各种增强。目前主要的嵌入式处理器类型有Am186/88Am186/88、386EX386EX、SC-400SC-400、PowerPCPowerPC、6800068000、MIPSMIPS、ARM/StrongARMARM/StrongARM系列等嵌入式微处理器嵌入式微控制器 嵌入式微控制器又称单片机,顾名思义,就是将整个计算机系统集成到一块芯片中。嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、WatchDog、I/O、串行口、脉宽调制输
13、出、A/D、D/A、Flash RAM、EEPROM等各种必要功能和外设。为适应不同的应用需求,一般一个系列的单片机具有多种衍生产品,每种衍生产品的处理器内核都是一样的,不同的是存储器和外设的配置及封装。这样可以使单片机最大限度地和应用需求相匹配,功能不多不少,从而减少功耗和成本。和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的主流。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制器。嵌入式微控制器嵌入式微控制器目前的品种和数量最多,比较有代表性的通用系列包括8051、P51XA、MCS-251、MCS
14、-96/196/296、C166/167、MC68HC05/11/12/16、68300等。另外还有许多半通用系列如:支持USB接口的MCU 8XC930/931、C540、C541;支持I2C、CAN-Bus、LCD及众多专用MCU和兼容系列。目前MCU占嵌入式系统约70的市场份额。嵌入式DSP处理器 DSP处理器对系统结构和指令进行了特殊设计,使其适合于执行DSP算法,编译效率较高,指令执行速度也较高。在数字滤波、FFT、谱分析等方面DSP算法正在大量进入嵌入式领域,DSP应用正从在通用单片机中以普通指令实现DSP功能,过渡到采用嵌入式DSP处理器。嵌入式DSP处理器有两个发展来源,一是D
15、SP处理器经过单片化、EMC改造、增加片上外设成为嵌入式DSP处理器,TI的TMS320C2000/C5000等属于此范畴;二是在通用单片机或SOC中增加DSP协处理器,例如Intel的MCS-296和Infineon(Siemens)的TriCore。推动嵌入式DSP处理器发展的另一个因素是嵌入式系统的智能化,例如各种带有智能逻辑的消费类产品,生物信息识别终端,带有加解密算法的键盘,ADSL 接入、实时语音压解系统,虚拟现实显示等。这类智能化算法一般都是运算量较大,特别是向量运算、指针线性寻址等较多,而这些正是DSP 处理器的长处所在。嵌入式DSP处理器 有代表性的产品是Texas Inst
16、rumentsTexas Instruments的 TMS320TMS320系列和MotorolaMotorola的DSP56000DSP56000系列。TMS320 TMS320系列处理器包括用于控制的C2000C2000系列,移动通信的C5000C5000系列,以及性能更高的C6000C6000和C8000C8000系列。Motorola Motorola公司的DSP56000DSP56000已经发展成为DSP56000DSP56000,DSP56100,DSP56100,DSP56200DSP56200和DSP56300DSP56300等几个不同系列的处理器。PHILIPS PHILIP
17、S公司也推出了基于可重置嵌入式DSPDSP结构低成本、低功耗技术上制造的DSPDSP处理器,特点是具备双HarvardHarvard结构和双乘/累加器单元,应用目标是大批量消费类电子产品。随着EDI的推广和VLSI设计的普及化,及半导体工艺的迅速发展,在一个硅片上实现一个更为复杂的系统的时代已来临,这就是System On Chip(SOC)。各种通用处理器内核将作为SOC设计公司的标准库,和许多其它嵌入式系统外设一样,成为 VLSI设计中一种标准的器件,用标准的 VHDL等语言描述,存储在器件库中。用户只需定义出其整个应用系统,仿真通过后就可以将设计图交给半导体工厂制作样品。这样除个别无法集
18、成的器件以外,整个嵌入式系统大部分均可集成到一块或几块芯片中去,应用系统电路板将变得很简洁,对于减小体积和功耗、提高可靠性非常有利。它结合了许多功能区块,将功能做在一个芯片上,ARM RISC、MIPS RISC、DSP或是其他的微处理器核心,加上通信的接口单元,例如通用串行端口(USB)、TCP/IP通信单元、GPRS通信接口、GSM通信接口、IEEE1394、蓝牙模块接口等等,这些单元以往都是依照各单元的功能做成一个个独立的处理芯片。嵌入式片上系统(SoC)2022-12-9基于ARM的嵌入式系统概述(4)嵌入式系统硬件总线(4)嵌入式系统硬件 微处理器(CPU)是嵌入式系统硬件平台的核心
19、构件,但不是全部。按照冯诺依曼体系结构思想,计算机的硬件是由CPU、存储器和I/O设备三部分组成的。总线是把CPU与存储器、I/O设备相连接的信息通道,但总线并不仅仅指的是一束信号线,而应包含相应的通信协议。按照使用场合的不同,总线分成芯片级总线(CPU总线)、板卡级总线(内总线)和系统级总线(外总线)。总线和总线桥CPU低速设备桥数据高速总线存储器高速设备键盘低速总线2022-12-9基于ARM的嵌入式系统概述(4)嵌入式系统硬件 AMBA总线是一个多总线系统。规范定义了三种可以组合使用的不同类型的总线:AHB(Advanced High-performance Bus)、ASB(Advan
20、ced System Bus)和APB(Advanced Peripheral Bus)。AHB:CPU核、存储器控制器、中断控制器、LCD控制器、DMA和USB主机模块等(可以包括多个主模块)APB:WATCHDOG、IIS、IIC、PWM、ADC、UART、GPIO、RTC等(只有一个主模块)ASB:连接高性能系统模块,在某些需高速且不必使用AHB总线的场合使用2022-12-9基于ARM的嵌入式系统概述(5)嵌入式存储器 大多数嵌入式产品的存储器结构是分层的,即多种类型的存储器 在决定存储器层次、宽度、类型等特性时,需综合考虑产品的价格、性能、功耗等因素存储器系统寄存器高速缓存SRAM主
21、存储器DRAM本地存储器 Flash、ROM、磁盘网络存储器 Flash、ROM、磁盘时钟周期01105010020000000分层结构存储器种类RAMRAM:随机存取存储器SRAMSRAM:静态随机存储器(高速存储器或cachecache)不需刷新电路即能保存内部存储数据。DRAMDRAM:动态随机存储器,一般使用电容存储,需经常刷新 1 1)SRAMSRAM比DRAMDRAM快 2 2)SRAMSRAM比DRAMDRAM耗电多 3 3)DRAMDRAM存储密度比SRAMSRAM高得多 4 4)DRAMDRAM需要周期性刷新SDRAMSDRAM:同步动态随机存储器,是DRAMDRAM中的一种
22、,因与处理器总线同步,故能突发式地输出到总线ROMROM:只读存储器闪速存储器(FLASH)PROM:可编程ROMEPROM:可擦除、可编程ROMEEPROM:电可擦除、可编程ROMFLASH:闪存相对传统的EPROM芯片,这种芯片可以用电气的方法快速地擦写 由于快擦写存储器不需要存储电容器,故其集成度更高,制造成本低于DRAM 它使用方便,既具有SRAM读写的灵活性和较快的访问速度,又具有ROM在断电后可不丢失信息的特点,所以快擦写存储器技术发展十分迅速 FLASH的架构大致上可分为具程序执行能力的NOR架构以及储存数据的NAND架构 NOR技术和NAND技术NOR Flash市场目前由In
23、tel和AMD公司主导,其主要功能是程序的储存,如PC中的BIOS NOR的特点是芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在14MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。NAND Flash相对上属于封闭的市场,专利权掌握在少数厂商手中,Toshiba 和Samsung公司为主,其主要功能是数据的储存,如小型存储卡、随身电子盘等都是 NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的
24、管理需要特殊的系统接口。2022-12-9基于ARM的嵌入式系统概述(6)初始化启动代码 (1)初始化硬件配置 (2)诊断 (3)引导 初始化硬件配置包括:设置堆栈指针、硬件工作时钟、存储器映射等等 I/O寄存器 快速SRAM 大块DRAM 启动ROM启动之前 I/O寄存器 快速SRAM 大块DRAM 启动ROM启动之后2022-12-9基于ARM的嵌入式系统概述(6)初始化启动代码 诊断硬件是否能正常工作,不能工作的是否隔离,即识别和隔离故障。引导过程包括装载一个映像文件并将控制权交给它,装载可以包括拷贝整个程序(代码和数据),也可以只拷贝易变(volatile)变量的数据到RAM中,启动后
25、,通过更改PC指向映像文件的起始地址,从而交出控制权ARM的特点RISC指令集Load/Store体系结构固定的32位指令大多数指令单周期完成Thumb/DSP/jazeller功能扩展低功耗2022-12-9小结什么是ARMARM的特点ARM的分类ARM的命名规则嵌入式硬件体系结构嵌入式存储器存储器映射第二章ARM体系结构和存储系统2022-12-9内容流水线(pipeline)存储模式(model)寄存器2022-12-9存储地址空间ARM结构使用单个平面的232个8位字节地址空间。字节地址按照无符号数排列,从0到2321。地址空间可以看作是包含230个32位字,或231个16位半字。32
26、位地址线/数据线,支持如下数据类型:字节(byte)8bits半字(Half word)16bits,半字必须对齐2字节边界字(Word)32bits,字必须对齐4字节边界2022-12-9存储ARMARM处理器可以将存储器中的字以下列格式存储:大端格式(Big-endianBig-endian):字数据的高字节存储在低地址中,而低字节存储在高地址中小端格式(Little-endianLittle-endian):与小端对齐相反,字数据的高字节存储在高地址中,低字节存储在低地址中2022-12-9 ARM结构通常希望所有的存储器访问都合理的对齐。具体来说就是字访问的地址通常是字对齐的,而半字访
27、问使用的地址是半字对齐的。不按这种方式对齐的存储器访问称为非对齐的存储器访问。非对齐的取指不可预知结果ARM状态忽略低2位;Thumb状态忽略最低位 (忽略由存储器实现)非对齐的数据访问执行结果不可预测忽略字单元地址的低2位;忽略半字单元地址的最低位(忽略可能由处理器或存储器完成)存储非对齐的存储器访问指令流水线为增加处理器指令流的速度,ARM7 系列使用3级流水线.允许多个操作同时处理,比逐条指令执行要快。PC指向正被取指的指令,而非正在执行的指令FetchDecodeExecute从存储器中读取指令解码指令寄存器读(从寄存器Bank)移位及ALU操作寄存器写(到寄存器Bank)PCPCPC
28、-4PC-2PC-8PC-4ARMThumb2022-12-9处理器状态处理器状态ARM处理器包含32位ARM指令集和16位Thumb指令集。因此ARM处理器有两种操作态:ARM状态:32位,这种状态下执行的是字方式的ARM指令;Thumb状态:16位,这种状态下执行半字方式的Thumb指令。注意:两个状态之间的切换并不影响处理器模式或寄存器内容。2022-12-9处理器模式简介ARM体系结构支持7种处理器模式,分别为:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式,如下表所示。这样的好处是可以更好的支持操作系统并提高工作效率。特权模式:除用户模式外的6种模式异常模式
29、:除系统模式外的特权模式 2022-12-9处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断(irq)用于通用中断处理IRQ异常响应时进入此模式 管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式处理器模式2022-12-9内部寄存器简
30、介在ARM处理器内部有37个用户可见的寄存器:30个通用寄存器6个状态寄存器1个专用于记录当前状态5个专用于记录模式切换前的状态1个程序计数器PC在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。2022-12-9寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11
31、_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15CPSRCPSRSPSR无SPSR_svcSPSR_abtSPSR_undSPSR_irq SPSR_fiq无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用户无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系统SPSR_svcCPSRR15R14_svcR13_svcR12R11
32、R10R9R8R7R6R5R4R3R2R1R0管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定义SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中断SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中断ARM状态各模式下可以访问
33、的寄存器2022-12-9内部寄存器 r0 r12:通用寄存器。当C和汇编互相调用时,r0 r3用来传递函数参数,可记为a0 a3 r13:用于各种模式下的堆栈寄存器(sp)r14:用来保存程序返回地址的链接寄存器(lr)r15:程序计数器(pc)r8_FIQ r12_FIQ:允许快速中断处理 r8_User r12_User:除了FIQ模式外各模式公用 除了User和System模式外,各种模式都有自己独立的r13和r142022-12-9Label程序A程序BR14内部寄存器R14寄存器与子程序调用BL Label地址A?MOV PC,LRR14(地址A)Label?1.程序A执行过程中调
34、用程序B;操作流程2.程序跳转至标号Label,执行程序B。同时硬件将“BL Label”指令的下一条指令所在地址存入R14;3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;2022-12-9内部寄存器正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。LDR R0,PC?PCPC-4PC-8正在执行正在译码正在取指流水线状态地址程序代码2022-12-9程序状态寄存器简介ARM内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处
35、理器的状态,其包含:4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V));2个中断禁止位,分别控制一种类型的中断;5个对当前处理器模式进行编码的位;1个用于指示当前执行指令(ARM还是Thumb)的位。2022-12-9NZCV IM0M1M2M3M4TF.31 30 29 28 27 26 8 7 6 5 4 3 2 1 0程序状态寄存器简介条件代码标志保留控制位溢出标志进位或借位扩展零负或小于IRQ禁止FIQ禁止状态位模式位NZCVIM0M1M2M3M4TFCPSR寄存器的格式M4:0模式可见的Thumb状态寄存器可见的ARM状态寄存器10000用户R0R7,SP,LR,PC,C
36、PSRR0R14,PC,CPSR 10001快中断R0R7,SP_fiq,LR_fiq,PC,CPSR,SPSR_fiq R0R7,R8_fiqR14_fiq,PC,CPSR,SPSR_fiq 10010中断R0R7,SP_irq,LR_irq,PC,CPSR,SPSR_fiq R0R12,R13_irq,R14_irq,PC,CPSR,SPSR_irq 10011管理R0R7,SP_svc,LR_svc,PC,CPSR,SPSR_svc R0R12,R13_svc,R14_svc,PC,CPSR,SPSR_svc 10111中止R0R7,SP_abt,LR_abt,PC,CPSR,SPSR_
37、abt R0R12,R13_abt,R14_abt,PC,CPSR,SPSR_abt 11011未定义R0R7,SP_und,LR_und,PC,CPSR,SPSR_und R0R0R12,R13_und,R14_und,R12,R13_und,R14_und,PC,CPSR,SPSR_undPC,CPSR,SPSR_und11111系统R0R7,SP,LR,PC,CPSR R0R14,PC,CPSR CPSR模式位设置表2022-12-9程序状态寄存器简介每个异常模式还带有一个程序状态保存寄存器(SPSR),它用于保存在异常事件发生之前的CPSR。CPSR和SPSR通过特殊指令进行访问。注意
38、:如果通过程序修改CPSR寄存器中的模式位进入异常模式,那么硬件将不会把CPSR保存至SPSR中。2022-12-9小结ARM处理器存储格式指令流水线ARM处理器状态ARM处理器模式SPLRPCCPSRSPSR第三章ARM指令系统2022-12-9内容ARM指令集ARM汇编程序设计ARM处理器寻址2022-12-9ARM处理器寻址方式寻址方式分类寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有9种基本寻址方式。1.寄存器寻址;2.立即寻址;3.寄存器移位寻址;4.寄存器间接寻址;5.基址寻址;6.多寄存器寻址;7.堆栈寻址;8.块拷贝寻址;9.相对寻址。20
39、22-12-9操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下:MOV R1,R2 ;将R2的值存入R1 SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0 0 xAA0 x55R2R1ARM处理器寻址方式寻址方式分类寄存器寻址MOV R1,R20 xAA2022-12-9 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下:SUBSR0,R0,#1 ;R0减1,结果放入R0,并且影响标志位
40、MOV R0,#0 xFF000 ;将立即数0 xFF000装入R0寄存器 0 x55R0MOV R0,#0 xFF00程序存储ARM处理器寻址方式寻址方式分类立即寻址MOV R0,#0 xFF000 xFF00从代码中获得数据2022-12-9寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOVR0,R2,LSL#3 ;R2的值左移3位,结果放入R0,;即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“与”操作,结果放入R1
41、0 x55R0R20 x01ARM处理器寻址方式寻址方式分类寄存器移位寻址MOV R0,R2,LSL#30 x080 x08逻辑左移3位2022-12-9指令集介绍ARM指令集第2个操作数LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C2022-12-9寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下:LDRR1,R2;将R2指向的存储单元的数据读出;保存在R1中 SWPR1,R1,R2;将寄存器R1的值和R2指定的存储;单元的内容交换 0 x55
42、R0R2 0 x400000000 xAA0 x40000000ARM处理器寻址方式寻址方式分类寄存器间接寻址LDR R0,R20 xAA2022-12-9基址寻址就是将基址寄存器的内容与指令中给出的偏移量(4K)相加/减,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。寄存器间接寻址是偏移量为0的基址加偏移寻址。基址寻址指令举例如下(前索引寻址):LDRR2,R3,#0 x0C ;读取R3+0 x0C地址上的存储单元的内容,放入R2 STRR1,R0,#-4!;先R0=R0-4,然后把R0的值寄存 ;到保存到R1指定的存储单元 ARM处理
43、器寻址方式寻址方式分类基址寻址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0C0 xAA将R3+0 x0C作为地址装载数据基址寻址指令举例如下:LDRR0,R1,#4 ;R0=R1,R1R14 ;后索引基址寻址 ;ARM这种自动索引机制不消耗额外的时间LDR R0,R1,R2 ;R0=R1+R2ARM处理器寻址方式寻址方式分类基址寻址2022-12-9多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:LDMIAR1!,R2-R7,R12 ;将R1指向的单元中的数据读出到 ;
44、R2R7、R12中(R1自动加4)STMIAR0!,R2-R7,R12 ;将寄存器R2R7、R12的值保 ;存到R0指向的存储,单元中(R0自动加4)0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器ARM处理器寻址方式寻址方式分类多寄存器寻址LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。堆栈寻址是隐含的,它使用一个专门的寄
45、存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈 向下生长:向低地址方向生长,称为递减堆栈ARM处理器寻址方式寻址方式分类堆栈寻址2022-12-9ARM处理器寻址方式寻址方式分类堆栈寻址栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP向下增长向上增长0 x123456780 x12345678堆栈压栈堆栈压栈2022-12-9栈顶SP栈顶SP栈底空堆栈栈底满堆栈 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈(压栈时先修改sp,后数据压栈;出栈时先数据出栈,后修改sp)堆栈指针指向下一个待压入数据的空位
46、置,称为空堆栈。(压栈时先数据压栈,后修改sp;出栈时先修改sp,后数据出栈)ARM处理器寻址方式寻址方式分类堆栈寻址0 x123456780 x12345678栈顶SP0 x12345678栈顶SP压栈压栈2022-12-9所以可以组合出四种类型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等;空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等;满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDME
47、D、STMED等。ARM处理器寻址方式寻址方式分类堆栈寻址2022-12-9多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。如:STMIAR0!,R1-R7;将R1R7的数据保存到存储器中。;存储指针R0在保存第一个值之后增加,;增长方向为向上增长。STMIBR0!,R1-R7;将R1R7的数据保存到存储器中。;存储指针R0在保存第一个值之前增加,;增长方向为向上增长。ARM处理器寻址方式寻址方式分类块拷贝寻址2022-12-9相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下
48、:BL SUBR1;调用到SUBR1子程序BEQLOOP;条件跳转到LOOP标号处.LOOPMOVR6,#1.SUBR1.ARM处理器寻址方式寻址方式分类相对寻址2022-12-9ARM指令小节目录1.指令格式2.数据处理指令3.条件码4.乘法指令5.ARM分支指令6.存储器访问指令7.杂项指令8.伪指令2022-12-9指令集介绍 ARM指令集指令格式2022-12-9 ARM是三地址指令格式,指令的基本格式如下:指令集介绍ARM指令集基本指令格式 S ,其中号内的项是必须的,号内的项是可选的。各项的说明如下:opcode:指令助记符;cond:执行条件;S:是否影响CPSR寄存器的值;Rd
49、:目标寄存器;Rn:第1个操作数的寄存器;operand2:第2个操作数;指令语法目标寄存器(Rd)源寄存器1(Rn)源寄存器2(Rm)ADD r3,r1,r2r3r1r2例:2022-12-9ARM指令的基本格式如下:指令集介绍ARM指令集第2个操作数 S ,灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式:#immed_8r常数表达式;Rm寄存器方式;Rm,shift寄存器移位方式;2022-12-9指令集介绍ARM指令集第2个操作数#immed_8r常数表达式该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。循环右移10位0 x120 0 0 1
50、0 0 1 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x000 0 0 0 0 0 0 00 x801 0 0 0 0 0 0 00 x040 0 0 0 0 1 0 08位常数例如:ADDR1,R2,#0 x0F (0 x103)、(0 x104)(0 x102)2022-12-9指令集介绍ARM指令集第2个操作数Rm寄存器方式 在寄存器方式下,操作数即为寄存器的数值。例如:SUBR1,R1,R22022-12-9指令集介绍ARM指令集第2个操作数Rm,shift寄存器
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。