ARM体系结构与编程-第一章课件_第1页
ARM体系结构与编程-第一章课件_第2页
ARM体系结构与编程-第一章课件_第3页
ARM体系结构与编程-第一章课件_第4页
ARM体系结构与编程-第一章课件_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARM体系结构与编程授课教师:岳洋email:办公电话:86223625

1课件这门课主要讲的内容ARMAdvancedRISCMachine1、ARM基础知识(第1章)2、ARM汇编(第2、3、4、8章)3、ARM存储系统MMU(第5章)MemoryManagementUnit4、异常中断处理(第9章)2课件前言了解嵌入式系统概述1嵌入式系统简介2嵌入式系统的定义3嵌入式系统的特点4嵌入式系统的组成5嵌入式系统的应用3课件嵌入式系统简介嵌入式系统的历史与现状从1946年电子计算机的诞生,发展到今天,在许多场合要求将微型机嵌入到一个对象体系中,实现智能化控制。为了区别于通用计算机系统,把嵌入到对象体系中,实现智能化控制的计算机,称作嵌入式计算机系统。5课件嵌入式系统简介现代计算机技术的两大分支计算机进入了通用计算机与嵌入式计算机两大分支并行发展时代。通用计算机侧重的发展方向:高速、海量的数值计算、总线速度提升,扩大存储容量。嵌入式计算机对体积、功耗、功能、可靠性、专用性有较高要求。6课件2嵌入式系统的定义7课件嵌入式系统的应用消费电子嵌入式应用信息家电智能玩具军事电子通信设备移动存贮工控设备智能仪表汽车电子网络设备工业军事国防电子商务网络9课件现实生活中的嵌入式系统实例家庭环境10课件现实生活中的嵌入式系统实例办公室环境11课件现实生活中的嵌入式系统实例国防领域13课件现实生活中的嵌入式系统实例交通领域14课件现实生活中的嵌入式系统实例航空领域15课件第1章ARM概述及其基本编程模型17课件第1章目录8.异常9.复位10.存储器及存储器映射I/O11.寻址方式简介12.ARM7指令简介13.协处理器接口14.调试接口简介1.简介2.ARM7三级流水线3.处理器状态4.处理器模式5.内部寄存器6.程序状态寄存器7.体系结构直接支持的数据类型18课件1.1ARM简介ARM公司简介ARM是AdvancedRISCMachines的缩写,它是英国一家微处理器行业的知名企业,该企业设计了大量高性能、廉价、耗能低的RISC处理器。RISC特点:精简指令集执行周期更短;硬件结构简单,配备大量寄存器,配合运算和操作;arm9采用哈佛结构(数据总线和指令总线分离),使得指令操作和数据操作可同时进行,速度更快。公司的特点是只设计芯片,而不生产。它将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务。19课件1.1ARM简介ARM有三种含义:一个公司的名称;一类处理器的通称;一种技术的名称。ARM不是完整的单片机,它只是一个内核。所谓以ARM为核的单片机,就是把ARM作为中央处理器(核),根据需要设计出:I/O口、功能模块、外围总线接口,用总线把几部分和ARM核连接在一起,组成一个单片机。这个单片机由ARM核控制。21课件1.1ARM简介在学习单片机时,结构相对简单,会较快的涉及定时器/计数器、串口、I/O引脚的使用。学习ARM核时,同样也是对寄存器的设置(汇编指令、c语言)来控制ARM核、I/O管脚、功能模块,实现功能。ARM与单片机学习过程有许多相识的地方。很多外围电路适用ARM也适用于单片机。学会ARM核以后,就大致掌握了所有以ARM为核的单片机。无论这个单片机结构多么复杂,功能多么强大,也无论它来自哪个厂家。22课件1.1ARM简介ARM体系结构

