1、第8章总线8.1 概述8.2 ARM处理器8.3 Inter PXA 27X介绍习题第8章总线8.1.1 PXA27X概述概述PXA27X是一种高性能、低功耗(可达到MIPS/mW)、功能强劲的SOC处理器,它采用Intel公司的XScale结构。在PXA27X中包括了除浮点运算指令之外的全部ARM V5TE的指令集,同时还包括Intel公司的整数无线MMX指令。这就使得该处理器的指令功能及对多媒体信号的处理能力十分强大。8.1 概概 述述第8章总线PXA270有两种封装形式:13mm13mm的FVBGA和23mm23mm的PBGA。前者有356条球状引线而后者有360条球状引线。PXA27X
2、的结构框图如图8.1所示。在图8.1中,实线框起来的各个部分组成了PXA27X芯片,实线框之外是芯片外接的部分。第8章总线由图8.1可以看到,在硬件上PXA27X包括如下部分:PXA27X内部集成有4个体的SRAM,每个体64KB,4个体共256KB。PXA27X内部有LCD控制器,可以支持显示分辨度达800600像素的LCD显示。该处理器集成有存储器控制器(见图8.1虚线框部分),该控制器提供了各种控制信号,用以支持芯片外部外接SDRAM、闪速存储器、PC卡等存储器件的工作。在PXA27X外部最多可接1GB的SDRAM、384MB的闪速存储器。第8章总线图8.1 PXA27X处理器结构框图第
3、8章总线PXA27X内部集成有USB主控制器,也集成有USB的客户控制器。这样一来,在未来的工作中,PXA27X既可工作为主控制器,又可以作为系统中的客户接受其他USB主控制器的管理。PXA27X集成有电源管理模块,对芯片上电、睡眠、看门狗等多种功能实施管理。PXA27X有时钟管理模块,能对片内多种时钟进行管理。第8章总线在PXA27X中集成了多种外设接口,在图8.1的左侧可以看到,许多经常用到的外设(总线)接口均已集成在芯片中。同时,这些外设(总线)接口引线中,有许多都是可以双重定义或多重定义的,既可以定义为某种外设的接口信号引线,当不用该外设时,这些引线又可以用作通用的输入/输出信号线,这
4、就是图8.1中所标的通用I/O(GPI/O)。第8章总线为测试芯片方便,PXA27X还集成有JTAG接口。通过上面的描述,我们可以了解到PXA27X处理器的大致组成。显然,其结构是比较复杂的,功能也非常强。在本章后面的内容中,将对PXA27X的某些部分进行详细讲述,但不可能将所有内容全都说清楚,因为PXA27X所涉及的内容实在太多了。第8章总线8.1.2 Intel XScale结构结构 当前,在厂家设计SOC时,都是将多个处理器的功能整合到SOC中,例如将ARM与DSP、MCU与DSP集成在SOC中。集成电路加工技术使线条宽度达到几十纳米,使这种多个处理器的结合成为现实。Intel XSca
5、le结构的处理器就是这种理念的体现。1Intel XScale结构处理器硬件结构处理器硬件Intel XScale结构处理器硬件结构框图如图8.2所示。第8章总线图8.2 XScale结构框图第8章总线2Intel XScale硬件结构说明硬件结构说明由图8.2可以看到这种结构的处理器是由哪些部分构成的。下面将简单说明硬件的各部分。Intel XScale是以ARM公司的RISC处理器ARM V5TE为基础的,再将功能监视单元CP14、配置寄存器CP15、乘法/累加器CP0(协处理器)等16个协处理器整合进去,使得由Intel XScale为处理器核的PXA27X系列的处理器具有很强的处理能力
6、。第8章总线在Intel XScale核中还集成了具有单指令多数据(SIMD)结构的协处理器,能够完成整数的MMX指令及SIMD扩展指令(SSE),更有利于多媒体信号的处理。在Intel XScale中,有三部分高速缓存Cache及相应的存储器管理单元,无疑对提高Intel XScale的总体性能大为有利。Intel XScale具有对外的协处理器接口,还可以外接诸如DSP这样的处理器。在PXA270中就可外接专门用于多媒体处理的单指令流多数据流(SIMD)协处理器。第8章总线Intel XScale中有对嵌入式系统非常重要的两类中断:一般中断IRQ和快速中断FIQ。在Intel XScale
7、中还包括用于测试的DEBUG及JTAG。显然,在Intel XScale中还有超级流水线、分支预测等一系列提高性能的硬件措施。考虑到读者将来主要是应用SOC芯片构成嵌入式系统而不是设计SOC芯片,对于Intel XScale更详细的内容不再说明。第8章总线8.2 ARM处理器处理器8.2.1 ARM处理器系列处理器系列ARM处理器是由ARM公司设计的,这是一家专门设计IP(知识产权)的供应商。该公司既不生产芯片也不生产整机,只卖IP核。但该公司所设计的ARM处理器是32位的RISC处理器,由于其性能高、功耗低、性价比高,已被全球各大半导体公司所使用。第8章总线1ARM体系结构体系结构ARM体系
8、结构从诞生至今共有六个版本,从V1到V6。显然,版本低的功能要差一些,版本愈高功能愈强。ARM公司依据不同的体系结构版本设计出多种ARM处理器。这些处理器在功能上有一些差异,这就形成了ARM处理器的多种不同变种,主要的有如下几种:1)T变种T变种是指在ARM处理器中包含有Thumb指令集。ARM处理器指令的长度是固定的,所有的指令均为32位。在其T变种中除32位指令外还包括指令长度为16位的Thumb指令集。第8章总线2)M变种M变种在ARM指令集中包含有4条长乘法指令,这些指令能完成32位32位=64位的乘法及32位32位+64位=64位的乘加运算的功能。3)E变种E变种为增强DSP(数字信
9、号处理器)指令变种,在该变种的ARM指令集中包含一些典型的完成DSP算法的一些指令。第8章总线4)J变种该变种将Java加速器Jazelle加到ARM处理器中,可以大大提高Java程序的运行速度。5)SIMD变种该变种将单指令流多数据流的系统结构思想加入到ARM处理器中,这可以有效地提高对多媒体信号音频及视频信号的处理能力。第8章总线2ARM/Thumb体系结构命名体系结构命名目前正在使用的ARM/Thumb体系结构版本如表8.1所示。由表8.1可以看到,在PXA27X中所集成的ARM v5TE版本的处理器已经具有相当好的性能。第8章总线表表8.1 ARM的体系结构版本的体系结构版本名 称 指
10、令集 版本号 Thumb 指令版本 M 变种 J 变种 SIMD 变种 E 变种 ARMv3 3 无 无 无 无 无 ARMv3M 3 无 有 无 无 无 ARMv4xM 4 无 无 无 无 无 ARMv4 4 无 有 无 无 无 ARMv4TxM 4 1 无 无 无 无 ARMv4T 4 1 有 无 无 无 ARMv5xM 5 无 无 无 无 无 ARMv5 5 无 有 无 无 无 ARMv5TxM 5 2 无 无 无 无 ARMv5T 5 2 有 无 无 无 ARMv5TExP 5 2 有 无 无 有,少几条指令 ARMv5TE 5 2 有 无 无 有 ARMv5TEJ 5 有 有 有 无
11、 有 ARMv 6 6 有 有 有 有 有 第8章总线8.2.2 ARM处理器的工作模式及寄存器处理器的工作模式及寄存器1ARM处理器的工作模式处理器的工作模式ARM处理器会运行在如下7种工作模式之下:1)用户模式usr大多数应用程序都工作在用户模式之下,在此模式之下应用程序不能使用受操作系统保护的资源。也就是说,用户模式具有较低的资源利用级别。第8章总线2)特权模式svc这是供操作系统使用的一种保护模式。操作系统工作在特权模式之下,原则上允许它控制系统的所有资源。3)数据中止模式abt该模式用于实现虚拟存储器或对存储器的保护。4)未定义指令中止模式und这种模式用于对硬件协处理器软件仿真。第
12、8章总线5)一般中断请求模式irq这种模式用于一般的外部中断请求,类似于前面8086的INTR。6)快速中断请求模式fiq该模式支持高速数据传送或通道方式,其具有更高的优先级。7)系统模式sys系统模式主要为操作系统任务所用,它与用户模式使用完全一样的寄存器。但在该摸式下,任务可以使用系统的所有资源,在这种意义上讲它也属于特权模式。第8章总线2ARM处理器的内部寄存器处理器的内部寄存器从本书前面的章节中已经看到,要学好、用好某种处理器,必须掌握好其内部寄存器。这对后面的指令系统、编程及应用都很重要。对于ARM处理器来说也是这样,读者必须认真理解该处理器的37个内部寄存器。ARM的内部寄存器如表
13、8.2所示。第8章总线表表8.2 不同工作模式下的寄存器不同工作模式下的寄存器用户 系统 特权 中止 未定义 irq fiq R0 同左 同左 同左 同左 同左 同左 R1 同左 同左 同左 同左 同左 同左 R2 同左 同左 同左 同左 同左 同左 R3 同左 同左 同左 同左 同左 同左 R4 同左 同左 同左 同左 同左 同左 R5 同左 同左 同左 同左 同左 同左 R6 同左 同左 同左 同左 同左 同左 R7 同左 同左 同左 同左 同左 同左 R8 同左 同左 同左 同左 同左 R8_fiq R9 同左 同左 同左 同左 同左 R9_fiq R10 同左 同左 同左 同左 同左
14、R10_fiq R11 同左 同左 同左 同左 同左 R11_fiq R12 同左 同左 同左 同左 同左 R12_fiq R13 同左 R13_svc R13_abt R13_und R13_irq R13_fiq R14 同左 R14_svc R14_abt R14_und R13_irq R14_fiq R15(PC)同左 同左 同左 同左 同左 同左 同左 同左 同左 同左 同左 CPSR 同左 SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 第8章总线在ARM处理器的37个寄存器中,包括31个通用寄存器和6个状态寄存器。所有这些寄存器都是32
15、位的。由表8.2可以看到,ARM处理器工作在不同模式之下,所使用的寄存器是不一样的。一种模式对应一组寄存器,这一组寄存器包括通用寄存器R0R14、程序计数器PC和一个或两个状态寄存器。这些寄存器中,有一些是共用的,有一些则是不同模式所私有的。第8章总线1)通用寄存器通用寄存器为R0R15,它们又分为3类:不分组寄存器R0R7这8个32位的寄存器是为每一种ARM处理器运行模式所用,也就是说在每种模式下使用的同一个物理寄存器。在使用中必须注意到,当中断或异常发生时,要进行模式切换,这时就需要保护这些寄存器的内容免遭破坏,以便在中断(异常)返回时能接着中断(异常)前的状态继续执行。第8章总线 分组寄
16、存器R8R14这些寄存器在不同模式下访问的不是一个物理寄存器。由表8.2可以看到,当在fiq模式时,使用的是与R8R14对应的另外7个寄存器R8_fiqR14_fiq。在fiq模式下,原R8R14不再使用。在实际应用中,当响应fiq中断进入服务程序时,若服务程序不使用R8R14,则它们的内容可不必保护。第8章总线由表8.2还可以看到,对于R13和R14来说,除了在fiq模式下使用R13_fiq和R14_fiq之外,在特权、中止、未定义及一般中断模式下,也分别对应自己的R13和R14。这在编程使用ARM处理器时应予以注意,可以使用户保护现场(断点)的操作更加简单。另外,在使用中经常将R13用作堆
17、栈指针(指示器)。当然,也可以用其他寄存器作为堆栈指针。第8章总线R14称为连接寄存器(记为LR),它除了用作通用寄存器之外,还有两种特殊用途:(1)每种模式自己的R14中存放当前子程序的返回地址,当子程序结束时,利用R14很容易返回主程序。具体细节见本节后面的内容。(2)当异常发生时,可将该异常的特定的R14设置为此异常的返回地址,当该异常结束时,就很容易返回到异常发生时的程序。第8章总线 程序计数器(PC)R15程序计数器在概念上与前面几章所描述的80X86的指令指针类似,但由于ARM的特点,它又有许多特殊的地方。在ARM中,指令长度均为32位,而地址都是按字节编址的。因此,在这种情况下,
18、由于ARM的指令都必须按32位字对齐,故PC的最低两位必须为0。当ARM工作在Thumb状态下时,PC的最低位必须为0。因为Thumb的指令全都是16位的。当为改变程序执行顺序写入PC时,必须注意保证上述要求;否则将会产生不可预知的结果。第8章总线由于ARM采用流水线技术,当用指令读出PC值时,读出的PC值应是该指令的地址加8。显然,在Thumb状态下,用指令读出PC值时,读出的PC值应是该指令的地址加4。第8章总线2)程序状态寄存器程序状态寄存器有两种:当前程序状态寄存器CPSR和备份程序状态寄存器SPSR。前者是所有模式所共用的,而后者则是在特定的异常模式下每个模式自己所特有的,由表8.2
19、可以看得很清楚。CPSR和SPSR的格式是一样的,如图8.3所示为CPSR的格式。第8章总线图8.3 程序状态寄存器格式第8章总线由图8.3可以看到,程序状态寄存器包括如下几部分:条件标志位图8.3中,N、Z、C、V四位称为条件标志位,与前面第2章中所描述的8086的对应标志位非常类似。N:负标志位。当两数运算结果最高位为1时,N=1,表示运算结果为负数。若结果最高位为0,则N=0,表示运算结果为一正数。实际上它与8086的符号标志位SF没有什么区别。Z:零标志位。它与8086的零标志位ZF是一样的,不再解释。第8章总线C:进位标志。该位与8086的进位标志位CF不太一样:当执行加法指令结果有
20、进位时C1;结果没有进位时C0。当执行减法指令结果有借位时C0;结果没有借位时C1。V:溢出标志位。可与8086的溢出标志位OF一样理解。Q标志位在ARM处理器的E系列(带有增强DSP指令)或v5以上版本中,设置Q标志,用于标志执行增强DSP指令时是否发生溢出。第8章总线 控制位图8.3中最低8位为CPSR的控制位。它们用于对ARM功能的控制,利用指令可以修改这些控制位。a.中断禁止位中断禁止位其中I位与80X86中IF的功能是一样的,但定义相反。在这里,当I=0时,允许irq中断;当I=1时,禁止irq中断。与I位雷同,当F=0时,允许fiq中断;当F=1时,禁止fiq中断。b.T控制位控制
21、位T控制位用于控制ARM处理器执行ARM的32位指令和Thumb的16位指令之间进行切换。第8章总线当T=0时,ARM处理器执行ARM的32位指令;当T=1时,ARM处理器执行Thumb的16位指令。在v5及以上版本非T变种的ARM处理器中,T控制位的定义为:当T=0时,ARM处理器执行ARM的32位指令;当T=1时,执行下一条指令引起未定义异常。c.模式控制位模式控制位CPSR中的M0M4这5位用以控制ARM的运行模式,它们的不同编码可以规定ARM的模式。具体的规定及在此模式下可以使用的寄存器如表8.3所示。第8章总线表表8.3 模式控制位及模式下可访问的寄存器模式控制位及模式下可访问的寄存
22、器M4M0 模式 可访问的寄存器 0b10000 用户 R0R14,PC,CPSR 0b10001 FIQ R0R7,R8_fiqR14_fiq,PC,CPSR,SPSR_fiq 0b10010 IRQ R0R12,R13_irqR14_irq,PC,CPSR,SPSR_irq 0b10011 特权 R0R12,R13_svcR14_svc,PC,CPSR,SPSR_svc 0b10111 中止 R0R12,R13_abtR14_abt,PC,CPSR,SPSR_abt 0b11011 未定义 R0R12,R13_undR14_und,PC,CPSR,SPSR_und 0b11111 系统 R
23、0R14,PC,CPSR 第8章总线在表8.3中,用0bxxxxx表示0b之后为二进制编码。同时,表8.3中更加明确地指出了不同模式下可以访问的内部寄存器。其他位在CPSR中,除了上面定义的各位外,剩余的许多位尚未定义,留作今后扩展之用。SPSR的各位定义与CPSR相同,不需再作说明。第8章总线3ARM处理器的存储系统处理器的存储系统1)寻址空间ARM的内存以字节编址,最大地址空间为232,用十六进制表示为从0X00000000到0XFFFFFFFF。在ARM中0X后面的字符表示为十六进制数。ARM的地址空间也可以看做是230个32位的字单元或者是用231个16位的半字单元构成。第8章总线在前
24、面的章节中已经说过,在PC中加上带符号的偏移量可以实现程序的转移。在ARM中也是这样,执行转移指令可以实现程序的转移。转移的目的地址为:当前(转移)指令的地址+8+偏移量在前面讲述8086段内相对转移时,目的地址是当前指令的地址加2(短转移)或加3(近转移)再加位移量。在ARM中加8是因为其中有指令流水线而且ARM指令的长度都是4个字节。第8章总线2)内存存储格式在ARM存储器中,数据在内存中的存放有两种格式:(1)小端格式。这种存储格式是一个4个字节的字或一个两个字节的半字,总是小地址存放低字节,大地址存放高字节。其规则与前面的80X86是一样的。例如,一个32位的字0XA9876543,存
25、放在内存起始地址为0X30000000的顺序单元中,则最低字节43放入最小的0X30000000单元、65放入0X30000001单元,后面的字节依次存放。第8章总线(2)大端格式。大端格式与上述小端格式的存放顺序刚好相反,即小地址存放高字节,大地址存放低字节。小端格式通常是ARM的缺省配置,通过硬件输入可以配置存储格式。3)I/O地址映射如同前面提到的,ARM处理器采用内存与接口地址统一编址的方案。也就是说,内存与接口共用一个4G的地址空间,其中一部分分配给接口作为接口地址,其他部分用作内存地址。用于内存的接口不能用,而用于接口的内存也不能用。第8章总线8.2.3 ARM指令系统指令系统AR
26、M是一种RISC(精减指令集计算机)处理器,相对于CISC(复杂指令集计算机)要简单一些。但是,这是一种近几年才开发出来的高性能的32位处理器,其指令功能是很强的,相对也比较复杂。本小节仅对ARM的指令系统进行一般性的介绍。第8章总线1ARM指令的一般格式指令的一般格式1)格式一条典型的ARM指令的一般语法格式如下:,其中:opcode为操作码助记符,例如加法指令用ADD表示。cond为指令的执行条件码,详见下文。S用于决定该指令的执行是否影响CPSR。Rd表示目标寄存器。Rn表示保存第1个操作数的寄存器。sthifter_oprand表示第2个操作数的寄存器。第8章总线2)条件码在ARM中定
27、义的条件码与8086有许多类似的地方,读者可对照理解。ARM的条件码如表8.4所示。第8章总线图8.4 ARM的移位操作(a)LSL;(b)LSR;(c)ASR;(d)ROR;(e)RRX第8章总线表表8.4 ARM处理器的条件码处理器的条件码31:28 助记符后缀 标 志 含 义 0000 EQ Z=1 相等 0001 NE Z=0 不相等 0010 CS/HS C=1 无符号数大于/等于 0011 CC/LO C=0 无符号数小于 0100 MI N=1 负 0101 PL N=0 非负 0110 VS V=1 有溢出 0111 VC V=0 无溢出 1000 HI C=1 且 Z=0 无
28、符号数大于 1001 LS C=1 或 Z=1 无符号数小于/等于 1010 GE N=1 且 V=1 或 N=0 且 V=0 带符号数大于/等于 1011 LT N=1 且 V=0 或 N=0 且 V=1 带符号数小于 1100 GT Z=0 且 N=V 带符号数大于 1101 LE Z=1 且 N!=V 带符号数小于/等于 1110 AL 无条件执行 第8章总线2寻址方式寻址方式有关寻址方式的概念前面第3章中已经说明,此处仅介绍ARM处理器的一些最基本的寻址方式。1)寄存器寻址操作数在寄存器中的寻址方式称为寄存器寻址。例如:ADD R1,R2,R3;完成R2+R3R1第8章总线2)立即寻址
29、操作数为立即数。但ARM的立即数定义比较特殊,不是任意一个数都能定义为立即数。只有一个8位数,循环右移偶数次(0、2、4、630),并且最多为循环右移30次,方可构成32位的二进制数。例如,0XFF、0X104、0XFF0、0X3F0、0XFF00、0XF000000F等是合法的。而0X101、0XFF1等是非法的。第8章总线3)寄存器移位寻址这种寻址方式是ARM处理器所特有的,在第2个寄存器操作数与第1个操作数进行某种运算之前,可先进行移位操作。例如指令:ADD R3,R2,R1,LSL#3该指令是先将R1的内容逻辑左移3次,再与R2的内容相加,结果放在R3中。第8章总线ARM处理器中的移位
30、操作是针对32位的,概念上有些与8086一样,有些则不一样,具体说明如下:LSL逻揖左移;LSR逻揖右移;ASR算术右移;ROR循环右移;RRX大循环右移,即包括进位标志在内的循环右移。第8章总线图8.4 ARM的移位操作(a)LSL;(b)LSR;(c)ASR;(d)ROR;(e)RRX第8章总线4)寄存器间接寻址寄存器的内容作为操作数的地址。例如指令:LDR R0,R3该指令的操作就是以R3的内容作为操作数的地址,由该地址读一个32位的字放在R0中。5)变址寻址在此寻址方式中,操作数的地址是由寄存器的内容加上一个带符号的位移量来决定的,位移量的范围在4 KB之间。例如:LDR R1,R4,
31、#8该指令是从R4的内容加上8的内存地址开始,顺序取4个字节放在R1中。第8章总线6)多寄存器寻址该寻址方式可用一条指令进行批量数据的传送。例如:LDMIA R0,R5-R8该指令能将R0的内容所指向的内存字到R0的内容+12所指向的内存字(共4个字)顺序读出并存放在R5、R6、R7和R8中。第8章总线7)相对寻址与8086一样,相对寻址用于转移指令,在这里还用于子程序调用。该寻址方式以PC为基准,在其上加上带符号的位移量,从而改变了PC的内容,也就改变了程序的执行顺序,达到转移的目的。位移量指出目的地址与现行指令之间的相对距离。第8章总线ARM处理器在执行BL指令时要做两件事:(1)将BL下
32、一条指令的地址存入R14(即LR)中。(2)将PC的内容加上指令中所带的经过运算的24位带符号的位移量(已变为32位)构成新的PC的内容。24位带符号的位移量的运算是先将其符号位扩展为32位,再将扩展后的32位左移2位,这就是经过运算后的32位的位移量。第8章总线上述过程看起来似乎很复杂,但在实际编程中是非常简单的,在使用转移指令时,只需在指令中给出转移或调用的标号就可以了。上述复杂的计算是由汇编程序来完成的,编程人员无须关心。但是,编程人员应当知道,在指令中包含的是24位的带符号(用补码表示)的位移量,并且在计算目的地址时又符号扩展左移了2位。因此,位移量相当于带符号的26的二进制数,这就规
33、定了程序转移的范围大致在-32MB到+32MB之间。为了说明如何使用BL,用图8.5表示调用子程序的情况。第8章总线图8.5 用BL指令调用子程序的过程第8章总线在图8.5中,利用一条横线代表一条指令。当ARM执行BL指令时,它会自动将其下一条指令的地址保存在R14中。然后,根据24位的位移量,程序转向FUNCT11去执行一个子程序。在子程序结束时,可用指令MOV PC,R14(也可以用别的指令)返回主程序。第8章总线3ARM的指令系统的指令系统1)内存访问指令 语法格式ARM的访内指令有4种形式,它们的构造格式如下:(1)零偏移格式:,(2)前索引偏移,在传送前将偏移量加到Rn中。格式为:,
34、第8章总线(3)相对偏移,标号地址必须在当前指令的4KB范围内。格式为:,label(4)后索引偏移,在传送后将偏移量加到Rn中。格式为:,第8章总线上面格式中,可选后缀项B表示字节;可选后缀项T若存在,即使处理器在特权模式下,也将该指令看成是在用户模式之下;Rd为要加载或存储的内部寄存器;Rn为存储器的基地址;Flexoffset为偏移量;label为标号,表示相对偏移;!为可选后缀,有!后缀的指令将包括偏移量的地址写回Rn中。第8章总线 指令列表(1)用于字及字节操作的访内指令。用于字及字节操作的访内指令如表8.5所示。第8章总线表表8.5 用于字及字节操作的访内指令用于字及字节操作的访内
35、指令助记符 操 作 LDR 字数据读取 LDRB 字节数据读取 LDRBT 用户模式的字节数据读取 LDRH 半字数据读取 LDRSB 有符号数的字节数据读取 LDRSH 有符号数的半字数据读取 LDRT 用户模式的字数据读取 STR 字数据写入 STRB 字节数据写入 STRBT 用户模式字节数据写入 STRH 半字数据写入 STRT 用户模式字数据写入 第8章总线指令举例:LDR R8,R10 ;以 R10 的内容为内存地址读一个字放 R8,即R10?R8 LDR R0,pldata ;由 pldata 所指的地址取一字放 R0 LDR R1,R2,#-4 ;从内存 R2-4 号单元读一个
36、字放 R1 LDRB R0,R3,#5 ;从内存 R3+5 号单元读一个字节放 R0 的最低字节,;R0 的高 24 位置为 0 LDRH R0,R3,R4 ;从内存由 R3+R4 构成的地址单元读半个字放 R0 的 ;最低 16 位,R0 的高 16 位置为 0 STR R0,R1,#0X100;将 R0 的内容写到 R1+0X100 构成的内存地址中 STRB R5,R3,#0X200!;将 R5 的最低字节写到 R3+0X200 构成的内存地址中,;并使 R5=R5+0X200 第8章总线(2)批量访内指令。批量访内指令使用前面提到的多寄存器寻址,可以实现数据的批量写入内存和读出内存。数
37、据的堆栈操作也具有类似的情况,但是如前第3章所描述的,堆栈操作是先进后出的,这是堆栈操作指令的基本特征。有关一般传送和堆栈操作指令如表8.6所示。第8章总线表表8.6 一般批量传送与堆栈传送对应表一般批量传送与堆栈传送对应表一般批量传送 堆栈操作 LDMDA LDMFA LDMIA LDMFD LDMDB LDMEA LDMIB LDMED STMDA STMED STMIA STMEA STMDB STMFD STMIB STMFA 第8章总线上面的指令中所包括后缀的含义如下:IA事后递增方式;IB事先递增方式;DA事后递减方式;DB事先递减方式;FD满栈递减方式;IB空栈递减方式;DA满栈
38、递增方式;DB空栈递增方式。第8章总线有关一般批量传送举例如下:STMIA R9!,R0,R1,R3,R5 该指令是以事后递增的方式将R0、R1、R3、R5这4个寄存器的内容放在R9的内容为地址的内存单元中,如图8.6所示。第8章总线图8.6 指令STMTA的执行结果第8章总线在ARM处理器中,利用R13作为堆栈指针,堆栈可以是递增的也可以是递减的。在以往的CPU中,8086是递减的而MCS51是递增的,而ARM则具有这两种能力。例如,将R0到R7这8个寄存器压栈和出栈可用下面的指令:STMFD R13!,R0-R7 LDMFD R13!,R0-R72)数据处理指令ARM的数据处理指令包括:数
39、据传送指令、算术运算指令和逻辑运算指令。现将常用的指令列于表8.7中。第8章总线表表8.7 ARM的数据处理指令的数据处理指令 指 令 功 能 MOV 数据传送指令 MVN 数据取反传送指令 CMP 比较指令 CMN 相反数的比较指令 TST 测试指令 TEQ 相等测试指令 ADD 加法指令 SUB 减法指令 RSB 逆向减法指令 ADC 带进位加法指令 SBC 带进位减法指令 RSC 带进位逆向减法指令 AND 与操作指令 BIC 位清除指令 EOR 异或操作指令 ORR 或操作指令 第8章总线在这些数据处理指令中,许多与前面8086的指令类似,但又有自己的特点。指令MOV的语法格式为:MO
40、V S,其中:具有可选条件,可有条件执行,也可以无条件执行;为目标寄存器;为第二操作数,非常灵活,可以是前面所提到的立即数、寄存器,也可以是经过移位的寄存器;第8章总线 S为可选项,若指令中有S,当指令中Rd为R15时,则将当前模式下的SPSR复制到CPSR中;若Rd不为R15,则指令执行将影响状态寄存器中的条件标志位N和Z,若有移位则有可能影响C标志位。若指令中没有S,则不影响标志位。举例如下,若在irq中断服务程序中最后出现指令:MOVS PC,R14该指令将R14(LR)的内容复制到PC中,同时,将SPSR_irq的内容复制到CPSR中。对于本类中的其他指令不再详细介绍,仅举几条指令予以
41、说明如下:ADD R0,R1,R2;第8章总线这条加法指令的功能很简单,即R1+R2R3。下面的指令可以实现R3R4R5R6R7R8R0R1R2的96位整数减法运算,最后的结果放在R0R1R2中。SUBS R2,R5,R8 SBCS R1,R4,R7 SBC R0,R3,R6若要对操作数先取反再传送,可用数据取反传送指令:MVN R4,R5;将R5取反后送R4第8章总线3)乘法指令ARM的乘法指令包括32位乘法和64位乘法,有如表8.8所示的6条乘法指令。ARM的乘法指令同样非常灵活,功能很强。32位的MLA指令的语法格式为:MLA S,该指令可以带条件,可以影响标志位,完成RmRs+RnRd
42、。64位的SMULL指令的语法格式为 SMULL S,第8章总线表表8.8 ARM的乘法指令的乘法指令 指 令 功 能 MUL 32 位乘法指令 MLA 32 位带加数的乘法指令 SMULL 64 位带符号数的乘法指令 SMLAL 64 位带加数有符号数的乘法指令 UMULL 64 位无符号数的乘法指令 UMLAL 64 位带加数无符号数的乘法指令 第8章总线同样,该指令可以带条件,可以影响标志位,完成RmRs=64位积。64位积的高32位放RdHi,低32位放RdLo中。其他指令不再解释。举例如下:MUL R1,R2,R3该指令完成R2R3R1。UMULL R0,R1,R2,R3第8章总线该
43、指令完成R2R3,乘积高32位放R1,低32位放R0。SMLALLES R6,R7,R8,R9这是一条有条件执行的指令,实现R8与R9相乘得到64位的积,再加上R7 R6连到一起的64位,相加后的64位结果放在R7 R6中。该指令执行结果还将影响标志位。第8章总线4)转移指令ARM的转移指令有如表8.9所示的4种。B及BL指令的语法格式为:BL 第8章总线表表8.9 ARM的转移指令的转移指令 指 令 功 能 B 跳转指令 BL 带返回地址的转移指令 BLX 带返回地址和状态切换的转移指令 BX 带状态切换的转移指令 第8章总线其中:有L,规定将当前的PC值(该指令的下一条指令的地址)保存在R
44、14(LR)寄存器中;无L则不保存此PC值。该指令可带有前表8.4所列的条件,就构成了条件转移指令。指令中给出转移的目标地址,实际转移范围如前所述,大致在32MB之间。由于BL保存返回地址,因此它可以用于子程序调用。BLX指令有两种语法格式:BLX Rm BLX label第8章总线执行上述指令,首先将该指令下一条指令的地址(返回地址)存入R14;而后转移到由Rm所指定的绝对地址上或由label所决定的相对地址上去执行。值得注意的是:若Rm的最低有效位为1(即bit0=1),或者使用了BLX label形式的指令,则将ARM切换到Thumb指令集上去执行。BX指令可使程序产生转移,也可使ARM
45、切换到Thumb指令集上去执行。其格式为 BX Rm第8章总线该指令使ARM转移到Rm的内容所规定的地址上执行。Rm的最低位不用作地址(32位指令地址最低2位总为0;而16位指令地址最低位总为0)。当最低位为1时,则将ARM切换到Thumb指令集上去执行。当Rm的最低位为0时,则其第1位(即bit1)不能为1。因为此时转移地址上执行的仍然是32位指令。第8章总线5)ARM协处理器指令ARM支持16个协处理器(CP0CP15),在执行程序过程中,每一个协处理器只执行与自己有关的指令。当协处理器不能执行属于该处理器的指令时,会产生未定义指令异常。协处理器指令有5条,如表8.10所示。第8章总线表表
46、8.10 ARM的协处理器指令的协处理器指令指 令 功 能 CDP 协处理器数据操作指令 LDC 协处理器数据读取指令 STC 协处理器数据写入指令 MCR ARM 寄存器到协处理器寄存器的数据传送指令 MRC 协处理器寄存器到 ARM 寄存器的数据传送指令 第8章总线指令CDP的语法格式为:CDP,其中:为指令执行的条件,也就是说该指令是可以带条件的,也可以无条件;为协处理器的编号;为协处理器将要执行的第1个操作码;为可选协处理器将要执行的第2个操作码;均为协处理器寄存器。第8章总线指令MCR的格式如下:MCR,格式中各部分的解释同上,其中Rd为ARM的寄存器,其内容将被传送到协处理器的寄存
47、器中。例如:MCR p14,3,R7,c7,c11,6该指令是将ARM的R7传送到协处理器CP14的寄存器C7和C11中,操作码1和2分别为3和6。第8章总线6)其他指令ARM处理器还有许多指令,下面将一些常用的指令列于表8.11中,并说明如下。第8章总线表表8.11 ARM的一些其他指令的一些其他指令指 令 功 能 MRS 状态寄存器到通用寄存器的传送指令 MSR 通用寄存器到状态寄存器的传送指令 SWP 通用寄存器与存储器间的数据交换指令 NOP 空操作指令 SWI 软件中断指令 BKPT 断点中断指令 第8章总线指令MRS的格式为 MRS,由指令格式可以看到,该指令可以有条件也可以无条件
48、执行;Rd为目标寄存器;PSR可以是CPSR也可以是SPSR,由指令决定。例如,指令 MRS R3,SPSR第8章总线该指令将当前模式下的SPSR的内容传送到寄存器R3中。指令MSR的格式为 MSR _,MSR _,其中:为可选的条件项。为CPSR或SPSR。第8章总线 指定传送的区域:c 为 CPSR或 SPSR的 bit0bit7;x 为 CPSR 或 SPSR 的 bit8bit15;s 为 CPSR或 SPSR的 bit16bit23;f 为 CPSR 或 SPSR的 bit24bit31。为 8 位立即数,规定如前立即寻址中所述。第8章总线举例:MSR CPSR,R2 该指令将 R2
49、 的内容传送到 CPSR 中。MSR CPSR_c,R4 该指令仅将 R4 的 bit0bit7 传送到 CPSR 的 bit0bit7 中。指令 SWP 的语法格式如下:SWP ,其中:为可选条件项;为目标寄存器;寄存器,存放着要与内存交换的数据;寄存器,其内容为要进行数据交换的内存地址。第8章总线举例如下:SWP R1,R2,R3该指令从R3的内容为地址的内存单元中读出数据放入R1中,同时将R2的内容存入该内存单元中。软件中断指令SWI和断点中断指令BKPT的执行过程将在后面再作说明。以上对ARM处理器的主要指令做了最简单的介绍,以期使读者对指令系统能大致了解。至于16位的Thumb指令,
50、此处不再说明。第8章总线8.2.4 ARM的异常中断处理的异常中断处理1)ARM异常的种类异常是由处理器内部或外部产生的引起处理器处理的一个事件。在概念上,它与前面80X86中的异常非常类似。ARM支持7种异常,各种异常的类型以及处理这些异常的处理程序的起始地址如表8.12所示。第8章总线表表8.12 ARM的异常及其处理程序的起始地址的异常及其处理程序的起始地址异常类型 模式 正常地址 高向量地址 优先级 复位 管理 0X00000000 0XFFFF0000 1 未定义指令 未定义 0X00000004 0XFFFF0004 6 软件中断 SWI 管理 0X00000008 0XFFFF0
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。