1、第3章 体系结构与指令系统,本章将对ARM技术进行全面论述,通过本章的学习,使大家对ARM技术有个全面的了解和掌握。了解ARM体系结构、编程模式、异常、片上总线等内容;掌握ARM指令集及其寻址模式。,本章的主要内容为:,3.1 ARM体系结构的发展历史和技术特征,3.3 Thumb技术介绍,3.2 ARM体系结构不同版本的发展概述,3.4 ARM处理器工作状态,3.5 ARM处理器工作模式,3.6 ARM寄存器组成,3.7 ARM异常中断,本章的主要内容为:,3.8 ARM组织结构简介,3.9 ARM存储器接口及存储器层次,3.10 ARM协处理器,3.11 ARM片上总线AMBA,3.12
2、ARM核综述,3.13 ARM指令集与寻址模式,3.14 Xscale pxa270,2.1 ARM体系结构的发展历史和技术特征,2.1.1 ARM发展的历程 2.1.2 ARM体系结构的技术特征,2.1.1 ARM发展的历程,最近10多年来ARM技术的突出成果表现在: 使用“Thumb”的新型压缩指令格式,使得应用系统开发可降低系统成本和功耗; ARM9、ARM10、Strong-ARM和ARM11等系列处理器的开发,显著地提高了ARM的性能,使得ARM技术在面向高端数字音、视频处理等多媒体产品的应用中更加广泛; 更好的软件开发和调试环境,加快用户产品开发; 更为广泛的产业联盟使得基于ARM
3、的嵌入式应用领域更加广阔; 嵌入在复杂SoC中、基于ARM核的调试系统代表着当今片上调试技术的前沿。,ARM发展的历程,第一片ARM处理器是1983年10月到1985年4月间在位于英国剑桥的Acorn Computer公司开发 。 1990年,为广泛推广ARM技术而成立了独立的公司 。 20世纪90年代, ARM快速进入世界市场 。,ARM发展的历程,在ARM的发展历程中,从ARM7开始,ARM核被普遍认可和广泛使用 。 1995年 StrongARM 问世 。 XScale是下一代StrongARM芯片的发展基础 。 ARM10TDMI是ARM处理器核中的高端产品 。 ARM11是ARM家族
4、中性能最强的一个系列 。,ARM发展的历程,ARM技术还将不断发展。在嵌入式领域,ARM已取得了极大的成功,造就了IP核商业化、市场化的神话,迄今为止,还没有任何商业化的IP核交易和使用达到ARM的规模。据最新统计,全球有103家巨型IT公司在采用ARM技术,20家最大的半导体厂商中有19家是ARM的用户,包括德州仪器,意法半导体,Philips,Intel等。ARM系列芯片已经被广泛的应用于移动电话、手持式计算机以及各种各样的嵌入式应用领域,成为世界上销量最大的32位微处理器。,2.2 ARM体系结构的技术特征,ARM的体系结构采用了若干Berkeley RISC处理器设计中的特征Load/
5、store体系结构 固定的32位指令 3地址指令格式 也放弃了其它若干Berkeley RISC特征 所有的指令单周期执行,2.2 ARM体系结构不同版本的发展概述,2.2.1 ARM体系结构的基本版本 2.2.2 ARM体系结构的演变 2.2.3 ARM体系结构的命名规则,2.2.1 ARM体系结构的基本版本,版本1,本版本包括下列指令: 乘法指令之外的基本数据处理指令; 基于字节,字和多字的存储器访问操作指令(Load/Store); 子程序调用指令BL在内的跳转指令; 完成系统调用的软件中断指令SWI。,ARM体系结构的基本版本,版本2 ,与版本1相比版本2(2a)增加了下列指令: 乘和
6、乘加指令; 支持协处理器的指令; 对于FIQ模式,提供了额外的影子寄存器; SWP指令。,ARM体系结构的基本版本,版本3较以前的版本发生了大的变化 地址空间扩展到了32位,但除了版本3G外的其他版本是向前兼容的,也支持26位的地址空间; 分开的当前程序状态寄存器CPSR(Current Program Status Register)和备份的程序状态寄存器SPSR(Saved Program Status Register),SPSR用于在程序异常中断时保存被中断的程序状态; 增加了两种异常模式,使操作系统代码可以方便地使用数据访问中止异常、指令预取中止异常和未定义指令异常; 增加了MRS指
7、令和MSR指令用于完成对CPSR和SPSR寄存器的读写。 修改了原来的从异常中返回的指令。,ARM体系结构的基本版本,版本4。与版本3相比,版本4增加了下列指令 有符号、无符号的半字和有符号字节的load和store指令。 增加了T变种,处理器可以工作于Thumb状态,在该状态下的指令集是16位的Thumb指令集。 增加了处理器的特权模式。在该模式下,使用的是用户模式下的寄存器。,ARM体系结构的基本版本,版本5主要由两个变型版本5T、5TE组成 相比与版本4,版本5的指令集有了如下的变化: 提高了T变种中ARM/Thumb混合使用的效率。 增加前导零记数(CLZ)指令,该指令可使整数除法和中
8、断优先级排队操作更为有效; 增加了BKPT(软件断点)指令; 为协处理器设计提供了更多的可供选择的指令; 更加严格地定义了乘法指令对条件码标志位的影响。,ARM体系结构的基本版本,ARM体系版本6是2001年发布的。新架构v6在降低耗电量的同时还强化了图形处理性能。通过追加有效进行多媒体处理的SIMD功能,将语音及图像的处理功能提高到了原机型的4倍。ARM体系版本6首先在2002年春季发布的ARM11处理器中使用。除此之外,v6还支持多微处理器内核。,ARM体系结构的基本版本,ARM体系结构总结,2.2.2 ARM体系结构的演变,1)Thumb指令集(T变种) Thumb指令集是把32位的AR
9、M指令集的一个子集重新编码后而形成的一个特殊的16位的指令集 2)长乘指令(M变种) 长乘指令是一种生成64位相乘结果的乘法指令(此指令为ARM指令),M变种增加了两条长乘指令,ARM体系结构的演变,3)增强型DSP指令(E变种) E变种的ARM体系增加了一些增强处理器对典型的DSP算法处理能力的附加指令。 4)Java加速器Jazelle(J变种)ARM的Jazelle技术是Java语言和先进的32位RISC芯片完美结合的产物 。 5)ARM媒体功能扩展(SIMD变种),2.2.3 ARM体系结构的命名规则,表示ARM/Thumb体系版本的命名格式的ARM/Thumb体系版本由下面几部分组成
10、的: 基本字符串ARMv。 基本字符串后为ARM指令集版本号,目前是1-6的数字字符。 ARM指令集版本号后为表示所含变种的字符。由于在ARM体系版本4以后,M变种成为系统的标准部件,所以字符M通常也不单独列出来。 最后使用的字符x表示排除某种功能。,2.3 Thumb技术介绍,ARM的RISC体系结构的发展中已经提供了低功耗、小体积、高性能的方案。而为了解决代码长度的问题,ARM体系结构又增加了变种,开发了一种新的指令体系,这就是Thumb指令集,它是ARM技术的一大特色。 2.3.1Thumb的技术概述 2.3.2Thumb的技术实现 2.3.3Thumb技术的特点,2.3.1 Thumb
11、的技术概述,Thumb是ARM体系结构的扩展。它有从标准32位ARM指令集抽出来的36条指令格式,可以重新编成16位的操作码。这能带来很高的代码密度 ARM7TDMI是第一个支持Thumb的核,支持Thumb的核仅仅是ARM体系结构的一种发展的扩展,所以编译器既可以编译Thumb代码,又可以编译ARM代码 支持Thumb的ARM体系结构的处理器状态可以方便的切换、运行到Thumb状态,在该状态下指令集是16位的Thumb指令集 。,2.3.2 Thumb技术的特点,在性能和代码大小之间取得平衡,在需要较低的存储代码时采用Thumb指令系统,但有比纯粹的16位系统有较高的实现性能,因为实际执行的
12、是32位指令,用Thumb指令编写最小代码量的程序,却取得以ARM代码执行的最好性能,Thumb技术的特点,与ARM指令集相比Thumb指令集具有以下局限 完成相同的操作,Thumb指令通常需要更多的指令,因此在对系统运行时间要求苛刻的应用场合ARM指令集更为适合; Thumb指令集没有包含进行异常处理时需要的一些指令,因此在异常中断时,还是需要使用ARM指令,这种限制决定了Thumb指令需要和ARM指令配合使用。,2.4 ARM处理器工作状态,ARM处理器核可以工作在以下2种状态 1) ARM状态 32位,ARM状态下执行字对准的32位ARM指令; 2)Thumb状态 16位,Thumb状态
13、下执行半字对准的16位Thumb指令。在Thumb状态下,程序计数器PC使用位1选择另一个半字。,ARM处理器工作状态,在程序执行的过程中,处理器可以在两种状态下切换 。 ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容。 ARM指令集和Thumb指令集都有相应的状态切换命令。 ARM处理器在开始执行代码时,只能处于ARM状态。,2.5 ARM处理器工作模式,CPSR(当前程序状态寄存器)的低5位用于定义当前操作模式 , 如图示:,ARM处理器工作模式,除用户模式外的其他6种模式称为特权模式 。 特权模式中除系统模式以外的5种模式又称为异常模式,即 : FIQ(Fast Int
14、errupt Request) IRQ(Interrupt ReQuest) SVC(Supervisor) 中止(Abort) 未定义(Undefined),2.6 ARM寄存器组成,2.6.1ARM寄存器组成概述 2.6.2ARM状态下的寄存器组织 2.6.3Thumb状态下的寄存器组织,2.6.1 ARM寄存器组成概述,ARM处理器总共有37个寄存器,可以分为以下两类寄存器 : 1) 31个通用寄存器 : R0R15; R13_svc、R14_svc; R13_abt、R14_abt; R13_und、R14_und; R13_irq、R14_irq; R8_frq-R14_frq。 2
15、)6个状态寄存器 CPSR;SPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fiq 。,2.6.2ARM状态下的寄存器组织,1)ARM状态的寄存器简介: ARM状态下的寄存器组织:,ARM状态下的寄存器组织,2) ARM状态的通用寄存器 不分组寄存器(The unbanked registers) R0R7 分组寄存器(The banked registers): R8R14 程序计数器:R15(PC),ARM状态下的寄存器组织,不分组寄存器R0R7 R0R7是不分组寄存器。这意味着在所有处理器模式下,它们每一个都访问的是同一个物理寄存器。它们是真正并且在每种
16、状态下都统一的通用寄存器。 未分组寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器,但必须注意对同一寄存器在不同模式下使用时的数据保护 。,ARM状态下的寄存器组织,分组寄存器R8-R14 : 分组寄存器R8-R12: FIQ模式分组寄存器R8R12 。 FIQ以外的分组寄存器R8R12 。 分组寄存器R13、R14 寄存器R13通常用做堆栈指针SP 。 寄存器R14用作子程序链接寄存器(Link RegisterLR),也称为LR。,ARM状态下的寄存器组织,程序计数器R15 : 寄存器R15被用作程序计数器,也称为PC 。 R15值的改变将引起程序执行顺
17、序的变化,这有可能引起程序执行中出现一些不可预料的结果 。 ARM处理器采用多级流水线技术,因此保存在R15的程序地址并不是当前指令的地址 。 一些指令对于R15的用法有一些特殊的要求 。,ARM状态下的寄存器组织,3)ARM程序状态寄存器 所有处理器模式下都可以访问当前的程序状态寄存器CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。 在每种异常模式下都有一个对应的物理寄存器程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。,ARM状态下的寄存器组织,CPSR和SPSR的格式,2.6.3Thum
18、b状态下的寄存器组织,Thumb状态下的寄存器集是ARM状态下寄存器集的子集。程序员可以直接访问8个通用的寄存器(R0R7),程序计数器PC、堆栈指针SP、连接寄存器LR和当前状态寄存器CPSP。每一种特权模式都各有一组SP,LR和SPSR。,2.7 ARM的异常中断,在ARM体系结构中,异常中断用来处理软件中断、未定义指令陷阱(它不是真正的“意外”事件)及系统复位功能(它在逻辑上发生在程序执行前而不是在程序执行中,尽管处理器在运行中可能再次复位)和外部事件,这些“不正常”事件都被划归“异常”,因为在处理器的控制机制中,它们都使用同样的流程进行异常处理。,ARM的异常中断,ARM的异常中断响应
19、过程; 从异常中断处理程序中返回 ; 异常中断向量表; 异常中断的优先级 ;,ARM的异常中断响应过程,ARM处理器对异常中断的响应过程如下: 将CPSR的内容保存到将要执行的异常中断对应的SPSR中 。 设置当前状态寄存器CPSR中的相应位 将引起异常指令的下一条指令的地址保存到新的异常工作模式的R14 。 给程序计数器(PC)强制赋值 。,ARM的异常中断响应过程,每个异常模式对应有两个寄存器R13_、R14_分别保存相应模式下的堆栈指针、返回地址;堆栈指针可用来定义一个存储区域保存其它用户寄存器,这样异常处理程序就可以使用这些寄存器。 FIQ模式还有额外的专用寄存器R8_fiqR12_f
20、iq,使用这些寄存器可以加快快速中断的处理速度。,从异常中断处理程序中返回,从异常中断处理程序中返回时,需要执行 以下四个基本操作 : 所有修改过的用户寄存器必须从处理程序的保护堆栈中恢复(即出栈)。 将SPSR_mode寄存器内容复制到CPSR中,使得CPSR从相应的SPSR中恢复,即恢复被中断的程序工作状态。 根据异常类型将PC变回到用户指令流中相应指令处。 最后清除CPSR中的中断禁止标志位I/F。,异常中断向量表,中断向量表中指定了各异常中断与其处理程序的对应关系 。 每个异常中断对应的中断向量表的4个字节的空间中存放一个跳转指令或者一个向PC寄存器中赋值的数据访问指令 。 存储器的前
21、8个字中除了地址0x00000014之外,全部被用作异常矢量地址 。,异常中断的优先级,当几个异常中断同时发生时,在ARM中通过给各异常中断赋予一定的优先级来实现处理次序 : 复位(最高优先级); 数据异常中止; FIQ; IRQ; 预取指异常中止; SWI、,未定义指令(包括缺协处理器)。,2.8 ARM典型流水线技术简介,2.8.1三级流水线ARM的组织 2.8.2五级流水线ARM的组织,2.8.1三级流水线ARM的组织,1)ARM的3级流水线介绍 到ARM7为止的ARM处理器使用的简 单3级流水线分别为 : 取指级 ;译码级 ;执行级 ;,三级流水线ARM的组织,2)ARM 3级流水线下
22、PC的行为 在3级流水线的执行过程中,当通过R15寄存器直接访问PC时,必须考虑到此时流水线的执行过程的真实情况,三级流水线的PC行为,2.8.2 五级流水线ARM的组织,使用5级流水线的ARM处理器包含下面5个流水线级 : 取指 译码 执行 缓冲数据 回写,2.9 ARM存储器接口及存储器层次,多级存储器使它包括一个容量小但速度快的从存储器和一个容量大但速度慢的主存储器,根据典型程序的实验统计,这个存储器系统的外部行为在绝大部分时间象一个即大又快的存储器。这个容量小但速度快的元件是Cache,它自动地保存处理器经常用到的指令和数据的拷贝。 本节首先对ARM支持的存储数据类型和处理器中数据存储
23、格式进行介绍,在此基础上介绍了ARM存储器的接口设计,主要包括存储器接口、Cache、MMU和保护单元,建立起ARM处理器的整个存储体系的概念和设计方法。,ARM存储器接口及存储器层次,2.9.1 ARM存储数据类型和存储格式 2.9.2 ARM的存储器层次简介 2.9.3 ARM存储系统简介,2.9.1ARM存储数据类型和存储格式,ARM处理器支持以下6种数据类型 : 8位有符号和无符号字节。 16位有符号和无符号半字,它们以两字节的边界定位。 32位有符号和无符号字,它们以4字节的边界定位。,ARM存储数据类型和存储格式,存储器组织 在以字节为单位寻址的存储器中有“小端”和“大端”两种方式
24、存储字,这两种方式是根据最低有效字节与相邻较高有效字节相比是存放在较低的还是较高的地址来划分的,两种存储方式如图所示。,2.9.2 ARM的存储器层次简介,寄存器组 片上RAM 片上Cache 主存储器 硬盘,2.10 ARM协处理器,ARM通过增加硬件协处理器来支持对其指令集的通用扩展,通过未定义指令陷阱支持这些协处理器的软件仿真。简单的ARM核提供板级协处理器接口,因此协处理器可以作为一个独立的元件接入。 最常使用的协处理器是用于控制片上功能的系统协处理器,例如控制ARM720上的高速缓存Cache和存储器管理单元MMU等。ARM也开发了浮点协处理器,也可以支持其它的片上协处理器。ARM体
25、系结构支持通过增加协处理器来扩展指令集的机制。,2.11 ARM片上总线AMBA,先进的微控制器总线体系结构AMBA是ARM公司公布的总线标准 AHB(Advanced High-performance Bus):用于连接高性能系统模块。它支持突发数据传输方式及单个数据传输方式,所有时序参考同一个时钟沿。 ASB(Advanced System Bus):用于连接高性能系统模块,它支持突发数据传输模式。 APB(Advance Peripheral Bus):是一个简单接口支持低性能的外围接口。,2.12 ARM核,ARM处理器核当前有6 个系列产品: ARM7 ARM9 ARM9E ARM1
26、0E, SecurCore ARM11Intel公司推出的: StrongARM XScale,ARM核综述,2.12.1 ARM7系列核介绍 2.12.2 ARM9系列核介绍 2.12.3 ARM10系列核 2.12.4 StrongARM和XScale系列核 2.12.5 SecurCore系列核,2.12.1 ARM7系列核介绍,ARM7TDMI是ARM公司最早为业界普遍认可且得到了最为广泛应用的处理器核,特别是在手机和PDA中,随着ARM技术的发展,它已是目前最低端的ARM核。 ARM7:32位ARM体系结构4T版本; T:“Thumb”16位压缩指令集; D:支持片上Debug(调试
27、),使处理器能够停止以响应调试请求; M:增强型Multiplier,与前代相比具有较高的性能且产生64位的结果; I:“EmbeddedICE”硬件以支持片上断点和观察点。,ARM7系列核介绍,1)ARM7TDMI组织结:ARM7TDMI重要的特性有 实现ARM体系结构版本4T,支持64位结果的乘法,半字、有符号字节存取; 支持Thumb指令集,可降低系统开销; 328 DSP 乘法器; 32位寻址空间- 4GB 线性地址空间; 它包含了EmbeddedICE模块以支持嵌入式系统调试; 调试硬件由JTAG测试访问端口访问,因此JTAG控制逻辑被认为是处理器核的一部分。 广泛的ARM 和第三方
28、支持,并与 ARM9 Thumb 系列 ARM10 Thumb 系列和StrongARM处理器相兼容。,ARM7系列核介绍,2)ARM7TDMI硬件接口 按接口信号的功能划分为存储器接口、MMU接口、片上调试、JTAG边界扫描扩展以及时钟接口等十四类接口信号。各接口信号包括接口信号和接口控制信号,ARM7TDMI核的外围硬件接口信号图,2.12.2ARM9系列核介绍,ARM8核是从1993年到1996年开发的,并开发了具有片上Cache及存储器管理单元高性能ARM CPU芯片以满足比ARM7的3级流水线更高性能的ARM核的需求。 ARM9TDMI将流水线的级数从ARM7TDMI的3级增加到5级
29、,并使用分开的指令与数据存储器的Harvard体系结构。ARM9TDMI的性能在相同工艺条件下近似达到ARM7TDMI两倍,ARM9系列核介绍,1)ARM9TDMI技术特点 支持Thumb指令集; 含有EmbeddedICE模块支持片上调试; 通过采用5级流水线以增加最高时钟速率; 分开的指令与数据存储器端口以提高处理器性能。,ARM9系列核介绍,2)ARM9TDMI组织 ARM9内核采用了与后面要讲到的Strong ARM相同的5级流水线。ARM9TDMI与StrongARM核的主要区别在于StrongARM有一个与寄存器读出级并行操作的专用的转移加法器进行转移地址计算,而ARM9TDMI使
30、用数据路径中的ALU来计算转移目标地址。,ARM9系列核介绍,3)Thumb解码和存储器读写 4)协处理器支持 5)片上调试 6)低电压操作 7)ARM9TDMI应用 8)ARM9E-S及ARM946E-S和ARM966E-S,2.12.3 ARM10系列核,ARM10TDMI属于ARM处理器核中的高端处理器核,ARM10TDMI的性能在相同工艺条件下近似达到也以ARM9TDMI的两倍性能工作。ARM1020E/ARM10200是基于ARM10TDMI核设计的高性能CPU核。 增加最高时钟速率。,2.12.4 StrongARM和XScale系列核,1995年,ARM、Apple、DEC公司联
31、合声明将开发一种应用于PDA的高性能、低功耗、基于ARM体系结构的StrongARM微处理器。 StrongARM主要特点有: 具有寄存器前推的5级流水线; 除64位乘法、多寄存器传送和存储器/寄存器交换指令外,其它所有普通指令均是单周期指令; 16KB、32路相联的指令Cache,每行32字节; 16KB、32路相联的写回式数据Cache,每行32字节; 分开的32数据项的指令和数据地址变换后备缓冲器;,StrongARM和XScale系列核,8数据项的写缓冲器,每个数据项16个字节; 低功耗的伪静态操作。 StrongARM的乘法部件很有特色。不论处理器的时钟速率有多高,乘法器以每周期计算
32、12位,用13个时钟周期计算两个32位操作数的乘积。对于数字信号处理性能要求很高的应用来说,StrongARM的高速乘法器有很大的潜力。 微处理器使用系统控制协处理器CP15来管理片上MMU和Cache资源,并且集成了JTAG边界扫描测试电路以支持印制板连接测试。,StrongARM和XScale系列核,StrongARM的五级流水线 取指(从指令Cache)。 指令译码及寄存器读;转移目标计算及执行。 移位及ALU操作,包括数据传送的存储器地址计算。 数据Cache访问 结果写回到寄存器文件 寄存器前推通路将中间结果传给下一条指令,以避免读后写冒险引起的寄存器互锁停顿。 从下一条指令的取指级
33、传送PC+4的PC通路给出当前指令的PC+8,作为r15并用于转移目标计算。,StrongARM和XScale系列核,Intel XScale系列处理器核是基于ARMv5TE体系结构的,它提供了从手持互联网设备到互联网基础设施产品全面解决方案,支持16位Thumb指令和DSP扩充。基于XScale技术开发的系列微处理器,由于超低功率与高性能的组合使Intel XScale适用于广泛的互联网接入设备,2.12.5 SecurCore系列核,SecurCore系列微处理器专为安全需要而设计,提供了完善的32位RISC技术的安全解决方案,因此,SecurCore系列微处理器除了具有ARM体系结构的低
34、功耗、高性能的特点外,还具有其独特的优势,即提供了对安全解决方案的支持。 带有灵活的保护单元,以确保操作系统和应用 数据的安全。 采用软内核技术,防止外部对其进行扫描探测。 可集成用户自己的安全特性和其他协处理器。,2.13 ARM指令集与寻址模式,1,3,2,ARM 微处理器指令的分类,ARM 微处理器指令的寻址方式,ARM 微处理器指令的条件域,ARM微处理器的指令系统,ARM微处理器指令的分类ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。ARM微处理器的指令集可以分为六大类
35、 : 跳转指令 数据处理指令 程序状态寄存器(PSR)处理指令 加载/存储指令 协处理器指令和异常产生指令,ARM微处理器指令表-1,ARM微处理器指令的分类,ARM微处理器指令表-2,ARM微处理器指令的分类,ARM微处理器指令表-3,ARM微处理器指令的分类,ARM微处理器指令表-4,ARM微处理器指令的分类,ARM微处理器指令表-5,ARM微处理器指令的分类,指令的条件域,当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。每一条ARM指令包含4位的条件码,位于指令的最高4位31:28。条件
36、码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。例如,跳转指令B可以加上后缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转。,ARM微处理器指令的条件域,指令的条件域表-1,ARM微处理器指令的条件域,指令的条件域表-2,ARM微处理器指令的条件域,ARM指令的寻址方式,ARM指令系统支持如下几种常见的寻址方式: 立即寻址 寄存器寻址 寄存器间接寻址 基址变址寻址 多寄存器寻址 相对寻址 堆栈寻址,ARM微处理器指令的寻址方式,立即寻址,立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也
37、就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令: ADD R0,R0,1 /*R0R01*/ ADD R0,R0,0x3f /*R0R00x3f*/ 在以上两条指令中,第二个源操作数即为立即数,要求以“”为前缀,对于以十六进制表示的立即数,还要求在“”后加上“0x”。,ARM微处理器指令的寻址方式,寄存器寻址,寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令: ADD R0,R1,R2 /*R0R1R2*/该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0
38、中。,ARM微处理器指令的寻址方式,寄存器间接寻址,寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:ADD R0,R1,R2 /*R0R1R2*/LDR R0,R1 /*R0R1*/STR R0,R1 /*R1R0*/ 在第一条指令中,以寄存器R2的值作为操作数的地址,在存储器中取得一个操作数后与R1相加,结果存入寄存器R0中; 第二条指令将以R1的值为地址的存储器中的数据传送到R0中。 第三条指令将R0的值传送到以R1的值为地址的存储器中。,ARM微处理器指令的寻址方式,基址变址寻址,基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指
39、令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令常见有以下几种形式,如下所示: LDR R0,R1,4 ;R0R14 LDR R0,R1,4! ;R0R14、R1R14 LDR R0,R1 ,4 ;R0R1、R1R14 LDR R0,R1,R2 ;R0R1R2 在第一条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中。 在第二条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。 在第三条指令中,以寄存器R1的内容作为操
40、作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。 在第四条指令中,将寄存器R1的内容加上寄存器R2的内容形成操作数的有效地址,从而取得操作数存入寄存器R0中。,ARM微处理器指令的寻址方式,多寄存器寻址,采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值。以下指令: LDMIA R0,R1,R2,R3,R4 ;R1R0;R2R04;R3R08;R4R012 该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加,因此,指令可将连续存储单元的值传送到R1R4。,ARM微处理器指令的寻址方式
41、,相对寻址,与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式: BL NEXT ;跳转到子程序NEXT处执行 NEXT MOV PC,LR ;从子程序返回,ARM微处理器指令的寻址方式,堆栈寻址,堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下
42、一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。,ARM微处理器指令的寻址方式,堆栈寻址,根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack)和递减堆栈(Decending Stack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式: 满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。 满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。 空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。 空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成,ARM微处理器指令的寻址方式,例子:ARM程序设计,ARM汇编:选择排序详见:示例程序example/ADS_example/选择排序/selectSort ARM汇编:冒泡排序详见:示例程序example/ADS_example/冒泡排序/bubbleSort 其他示例,3.14 Xscale pxa270,(1) pxa270芯片总述及芯片特性概述 见Intel xscale datasheet (2) pxa270开发板引脚及电路连接见电路原理图 (3) pxa270 GPIO控制见Intel xscale datasheet,本章结束,谢谢!,
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1