ARM处理器为RISC(reduceinstructionsetcomputing)芯片,其简单的结构使ARM内核非常小,这使得器件的功耗也非常低。它具有经典而先进的RISC特点:数据处理操作绝大多数只针对寄存器(D触发器结构,在CPU内部,离cpu最近,速度最快)的内容,而不直接对存储器(内存和外存,在CPU外部,存储器能够保存的数据量大)进行操作;通过load/store指令在寄存器和存储器之间传递数据。RISC处理器,速度更快,较x86处理器快60%,硬件结构简单。简单的寻址模式;统一和固定长度的指令域(32位)简化了指令的译码。具有大量的寄存器(37个)ARM体系还采用一些特别技术,见教材第2页23课件1.1ARM简介各ARM体系结构版本(这里主要指指令集)目前ARM公司定义了7种主要的ARM指令集体系结构版本,以版本号V1~V7表示。拥有相同指令集版本的ARM芯片,虽然出自不同的生产厂商,但它们使用的指令和应用软件是相互兼容的。25课件1.1ARM简介各ARM体系结构版本——V1该版本的ARM体系结构,只有26位的寻址空间,如今现在已经废弃不再使用,没有商业化,其特点为:基本的数据处理指令(加,减,与,或,非,比较)(这个版本不包括乘法);字节、字和半字加载/存储指令;具有分支指令,包括在子程序调用中使用的分支和链接指令;在操作系统调用中使用的软件中断指令(SWI)。26课件1.1ARM简介各ARM体系结构版本——V4 目前大多使用的arm核,使用的是V4t,v5te版本,它相对V3版本作了以下的改进:增加了半字加载(LDRH)/存储(STRH)指令;增加了字节(LDRSB/STRSB)和半字的加载和符号扩展指令(LDRSH/STRSH);增加了T变种,具有可以转换到Thumb状态的指令;增加了新的特权处理器模式。29课件1.1ARM简介各ARM体系结构版本——V5在V4版本的基础上,对现在指令的定义进行了必要的修正,对V4版本的体系结构进行了扩展并增加了指令,对数字信号处理

(DSP)算法提供增强算法支持,具体如下:改进了ARM/Thumb状态之间的切换效率;允许T变种(支持Thumb指令集)和非T变种一样,使用相同的代码生成技术;增加前导零计数(最高有效位前0的个数)指令CLZ和软件断点指令BKPT;对乘法指令如何设置标志作了严格的定义。30课件1.1ARM简介各ARM体系结构版本——V6ARM体系版本6是2001年发布的。其主要特点是增加了SIMD(SingleInstructionMultipleData,单指令多数据流)(SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。)功能扩展。它适合使用电池供电的高性能的便携式设备,便携式设备一方面需要处理器提供高性能,另一方面又需要低功耗。ARM体系版本6首先在2002年春季发布的ARM11处理器中使用。31课件1.1ARM简介各ARM体系结构版本——V7V7A----应用程序架构通过多模式和对基于MMU的虚拟内存系统体系结构的支持,实现传统ARM体系结构。

V7B----实时架构通过多模式和对基于MPU(根据所处模式的访问权限保护内存)的受保护内存系统体系结构的支持。V7M----通过寄存器硬件堆栈以及对使用高级语言写入中断处理程序的支持,微控制器架构实现了专为快速中断处理而设计的程序员模型。

32课件1.1ARM简介ARM处理器核简介ARM公司开发了很多系列的ARM处理器核,目前最新的系列已经是ARM11了,而ARM6核以及更早的系列已经很罕见了。目前应用比较广泛的系列是:ARM7ARM9ARM9EARM10SecurCoreXscaleStrongARMARM11E33课件1.1ARM简介ARM处理器核简介——ARM7该系列包括ARM7TDMI和扩充了Jazelle(Java加速器)的ARM7EJ-S等等。高档的单片机,除了ARM720T外,都缺少mmu(memorymanagementunit)不能运行真正的操作系统。ARM7系列广泛应用于多媒体和嵌入式设备,包括Internet设备、网络和调制解调器设备,以及移动电话、PDA等无线设备。34课件1.1ARM简介ARM处理器核简介——ARM7特点低功耗0.9MIPS/MHz(mips指每秒百万条指令)的3级流水线结构32位ARM指令集和16位的Thumb指令集主频最高可达130MIPS典型芯片

ATMEL公司AT91M40800/55800A;

Samsung公司的S3C44B0/4510B35课件1.2ARM7简介ARM7基于ARM体系结构V4版本,是目前低端的ARM核。具有广泛的应用,其最显著的应用为数字移动电话。注意:“ARM核”并不是芯片,ARM核与其它部件如RAM、ROM、片内外设、GPIO(GeneralPurposeI/O通用的输入输出端口)组合在一起才能构成现实的芯片。36课件1.2ARM7TDMI简介ARM7TDMI支持32位寻址范围,使用了冯·诺依曼(VonNeumann)结构,指令和数据共用一条32位总线。

ARM7TDMI的后缀意义为:支持高密度16位的Thumb指令集;支持片上调试;支持64位乘法;支持EmbededICE(调试接口)观察硬件;ARM7TDMI37课件1.1ARM简介ARM处理器核简介——ARM9该系列包括ARM9TDMI、ARM920T、ARM940T。除了兼容ARM7系列,而且能够更加灵活的设计。ARM9系列主要应用于无线通信、仪器仪表、安全系统和机顶盒等领域。38课件1.1MIPS/MHz的哈佛结构(程序代码和数据的存储空间分开,程序和数据存储在不同的存储空间中,有各自的程序总线和数据总线),5级流水线。32位ARM指令集和16位Thumb指令集全性能的MMU(存储器管理单元),支持WindowsCE、Linux、uC/osⅡ等多种主流嵌入式操作系统物理结构上,支持数据Cache和指令Cache,具有更高的指令和数据处理能力。1.1ARM简介

ARM处理器核简介——ARM9特点

典型芯片

ATMEL公司AT91RM9200;

Samsung公司的S3C2410

S3C244039课件1.1ARM简介ARM处理器核简介——ARM10该系列包括ARM1020E和ARM1022E处理器核,其核心在于使用向量浮点(VFP)单元VFP10提供高性能的浮点解决方案,从而极大提高了处理器的整型和浮点运算性能。可以用于视频游戏机和高性能打印机等场合。40课件支持DSP指令集,适合于需要高速数字信号处理的场合。6级流水线,指令执行效率更高。支持32位ARM指令集和16位Thumb指令集。支持64位的高速AMBA总线接口。支持VFP10浮点处理协处理器。全性能的MMU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统。支持数据Cache和指令Cache,具有更高的指令和数据处理能力主频最高可达400MIPS。内嵌并行读/写操作部件。1.1ARM简介

ARM处理器核简介——ARM10特点41课件

ARM公司在2003年4月29日宣布了其下一代ARM架构的CPU-ARM11(又名Jaguar美洲虎),基于ARM11的微处理器具有更强的性能,尤其是多媒体处理能力。ARM11微处理器采用0.13微米工艺,低端产品运行在350MHz~500MHz,高端产品运行在533~750MHz,如果将加工工艺减小到0.10微米,那么芯片速度将达1GHz。1.1ARM简介

ARM处理器核简介——ARM11E42课件1.1ARM简介ARM处理器核简介——SecureCore该系列处理器主要针对新兴的安全市场,以一种全新的安全处理器设计为智能卡和其它安全IC(集成电路)开发提供独特的32位系统设计,并具有特定反伪造方法,从而有助于防止对硬件和软件的盗版。43课件1.1ARM简介ARM处理器核简介——XscaleIntelXscale微控制器(ARMv5TE)"核",操作系统包括linux,WindowsCE,SymbianOS,和其他一些RTOS.提供全性能、高性价比、低功耗的解决方案,支持16位Thumb指令并集成数字信号处理(DSP)指令。

Xscale处理器是Intel目前主要推广的一款ARM微处理器。 典型芯片:

PXA250/255/270/27244课件Xscale苹果iPhone手机45课件ARM体系结构更新46课件第1章目录8.异常9.复位10.存储器及存储器映射I/O11.寻址方式简介12.ARM7指令简介13.协处理器接口14.调试接口简介1.简介2.ARM7三级流水线3.处理器状态4.处理器模式5.内部寄存器6.程序状态寄存器7.体系结构直接支持的数据类型47课件1.2ARM7流水线技术三级流水线

有一种方法可以明显改善硬件资源的使用率和处理器的吞吐量,这就是当前一条指令结束之前就开始后面的指令,就是通常所说的流水线技术。这样可使几个操作同时进行。ARM7的流水线分3级,分别为:取指译码执行48课件取指译码执行从程序存储器中取出指令送到处理器内核指令译码(指明处理器的操作)执行这些操作取指译码执行取指译码执行取指译码执行t指令指令1指令2指令33级流水线功能段划分PC为某个正在取址指令所在的地址,确切地说是该指令最低字节的地址。PC指针?PC-8指令1指令2指令3PC指针-->取指译码执行PC-4PC-4-->PC-8-->高地址低地址49课件1.2ARM7三级流水线技术虽然ARM9和ARM10为5、6级流水线(流水线级数越多,说明单位时间内执行的指令条数可能就越多),但它们都使用了与ARM7相同的流水线机制(它们完全仿真3级流水线的行为),因此ARM7上的代码也可以在ARM9和ARM10上运行。50课件第1章目录1.简介2.ARM7三级流水线3.处理器状态4.处理器模式5.内部寄存器6.程序状态寄存器7.体系结构直接支持的数据类型8.异常9.复位10.存储器及存储器映射I/O11.寻址方式简介12.ARM7指令简介13.协处理器接口14.调试接口简介51课件1.7处理器状态处理器状态ARM处理器有两种操作状态:ARM状态:执行32位的ARM指令Thumb状态:16位Thumb指令52课件第1章目录8.异常9.复位10.存储器及存储器映射I/O11.寻址方式简介12.ARM7指令简介13.协处理器接口14.调试接口简介1.简介2.ARM7三级流水线3.处理器状态4.处理器模式5.内部寄存器6.程序状态寄存器7.体系结构直接支持的数据类型53课件1.4处理器模式简介ARM体系结构支持7种处理器模式,分别为:用户模式(usr)、快中断模式(fiq)、中断模式(irq)、管理模式(svc)、中止模式(abt)、未定义模式(und)、系统模式(sys)。如下表所示。54课件处理器模式说明备注用户(usr)user正常程序工作模式不能直接切换到其它模式,可以通过异常切换,如irq(被动),swi指令(主动)系统(sys)system用于支持操作系统与用户模式类似,但具有可以直接切换到其它模式等特权,直接设置CPSR寄存器进行切换。快速中断(fiq)fastinterruptrequest支持高速数据传输及通道处理FIQ异常响应时(引脚低电平有效)进入此模式中断(irq)interruptrequest用于通用中断处理引脚低电平有效,IRQ异常响应时进入此模式管理(svc)supervisor操作系统使用的保护模式(复位后执行bootloader,可以设置引导某个操作系统)系统复位和软件中断(执行SWI指令)响应时进入此模式数据访问中止(abt)abort用于支持虚拟存储或存储器保护当存取异常时进入此模式未定义(und)undefined支持软件仿真硬件的协处理器执行未定义指令时,会将该指令送到协处理器,如果协处理器都处理不了该指令,就产生未定义指令异常中断,进入此模式1.4处理器模式55课件1.4处理器模式特权模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处(因为无mmu)未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式

除用户模式外,其它6种模式均为特权模式。特权模式下,可以访问所有系统资源。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式,当用户模式需要进行处理器模式切换时,应用程序可以产生异常处理,如irq(被动),swi指令(主动),在异常处理过程中进行处理模式的切换。未定义(und)中止(abt)管理(svc)中断(irq)快中断(fiq)系统(sys)56课件1.4处理器模式异常模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式未定义(und)中止(abt)管理(svc)中断(irq)快中断(fiq)这五种模式称为异常模式。它们除了可以通过程序(修改CPSR)切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,供异常处理使用。57课件1.4处理器模式用户和系统模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断(swi)响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处,(无mmu)未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式这两种模式使用完全相同的寄存器组。系统模式是特权模式,该模式为操作系统提供可以访问所有资源的权限,并可以通过指令(mrs/msr)对CPSR设置,直接进行模式切换。系统(sys)用户(usr)58课件第一章目录8.异常9.复位10.存储器及存储器映射I/O11.寻址方式简介12.ARM7指令简介13.协处理器接口14.调试接口简介1.简介2.ARM7三级流水线3.处理器状态4.处理器模式5.内部寄存器6.程序状态寄存器7.体系结构直接支持的数据类型59课件1.5内部寄存器简介在ARM处理器内部有37个用户可见的通用寄存器。在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不同。60课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)StackPointerR13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)LinkRegisterR14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)ProgramCounterR15状态寄存器CPSRCurrentProgramStatusRegisterCPSRSPSRSavedProgramStatusRegister无SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq61课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM状态各模式下的寄存器SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_svcCPSRR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiq R12R11_fiq R11R10_fiq R10R9_fiq R9R8_fiq R8 R7 R6 R5 R4 R3 R2 R1 R0所有的37个寄存器,分成两大类:绿色区:31个通用寄存器,每个32位。黄色区:6个状态寄存器,每个32位,但目前仅使用其中12位。62课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用户无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系统SPSR_svcCPSRR15R14_svcR13_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定义SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中断SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中断ARM状态各模式下可以访问的寄存器63课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15(即PC)状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0寄存器R0~R15为保存数据或地址值的通用寄存器。64课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7为未分组(未备份)的寄存器,对于任何处理器模式,都使用相同的同一组物理寄存器。65课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15(即PC)状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R14为分组(备份)寄存器。它们所对应的物理寄存器取决于当前的处理器模式。不同模式下寄存器的使用,要使用寄存器后缀加以区分。66课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8

寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以不必执行保存和恢复(R8-R12)的指令,从而加速FIQ的处理速度。67课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器寄存器R13、R14分别有6个分组的物理寄存器。1个用于用户和系统模式,其余5个分别用于5种异常模式。不同模式下寄存器的使用,要使用寄存器后缀加以区分。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR1368课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq堆栈指针寄存器R13(SP)寄存器R13常作为堆栈指针(SPStackPointer)。在ARM指令集当中,使用R13作为栈指针,只是习惯的用法。但是在Thumb指令集中存在指令强制地使用R13作为堆栈指针。69课件1.5内部寄存器R13寄存器每一种异常模式拥有自己的R13_<mode>。应先初始化好各模式的R13_<mode>,以便异常发生时,供各模式使用。其中<mode>为下面几种模式之一:svc、abt、und、irq、fiq70课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq链接寄存器R14(LR)R14为链接寄存器(LRLinkRegister),有两个功能:每一种模式自己的R14中,存放当前子程序返回地址;当发生异常中断时,该模式的R14存放异常中断的返回地址。71课件Lable程序A程序BR141.5内部寄存器R14寄存器与子程序调用BLLable地址A???MOVPC,R14R14<-地址ALable???1.程序A执行到BLLable语句时,将调用程序B;操作流程2.程序跳转至标号Lable,执行程序B。同时硬件自动将“BLLable”指令的下一条指令所在地址存入R14(即LR);3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;72课件1.5内部寄存器R14寄存器引申

在出现子程序的嵌套或中断的嵌套时,R14保存的是最后一次调用的返回地址。73课件1.5内部寄存器R14寄存器注意要点R14R14_irq用户模式下的程序IRQ的程序AareturnB...XA返回用户模式地址1.执行用户模式下的程序;2.发生IRQ中断,硬件将返回地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将返回之前被中断的程序;未被使用74课件1.5内部寄存器R14寄存器注意要点R14R14_irq用户模式下的程序第一次IRQ的程序AaB...XA返回用户模式地址1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被使用第二次IRQ程序BareturnB...XA返回到第一次IRQ4.如果在第一次IRQ处理程序中,再次发生第二次IRQ中断(或调用子程序);5.硬件将返回第一次irq的地址保存在R14_irq寄存器中,原来保存的返回用户模式的地址将被覆盖;被破坏6.这样,在程序B返回到程序A,程序A将不能正确返回到用户模式returnreturn解决办法:在允许第二次irq中断(子程序调用)之前,将R14_irq保存到某个寄存器或堆栈(如R1,保存返回用户模式的地址),然后再开中断。在程序A返回时,使用movpc,r175课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序计数器R15(PC)寄存器R15为程序计数器(PCProgramConter),正常执行时,它的值为正在取指指令的地址。它可作为通用寄存器使用,但对于它的使用有许多限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。所以建议不要把PC、LR、SP用作一般的通用寄存器。76课件1.5内部寄存器写R15正常操作时,写入R15(PC)的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。LDRPC,=START ;跳转到START地址标号的指令处MOVPC,LR ;跳转到LR指向的位置

77课件ARM中有两种跳转方式:使用跳转指令;直接向当向PC中写入一个地址值时,程序将跳转到该地址执行,(马上进入预取,译码,执行)。MOVPC,PC;直接取后面指令2、译码、执行。抛弃后面指令1的译码和执行。如果是一条普通指令,就会顺序执指令1。XXXXX,XX;指令1YYYY,Y;指令2类似的指令还有ADDPC,PC,#078课件1.5内部寄存器读R15的限制需要注意,当使用STR或STM(批量存储)指令保存R15时,会有一个例外,这些指令可能将当前指令地址加8或加12保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。所以最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。79课件SUB R1,PC,#4 ;R1下面STR指令的地址STR PC,[R0] ;将STR指令(当前指令)地址+偏移量(8 ;或12)放入R0指向的地址单元,LDR R0,[R0] ;把STR指令地址+偏移量的值放入R0SUB R0,R0,R1 ;计算偏移量R0=R0-R1XXXXX,XXX

1.5内部寄存器读R15的限制计算具体芯片偏移量程序代码:结合教材p14页在一般情况下:R15(PC)的值是处理器正在取指指令的地址,即当前正在执行指令的地址加上8。此处可能不同。80课件1.5内部寄存器写R15的限制由于ARM指令以字为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,跳转地址由指令的实际目标地址(写入R15的值)和0xFFFFFFFC相与得到;在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测,发生指令预取中止中断。81课件指令1指令2指令30xffff0008地址0xffff00040xffff0000指令4指令5指令60xffff000c0xffff00101、所列的地址是ARM指令地址、字地址、半字地址、字节地址。0xffff00000xffff00020xffff00040xffff00060xffff0008地址1、所列的地址是半字地址、字节地址。2、地址都是4的倍数(用二进制表示最后两位都是0)字对齐:四字节对齐(为4的倍数,如0bXX…XXX00与0bXX…XXX00是字对齐)半字对齐:两字节对齐(为2的倍数,如0bXX…XXX0与0bXX…XXX0是半字对齐)其中X为1或02、地址都是2的倍数(用二进制表示最后1位是0)3、写入PC的值是指令的地址、应该是字对齐。字对齐半字对齐82课件不同指令版本的对齐处理在ARMv4和ARMv7中,ARM体系结构所支持的数据对齐行为有明显不同。 ARMv7支持未对齐数据访问。可以使用CP15寄存器c1中的

A

位控制加载和存储指令的对齐要求。(174页表5.12)83课件第3章目录8.异常9.复位10.存储器及存储器映射I/O11.寻址方式简介12.ARM7指令简介13.协处理器接口14.调试接口简介1.简介2.ARM7三级流水线3.处理器状态4.处理器模式5.内部寄存器6.

程序状态寄存器7.体系结构直接支持的数据类型84课件寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序状态寄存器CPSR

CPSR(CurrentProgramStatusRegister)当前程序状态寄存器SPSR(SavedProgramStatusRegister)程序状态保存寄存器

每种异常都有自己的SPSR(由于用户模式和系统模式不是异常模式,所以它们没有SPSR),当异常发生时SPSR保存CPSR的当前值,这样异常退出时可通过SPSR恢复CPSR。85课件1.6程序状态寄存器简介ARM内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其中,只是用了12位包含:4个条件代码标志(符号(N)、零(Z)、进位(C)和溢出(V));2个中断禁止位(F/I),分别控制一种类型的中断;5个对当前处理器模式进行编码的位M[4:0];1个用于指示当前执行指令(ARM还是Thumb)的T位。86课件NZCVQ—IM0M1M2M3M4TF—...3130292827268765432101.6程序状态寄存器简介条件代码标志保留控制位溢出标志进位或借位扩展零符号标志位IRQ禁止FIQ禁止状态位模式位NZCVIM0M1M2M3M4TFCPSR寄存器的格式87课件1.6程序状态寄存器条件代码标志各标志位的含义如下:N(Negative)正、负标志,运算结果的最高位bit[31]反映在该标志位。结果为负数时N=1,结果为正数或零时N=0;Z(Zero)零标志,指令执行结果为0时,Z=1(通常表示比较结果“相等”),否则Z=0;C(Carry)

进、借位标志,当进行加法运算并且最高位产生进位时C=1,否则C=0。当进行减法运算并且最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令(指单纯的移位操作),C为从最高位最后移出的值,其它指令C通常不变;V(oVerflow)

当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。88课件1.6程序状态寄存器ARM指令集——条件码C代码:If(a>b) a++;Else b++;对应的汇编代码:CMP R0,R1 ;R0与R1比较(减法)ADDHI R0,R0,#1;若R0>R1,则R0=R0+1ADDLS R1,R1,#1;若R0≤R1,则R1=R1+1示例:比较两个值大小,并进行相应自加1处理HI

Higher(C=1且Z=0)LS

LowerorSame(C=0或Z=1)89课件1.6程序状态寄存器控制位中断禁止位包括I和F位:当I位置位时,IRQ中断响应被禁止;当F位置位时,FIQ中断响应被禁止。

V4以及更高版本的T系列

T位反映了正在操作的状态:当T位清零时,处理器正在ARM状态下运行;当T位置位时,处理器正在Thumb状态下运行V5以及更高的版本非T系列,T控制位含义如下:当T位清零时,表示执行ARM指令;译码阶段发现,T位置位时,表示强制下一条执行的指令产生未定义指令中断。模式位包括M4、M3、M2、M1和M0,在特权模式下(除用户模式),可以设置CPSR中的这些位进行模式切换。M[4:0]模式0b10000用户0b10001FIQ0b10010IRQ0b10011管理0b10111中止0b11011未定义0b11111系统90课件1.6程序状态寄存器简介

每个异常模式还带有一个程序状态保存寄存器(SPSR),它用于保存在异常事件发生之前的CPSR。对CPSR和SPSR可以通过特殊指令(MSR)进行写入。注意:如果通过程序修改CPSR寄存器中的模式位bit[4:0]进入异常模式,那么硬件将不会把CPSR保存至SPSR中,而通过异常发生进入时硬件会自动将CPSR放入SPSR。91课件1.6程序状态寄存器CPSR中的其他位(保留位)CPSR中的保留位被保留,将来可能使用。为了提高程序的可移植性,不要修改这些保留位。另外,请确保程序的运行不受保留位的值影响,因为将来的处理器可能会将这些位设置为1或者0。92课件第一章目录8.异常9.复位10.存储器及存储器映射I/O11.寻址方式简介12.ARM7指令简介13.协处理器接口14.调试接口简介1.简介2.ARM7三级流水线3.处理器状态4.处理器模式5.内部寄存器6.程序状态寄存器7.体系结构直接支持的数据类型93课件1.7ARM体系中存储系统

ARM地址空间的大小为4GBARM处理器支持下列数据类型:字节(Byte)8位半字(Half-Word)16位=2个字节字(Word)32位=4个字节一条ARM指令是(32位、4个字节、1个字)94课件ARM体系结构的存储器格式(1)

大端格式(BigEndian)

字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。

小端格式(LittleEndian)

字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。ARM缺省设置是小端格式(设置cp15中的c1bit[7]可选择)1.7体系结构直接支持的数据类型95课件ARM体系结构的存储器格式(2)(8H)=0x0B0A0908(4H)=0x07060504(0H)=0x03020100BigEndianLittleEndian0H1H2H3H0H1H2H3H字数据的高字节存储在低地址中,字数据的低字节存储在高地址中。字数据的高字节存储在高地址中,字数据的低字节存储在低地址中。031031低地址高地址低地址高地址(8H)=0x0B0A0908(4H)=0x07060504(0H)=0x0302010096课件1.10存储器及存储器映射I/O存储器格式地址空间的规则:位于地址A的字包含的字节位于地址A,A+1,A+2和A+3;位于地址A的半字包含的字节位于地址A和A+1;位于地址A+2的半字包含的字节位于地址A+2和A+3;位于地址A的字包含的半字位于地址A和A+2;

字节字节字节字节地址AA+1A+2A+3半字半字字97课件ARM体系结构的存储器格式(3)r0=0x11223344STRr0,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论