




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、52 ARM体系结构概述 ARM编程模型 ARM基本寻址方式 ARM指令集 汇编语言程序设计53 ARM简介 ARM体系结构的特点 ARM处理器结构 ARM体系的变种 ARM处理器内核 ARM处理器核54Advances RISC Machines (称为ARM) 由 Acorn、Apple和VLSI公司1990年11月联合建立的一家设计公司。ARM是16/32位嵌入式RISC处理器知识产权供应商,该公司主要提供高性能, 低价位, 低功耗的RISC处理器、外围设备, 和系统芯片设计给重要的国际电子企业。ARM处理器有3大特点耗电少、成本低、功能强。16/32位双指令集全球众多合作伙伴保证供应A
2、RM目前主要有6个系列的产品:ARM7、ARM9、ARM10E、ARM11、SecurCore、CORTEX。另外还有Inter公司的Xscale和StrongARM。第第3章章 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 55 手机处理器90%的市场份额 上网本处理器30%的市场份额 平板电脑处理器70%的市场份额 2010年,ARM合作伙伴的出货量达到了60亿 2007年底,ARM的雇员总数为1728人,持有专利700项(另有900项正在申请批准中),全球分支机构31家,合作伙伴200家,年收入2.6亿英镑。 5657RISC型处理器结构:指令相对比较精简,降低了处理器
3、的负载性,提高了处理器的速度。Thumb指令集:在新型的ARM体系结构中定义了16位的Thumb指令集,弥补了RISC型处理器占用指令存储空间大的缺点。多处理器状态模式:支持7种处理器模式,可以大大提高ARM处理器的效率。嵌入式在线仿真调试:内嵌在线仿真ICE-RT逻辑,便于通过JTAG来仿真调试ARM体系结构芯片。灵活和方便的接口:有16的协处理器接口,方便扩充各种功能;具有片上总线AMBA,它定义了3组总线,可方便地扩充各种处理器及I/O,便于集成。低电压低功耗的设计第第3章章 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 58 由32位ALU、31个32位通用寄存器及6
4、个状态寄存器、乘法器、3232位桶形移位寄存器、指令译码机控制逻辑、指令流水线和数据/地址寄存器组成。ARM的流水线结构:ARM7体系结构采用3级流水线ARM9体系结构采用5级流水线ARM10体系结构采用6级流水线ARM存储器结构:ARM处理器不带有片内存储器,系统所需的RAM和ROM通过总线外接,部分处理器片内带有存储器管理单元MMU。ARM的I/O结构: ARM处理器不带有I/O部件和模块,需要通过总线来扩充。第第3章章 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 596061存储器映射I/O:ARM处理器对I/O端口地址采用统一编址方式,即把I/O端口地址作为特殊的存
5、储器地址。直接存储器存取DMA: ARM处理器一般没有DMA部件,高档ARM处理器有。中断IRQ和快速中断FIQ:ARM提供一般中断和快速中断,通常用快速中断代替DMA的功能。主要通过采用大量后备寄存器保存现场、片内RAM等加速中断的进入时间。ARM协处理器接口:ARM通过增加协处理器来支持一个通用的指令集的扩充。可以扩展16个协处理器,每个协处理器可有16个寄存器。第第3章章 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 62ARM AMBA接口:采用先进微控制器总线(AMBA)扩展不同体系架构的宏单元及I/O部件。AMBA总线包括三类:先进系统总线ASB:作为系统总线,用
6、来连接高性能系统模块。先进高性能总线AHB:作为系统总线,用来连接高性能系统模块。比ASB功能强。先进外围总线APB:用于连接外围宏单元。ARM JTAG调试接口:用于处理器状态测试JTAG是英文“Joint Test Action Group(联合测试行为组织)” 缩写,主要用于芯片内部测试。主要有4根线:TMS、TCK、TDI、TDO 第第3章章 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 63Thumb指令集(T变种):Thumb指令集是将ARM指令集的一个子集重新编码而形成的一个指令集。ARM指令长度为32位,Thumb指令长度为16位。这样,使用Thumb指令可以
7、得到密度更高的代码,这对于需要严格控制产品成本的设计是非常有意义的。长乘法指令(M变种):M变种增加了两条用于进行长乘法的ARM指令。其中一条用于实现32位整数乘以32位整数,生成64位整数的长乘法操作;另一条指令用于实现32位整数乘以32位位整数,然后加上32位整数,生成64位整数的长乘加操作。增强型DSP指令(E变种):E变种包含了一些附加的指令,这些指令用于增强处理器对一些典型的DSP算法的处理性能。主要包括: 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 64几条新的实现16位数据乘法和乘加操作的指令 实现饱和的带符号数的加减法操作的指令。即在加减法操作溢出时,结果并
8、不进行卷绕,而是使用最大整数或最小负数来表示进行双字数据操作的指令Cache预取指令PLDJava加速器Jazelle(J变种):ARM的Jazelle技术将Java的优势和先进的32位RISC芯片完美地结合在一起。Jazelle技术提供了Java加速功能,可以得到比普通Java虚拟机高得多的性能。ARM媒体功能扩展(SIMD变种):将音频/视频处理提高2-4倍,可以同时进行两个16位操作数或者4个8位操作数的运算,并提供了小数算术运算 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 6516 bit 16 bit 16 bit 16 bit 16 bit 16 bit 16
9、bit 16 bit16 bit源A源B结果同一个操作16 bit 16 bit 16 bit 16 bit 16 bit 16 bit 16 bit16 bit 16 bit 16 bit 16 bit 16 bit 16 bit 16 bit 16 bit66ARM微处理器目前包括下面几个系列除了具有ARM体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点和应用领域。ARM7、ARM9、ARM10E、ARM11、Cortex、Inter的Xscale和StrongARM。ARM内核芯片具有RISC体系的一般特点:具有大量寄存器 。绝大多数操作都是在寄存器中进行,寄存器与内存打
10、交道的唯一是通过Load/Store的体系结构在内存和寄存器之间传递数据。 寻址方式简单。采用固定长度的指令。 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 67 ARM7系列微处理器:低功耗的32位RISC处理器,适合用于对价位和功耗要求较高的消费类应用。特点如下:具有嵌入式ICERT逻辑,调试开发方便。 极低的功耗,适合对功耗要求较高的应用,如便携式产品。 能够提供0.9MIPS/MHz的三级流水线结构。 代码密度高并兼容16位的Thumb指令集。 对操作系统的支持广泛,包括Windows CE、Linux、Palm OS等。 指令系统与ARM9系列、ARM9E系列和AR
11、M10E系列兼容,便于用户的产品升级换代。 主频最高可达130MIPS,高速的运算处理能力能胜任绝大多数的复杂应用。 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 68 应用领域:工业控制、Internet设备、网络和调制解调器设备、移动电话等多种多媒体和嵌入式应用。 ARM7系列微处理器包括如下几种类型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。 其中,ARM7TMDI是目前使用最广泛的32位嵌入式RISC处理器,属低端ARM处理器核。T代表支持Thumb指令集;M代表支持长乘法;D代表支持片上调试;I代表支持嵌入式跟踪宏单元,便于实现调试中
12、的断点和变量观察;J代表支持Java加速;S代表可综合。 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 69 ARM9系列微处理器在高性能和低功耗特性方面提供最佳的性能。具有以下特点:5级整数流水线,指令执行效率更高。提供1.1MIPS/MHz的哈佛结构。 支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA总线接口。全性能的MMU,支持Windows CE、Linux、等多种主流嵌入式操作系统。MPU支持实时操作系统。 支持数据Cache和指令Cache。 应用领域:无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。 ARM9系
13、列微处理器包括如下几种类型的核: ARM920T、ARM922T和ARM940T三种类型。 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 70 ARM11系列微处理器是目前ARM家族中性能最好的一个系列,尤其是在多媒体处理能力方面,在先进的0.13 m工艺下,主频可达750 MHz;ARM11核包含一个64位端口、4种状态的跳转目的地址缓存,支持SIMD指令,可使某些算法的运算速度提高23倍。(1) 多媒体处理扩展,使MPEG-4编码/解码速度加快一倍,音频处理速度加快一倍;(2) 增强的Cache结构,实地址Cache,减少Cache的刷 新 和 重 载 , 减 少 上 下
14、 文 切 换 的 开 销 ;(3) 增强的异常和中断处理,使实时任务的处理更加迅速;(4) 支持Unaligned和Mixed-endian数据访问,使数据共享、软件移植更简单,也有利于节省存储器空间。71 ARM Cortex系列产品由三个系列所组成,全都采用V7/Thumb-2指令集设计,定位如下: ARM Cortex-A系列:复杂操作系统及客户端装置之应用处理器;A多媒体,开放式操作系统,dsp加速。 高端 ARM Cortex-R系列:针对实时系统的嵌入式处理器;R实时,可预测性,超级稳定性。中端 ARM Cortex-M系列:价格敏感型应用装置之嵌入式处理器,包括微处理器应用;M为
15、工控设计,小巧快速。 低端72 处理器模式与状态 ARM寄存器组织 异常Exceptions 存储器和存储器映射I/O73ARM处理器支持7种不同的处理器模式,除用户模式外的其它模式通称为特权模式,主要是为了服务中断或异常,或访问保护的资源。除用户和系统模式外的其它模式通称为异常模式。处理器模式描述用户usr正常程序执行的模式快速中断fiq用于高速数据传输和通道处理外部中断irq用于通常的中断处理 管理svc供操作系统使用的一种保护模式中止abt用于虚拟存储及存储保护 未定义und用于支持硬件协处理器的软件仿真系统sys用于运行特权级的操作系统任务 ARM处理器的7种处理器模式异常模式特权模式
16、 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 74ARM处理器有处理器有2种工作状态种工作状态Thumb指令集的功能是指令集的功能是32位位ARM指令集的指令集的功能子集。功能子集。Thumb在性能和代码大小之间提供在性能和代码大小之间提供了出色的折中。了出色的折中。正在执行正在执行Thumb指令集的处理器是工作在指令集的处理器是工作在Thumb状态下。状态下。正在执行正在执行ARM指令集的处理器是工作在指令集的处理器是工作在ARM状态状态下。下。 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 75 ARM处理器共有37个寄存器。其中包括:31个通用寄存器
17、,包括R0R15,其中R15为程序计数器(PC)。这些寄存器都是32位寄存器。在每种处理器模式中都有一组这样的寄存器。任意模式下,可见的寄存器包括16个通用寄存器(R0R15)、一个或两个状态寄存器。在所有的寄存器中,有些是各模式共用的一个物理寄存器;有一些寄存器是各模式自己拥有的独立的物理寄存器。6个状态寄存器,这些寄存器也是32位寄存器,但只使用了其中的12位。 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 76不分组寄存器R0R7:任何模式下所访问的都是同样的物理寄存器。分组寄存器R8R14:每一个访问的物理寄存器取决于当前的处理器模式,若要访问特定的物理寄存器而不依赖
18、于当前的处理器模式,则要使用规定的名字。其中:R13通常用作堆栈指针,称为SPR14用于子程序连接寄存器,称为LR程序计数器R15:由于ARM体系结构采用了多级流水线技术,PC总是指向当前指令的下两条指令的地址,即PC的值=当前指令的地址+8。并且在ARM状态,位1:0为0(字对齐)在Thumb状态位0为0,(半字对齐) 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 77 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 78Lable程序A程序BR14BL Lable地址A?MOV PC,LRR14(地址A)Lable?1.程序A执行过程中调用程序B;操作流程
19、2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14;3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;79寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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)
20、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为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。80 读R15的限制 正常操作时,从R15读取的值是处理器正在取指的地址,即当
21、前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。LDR R0,PC?PCPC-4PC-8正在执行正在译码正在取指流水线状态地址程序代码81 读R15的限制 当使用STR或STM指令保存R15时,会有一个例外。这些指令可能将当前指令地址加8字节或加12字节保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。 所以最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。82 写R15的限制 正常操作时,写入正常操作时,写入
22、R15 R15 的值被当作一个的值被当作一个指令地址,程序从这个地址处继续执行(相指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。当于执行一次无条件跳转)。 83 写R15的限制 由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0 xFFFFFFFC相与得到;在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。84寄 存 器 R 1 6 用 作 当 前 程 序 状 态 寄 存
23、 器CPSR,可在任何运行模式下被访问,它包括:每一种异常模式下有一个专用的物理状态寄存器,称为备份程序状态寄存器SPSR,当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。用户模式和系统模式下不应该访问SPSR。 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 85Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,程序员可以直接访问8个通用寄存器R07、PC、SP、LR、和CPSR。在每一种特权模式下都有一组SP、LR和SPSR。 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 868788当正常的程序执行流程
24、发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。ARM体系结构中的异常,与8位/16位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。 当异常出现后,ARM强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量Exception Vectors(P40表3-6) 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 89复位:当处理器复位电平有效时,产生复位异常。未定义指令:当ARM处理器或协
25、处理器遇到不能处理的指令时,产生未定义指令异常。软件中断:由执行SWI指令产生,可使用该异常机制实现用户模式下的系统功能调用。指令预取中止:当指令预取访问存储器失败并且无效的预取指令被执行时,产生指令预取中止异常。 数据中止:若处理器数据访问的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。 外部中断请求IRQ:当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。快速中断请求FIQ:当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 90异常向量表 1 2 3ARM体系结构
26、概述ARM编程模型 ARM基本寻址方式 91优先级优先级异常异常优先级优先级异常异常1(最高)(最高)复位复位4IRQ2数据中止数据中止5预取中止预取中止3FIQ6(最低)(最低)未定义指令、未定义指令、SWI92 响应将下一条指令的地址存入相应LR,以便程序在处理异常返回时能从正确的位置重新开始执行。将CPSR复制到相应的SPSR中。根据异常类型,强制设置CPSR的运行模式位。强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。 返回: 将LR的值回送到PC中。 将SPSR复制回CPSR中。 若进入异常处理时设置了中断禁止位,则清除。 1 2 3ARM体系结构概述A
27、RM编程模型 ARM基本寻址方式 93 异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。R14R14_irq用户模式下的程序IRQ模式下的程序AareturnB.XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏94R14R14_irq用户模式下的程序IRQ模式下的程序AaB.XA地址A地址A1.执行用户模式下
28、的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏IRQ模式下的程序BareturnB.XA地址B地址B4. 如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断,或者调用子程序;5. 硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误;被破坏6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;returnreturn 解决办法是确保R14的对
29、应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。 当发生异常嵌套时,这些异常之间可能会发生冲突。例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。95存储器:ARM体系使用单一的平板地址空间。该地址空间的大小为232个8位字节,即4G。存储器访问的地址要求对准,ARM存储器的空间可以是:字节对齐,范围为0232-1半字对齐(A、A+1),范围为0231-1字
30、对齐的(A、A+1、A+2、A+3),范围为0230-1存储器映射I/O:I/O设别地址和存储器统一编址,当使用这些特定的存储器地址读写时,提供的是I/O功能。小端和大端:地址单元其所对应的数据高低位顺序与存储系统是小端还是大端有关。小端低位在低地址,大端低位在高地址。 1 2 3ARM体系结构概述ARM编程模型 ARM基本寻址方式 96ARM处理器支持下列数据类型: 字节 8位 半字 16位(必须分配为占用2个字节) 字 32为(必须分配为占用4个字节)ARM体系结构可以用两种方法存储字数据,体系结构可以用两种方法存储字数据,称为称为大端格式大端格式和和小端格式小端格式。1112342字单元
31、半字0半字1字单元半字1半字097 ARM指令编码的一般方式 ARM指令的寻址方式 ARM汇编程序实例9899 ARM指令汇编格式S,使用条件码“cond”可以实现高效的逻辑操作(节省跳转和条件语句),提高代码效率。所有的ARM指令都可以条件执行,而Thumb指令只有B(跳转)指令具有条件执行功能。如果指令不标明条件代码,将默认为无条件(AL)执行。 Operand2形式#immed_8r、 Rm、 Rm,shift(寄存器(寄存器+移位)移位) 寻址方式所谓寻址方式就是处理器根据指令中给出的地址信息来寻址物理地址的方式。对于ARM指令来说,就是如何找到operand2具体来说,有以下9种寄存
32、器寻址;立即寻址;寄存器移位寻址;寄存器间寄存器寻址;立即寻址;寄存器移位寻址;寄存器间接寻址;基址寻址;多寄存器寻址;堆栈寻址;块拷接寻址;基址寻址;多寄存器寻址;堆栈寻址;块拷贝寻址;相对寻址。贝寻址;相对寻址。100 操作数的值在寄存器中,指令中的地址操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举接取出寄存器值来操作。寄存器寻址指令举例如下:例如下: MOV R1,R2 ;将将R2的值存入的值存入R1 SUB R0,R1,R2 ;将将R1的值减去的值减去R2的值,结果保存到的值,结果保存
33、到R0 0 xAA0 x55R2R1寻址方式分类寻址方式分类寄存器寻址寄存器寻址MOV R1,R20 xAA101 立即寻址指令中的操作码字段后面的立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数出了可以立即使用的操作数( (这样的数称为这样的数称为立即数立即数) )。立即寻址指令举例如下:。立即寻址指令举例如下: SUBSR0,R0,#1 ;R0减减1,结果,结果放入放入R0,并且影响标志位,并且影响标志位MOV R0,#0 xFF000 ;
34、将立即数将立即数0 xFF000装入装入R0寄存器寄存器 0 x55R0MOV R0,#0 xFF00程序存储寻址方式分类立即寻址MOV R0,#0 xFF000 xFF00从代码中获得数据102 寄存器移位寻址是寄存器移位寻址是ARMARM指令集特有的寻址方式。当指令集特有的寻址方式。当第第2 2个操作数是寄存器移位方式时,第个操作数是寄存器移位方式时,第2 2个寄存器操作数个寄存器操作数在与第在与第1 1个操作数结合之前,选择进行移位操作。寄存器个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:移位寻址指令举例如下:MOV R0,R2,LSL #3;R2的值左移的值左移3位,
35、结果放入位,结果放入R0, ;即是即是R0=R28 ANDS R1,R1,R2,LSL R3;R2的值左移的值左移R3位,然后位,然后 ;和和R1相相“与与”操作,结果放入操作,结果放入R10 x55R0R20 x01寻址方式分类寄存器移位寻址MOV R0,R2,LSL #30 x080 x08逻辑左移3位103 寄存器间接寻址指令中的地址码给出的是一寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作存器指定地址的存储单元中,即寄存器为操作数的地址指针。例如:数的地址指针。例如: LDR
36、 R1,R2 ;将将R2指向的存储单元的数据指向的存储单元的数据;读出保存在读出保存在R1中中 SWP R1,R1,R2 ;将寄存器将寄存器R1的值和的值和R2;指定的存储单元的内容交换指定的存储单元的内容交换 0 x55R0R2 0 x400000000 xAA0 x40000000 寻址方式分类寻址方式分类寄存器间接寻址寄存器间接寻址LDR R0,R20 xAA104LSL移位操作:移位操作:0LSR移位操作:移位操作:0ASR移位操作:移位操作:ROR移位操作:移位操作:RRX移位操作:移位操作:C105 基址寻址就是将基址寄存器的内容与指令中给出基址寻址就是将基址寄存器的内容与指令中给
37、出的偏移量(的偏移量(4K b)a+;Elseb+;对应的汇编代码:对应的汇编代码:CMPR0,R1 ;R0(a)与)与R1(b)比较比较ADDHI R0,R0,#1 ;若若R0R1,则,则R0=R0+1ADDLS R1,R1,#1 ;若若R011,则,则R1=R1+1R1=R1+1示例:示例:119 32位ARM指令集有14种基本指令类型组成,可分为5大类:3种类型的存储器访问指令:控制存储器和寄存器之间的数据传送。3种类型的数据处理指令:使用片内ALU、桶形移位器和乘法器针对31个寄存器完成高速数据处理操作。4种类型的转移指令:控制程序执行流程、指令优先级以及ARM代码和Thumb代码的切
38、换。3种类型的协处理器指令:专用于控制外部协处理器。这些指令以开放和统一的方式扩展了指令集的片外功能。杂类指令:包括中断调用、标志传入传出等。34 5ARM基本寻址方式 ARM指令集 汇编语言程序设计 120 在存储器和寄存器之间传送单一数据指令LDR和STR指令格式: opcond type Rd , 地址。type表示传送数据的类型,必须是下列值之一:D:表示双字、空:表示字SH:带符号半字、H:无符号半字B:无符号字节、SB:带符号字节使用举例:LDRB R0, R1LDRNEB R0, R1, #1!STR Rd, placeSTR Rd, Rbase, Rindex34 5ARM基本
39、寻址方式 ARM指令集 汇编语言程序设计 121LDRLDR和和STRSTR字和无符号字节加载字和无符号字节加载/ /存储指令编码存储指令编码指令执行的条件码指令执行的条件码I I为为0 0时,偏移量为时,偏移量为1212位立即数,为位立即数,为1 1时,时,偏移量为寄存器移偏移量为寄存器移位位P P表示前表示前/ /后变址后变址U表示加/减B B为为1 1表示字节访问,表示字节访问,为为0 0表示字访问表示字访问WW表示回写表示回写为指令的寻址方式为指令的寻址方式RdRd为源为源/ /目标寄存器目标寄存器RnRn为基址寄存器为基址寄存器L L用于区别加载(用于区别加载(L L为为1 1)或存
40、储(或存储(L L为为0 0)122LDRLDR和和STRSTR字和无符号字节加载字和无符号字节加载/ /存储指令存储指令 LDR/STRLDR/STR指令寻址非常灵活,它由两部分组成,其中一部分为一个基指令寻址非常灵活,它由两部分组成,其中一部分为一个基址寄存器,可以为任一个通用寄存器;另一部分为一个地址偏移量。地址寄存器,可以为任一个通用寄存器;另一部分为一个地址偏移量。地址偏移量有以下址偏移量有以下3 3种格式:种格式: 立即数立即数。立即数可以是一个无符号的数值。这个数据可以加到基址寄存。立即数可以是一个无符号的数值。这个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值。器,也
41、可以从基址寄存器中减去这个数值。 如:如:LDR R1,R0,#0 x12 ;R1-R0+0 x12寄存器寄存器。寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中。寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。减去这个数值。 如:如:LDR R1,R0,R2 ; R1-R0+R2 LDR R1,R0,-R2 ; R1-R0-R2寄存器及移位常数寄存器及移位常数。寄存器移位后的值可以加到基址寄存器,也可以从。寄存器移位后的值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。基址寄存器中减去这个数值。 如:如:LDR R1,R0,R2,LSL #2 ;R1-R0+R
42、2*4 123 从寻址方式的地址计算方法分,加载从寻址方式的地址计算方法分,加载/ /存储指令有存储指令有以下以下4 4种格式:种格式: 零偏移零偏移。如:如:LDR Rd,Rn 前索引偏移前索引偏移。如:如:LDR Rd,Rn,#0 x04!程序相对偏移程序相对偏移。 如:如:LDR Rd,labe1 后索引偏移。后索引偏移。如:如:LDR Rd,Rn,#-0 x04注意注意:必须保证字数据操作的地址是:必须保证字数据操作的地址是3232位对齐的。位对齐的。LDRLDR和和STRSTR字和无符号字节加载字和无符号字节加载/ /存储指令存储指令124LDRLDR和和STRSTR半字和有符号字节
43、加载半字和有符号字节加载/ /存储指令存储指令 这类这类LDR/STRLDR/STR指令可加载有符号半字或字节,指令可加载有符号半字或字节,可加载可加载/ /存储无符号半字。偏移量格式、寻址方式与存储无符号半字。偏移量格式、寻址方式与加载加载/ /存储字和无符号字节指令相同。存储字和无符号字节指令相同。 LDRcondSB Rd,;将指定地址上的有符号字节读入将指定地址上的有符号字节读入Rd LDRcondSH Rd,;将指定地址上的有符号半字读入将指定地址上的有符号半字读入Rd LDRcondH Rd,;将指定地址上的半字数据读入将指定地址上的半字数据读入Rd STRcondH Rd,;将将
44、Rd中的半字数据存入指定地址中的半字数据存入指定地址注意注意:1. 1.有符号位半字有符号位半字/ /字节加载是指用符号位加载扩展到字节加载是指用符号位加载扩展到3232位,无符号半字加载是位,无符号半字加载是指用零扩展到指用零扩展到3232位;位;2.2.半字读写的指定地址必须为半字读写的指定地址必须为偶数偶数,否则将产生不可靠的结果;,否则将产生不可靠的结果;125ARM存储器访问指令存储器访问指令单寄存器存储单寄存器存储LDRLDR和和STRSTR半字和有符号字节加载半字和有符号字节加载/ /存储指令编码存储指令编码指令执行的条件码指令执行的条件码I I为为0 0时,偏移量为时,偏移量为
45、1212位立即数,为位立即数,为1 1时,时,偏移量为寄存器移偏移量为寄存器移位位P P表示前表示前/ /后变址后变址U U表示加表示加/ /减减WW表示回写表示回写为指令的寻址方式为指令的寻址方式RdRd为源为源/ /目标寄存器目标寄存器RnRn为基址寄存器为基址寄存器L L用于区别加载(用于区别加载(L L为为1 1)或存储(或存储(L L为为0 0)S S为为1 1表示有符号访问,表示有符号访问,为为0 0表示无符号访问表示无符号访问H H为为1 1表示半字访问,为表示半字访问,为0 0表示字节访问表示字节访问126LDRLDR和和STRSTR指令应用示例:指令应用示例:1. 1.加载加
46、载/ /存储字和无符号字节指令存储字和无符号字节指令LDRR2,R5;将将R5指向地址的字数据存入指向地址的字数据存入R2STRR1,R0,#0 x04;将将R1的数据存储到的数据存储到R0+0 x04地址地址LDRBR3,R2,#-1 ;将将R2指向地址的字节数据存入指向地址的字节数据存入R3,R2R21STRBR0,R3,-R8 ASR 2 ;R0-R3-R8/4,存储存储R0的最低有效字节的最低有效字节2.2.加载加载/ /存储半字和有符号字节指令存储半字和有符号字节指令LDRSB R1,R0,R3;将将R0+R3地址上的字节数据存入地址上的字节数据存入R1,;高高24位用符号扩展位用符
47、号扩展LDRH R6,R2,#2;将将R2指向地址的半字数据存入指向地址的半字数据存入R6,高,高16位用位用0扩展扩展;读出后,读出后,R2=R2+2STRH R1,R0,#2!;将将R1的半字数据保存到的半字数据保存到R0+2地址,地址,;只修改低只修改低2字节数据,然后字节数据,然后R0=R0+2ARM存储器访问指令存储器访问指令单寄存器存储单寄存器存储127 在存储器和寄存器之间传送多个数据指令LDM和STM,可以传送R015的任何组合。指令格式: opcond mode Rn! , 。mode必须是下列值之一:IA或IB:每次传送后或前地址加4DA或DB:每次传送后或前地址减4FD或
48、ED:满或空递减堆栈FA或EA:满或空递增堆栈使用举例:STMIA R8, R0, R1,R9LDMFD R13!, R1, R0LDMFD R13!, R0,R4-R7,PC34 5ARM基本寻址方式 ARM指令集 汇编语言程序设计 128ARM存储器访问指令存储器访问指令多寄存器存取多寄存器存取 多寄存器加载多寄存器加载/ /存储指令的存储指令的8 8种模式如下表所示,右边四种为堆栈操种模式如下表所示,右边四种为堆栈操作、左边四种为数据传送操作。作、左边四种为数据传送操作。模式模式说明说明模式模式说明说明IA每次传送后地址加每次传送后地址加4FD满递减堆栈满递减堆栈IB每次传送前地址加每次
49、传送前地址加4ED空递减堆栈空递减堆栈DA每次传送后地址减每次传送后地址减4FA满递增堆栈满递增堆栈DB每次传送前地址减每次传送前地址减4EA空递增堆栈空递增堆栈数据块传送操作数据块传送操作堆栈操作堆栈操作 进行数据复制时,先设置好源数据指针和目标指针,然后使用块拷进行数据复制时,先设置好源数据指针和目标指针,然后使用块拷贝寻址指令贝寻址指令LDMIA/STMIALDMIA/STMIA、LDMIB/STMIBLDMIB/STMIB、LDMDA/STMDALDMDA/STMDA、LDMDB/STMDBLDMDB/STMDB进行读取和存储进行读取和存储 。 进行堆栈操作操作时,要先设置堆栈指针(进
50、行堆栈操作操作时,要先设置堆栈指针(SPSP),然后使用堆栈寻),然后使用堆栈寻址指令址指令STMFD/LDMFD STMFD/LDMFD 、STMED/LDMEDSTMED/LDMED、STMFA/LDMFASTMFA/LDMFA和和STMEA/LDMEASTMEA/LDMEA实现堆栈操作。实现堆栈操作。129ARM存储器访问指令存储器访问指令多寄存器存取多寄存器存取数据块传送指数据块传送指令令操作过程如操作过程如右图所示,其右图所示,其中中R1R1为指令执为指令执行前的基址寄行前的基址寄存器,存器,R1R1则则为指令执行后为指令执行后的基址寄存器。的基址寄存器。R5R6R7R1 R1 指令
51、STMIA R1!,R5-R7空递增4008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDA R1!,R5-R7空递减4008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMIB R1!,R5-R7满递增4008H4004H4000H4014H4010H400CHR5R6R7R1 R1 指令STMDB R1!,R5-R7满递减4008H4004H4000H4014H4010H400CH130ARM存储器访问指令存储器访问指令多寄存器存取多寄存器存取数据块传送数据块传送存储存储堆栈操作堆栈操作压栈压栈说明说明数据块传
52、送数据块传送加载加载堆栈操作堆栈操作出栈出栈说明说明STMDASTMED空递减空递减LDMDALDMFA满递减满递减STMIASTMEA空递增空递增LDMIALDMFD满递增满递增STMDBSTMFD满递减满递减LDMDBLDMEA空递减空递减STMIBSTMFA满递增满递增LDMIBLDMED空递增空递增;使用数据块传送指令进行堆栈操作使用数据块传送指令进行堆栈操作STMDAR0!,R5-R6. . .LDMIBR0!,R5-R6;使用堆栈指令进行堆栈操作使用堆栈指令进行堆栈操作STMEDR13!,R5-R6. . .LDMEDR13!,R5-R6 两段代码的执行结果是一样的,但是使用堆栈指
53、令的压栈和出栈操两段代码的执行结果是一样的,但是使用堆栈指令的压栈和出栈操作编程很简单(只要前后一致即可),而使用数据块指令进行压栈和作编程很简单(只要前后一致即可),而使用数据块指令进行压栈和出栈操作则需要考虑空满一致、加与减对应的问题。出栈操作则需要考虑空满一致、加与减对应的问题。堆栈操作和数据块传送指令类似,也有堆栈操作和数据块传送指令类似,也有4 4种模式,差别在于基地址寄种模式,差别在于基地址寄存器不一样。这两类指令之间的关系如下表所示:存器不一样。这两类指令之间的关系如下表所示:131 预加载指令PLD:用于提示存储系统将要加载的存储器地址,提高存储器的访问速度。格式:PLD Rn
54、 , Flexoffset举例:PLD R2、PLDR0,R2PLD R15,#280、PLD R5,R8,LSL #2 单一数据交换指令SWP:在寄存器和存储器之间进行数据交换。格式:SWP cond B Rd, Rm, Rn举例:SWP R1,R2,R5SWPB R1,R2,R534 5ARM基本寻址方式 ARM指令集 汇编语言程序设计 132 ADD、ADC 、SUB 、SBC、RSB、RSC格式:op cond S Rd, Rn, Operand2说明:ADD(ADC):Rn+Operand2Rd (带进位加)SUB(SBC): Rn-Operand2Rd (带进位减)RSB(RSC)
55、 :Operand2-RnRd (带进位减) 与AND、或ORR、异或EOR和位清零BIC格式:op cond S Rd, Rn, Operand2说明:BIC:将Rn中的位与 Operand2之中相应位的反码进行与操作,结果送Rd 。其它命令实现Rn OP Operand2 Rd34 5ARM基本寻址方式 ARM指令集 汇编语言程序设计 133助记符助记符说明说明操作操作条件码位置条件码位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2加法运算指令加法运算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondSSUB Rd,
56、Rn, operand2SUB Rd, Rn, operand2减法运算指令减法运算指令RdRdRn-operand2Rn-operand2SUBcondSSUBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向减法指令逆向减法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2带进位加法带进位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, oper
57、and2SBC Rd, Rn, operand2带进位减法指令带进位减法指令R dR d R n - o p e r a n d 2 -R n - o p e r a n d 2 -(NOT)Carry(NOT)CarrySBCcondSSBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2带进位逆向减法指带进位逆向减法指令令R dR d o p e r a n d 2 - R n -o p e r a n d 2 - R n -(NOT)Carry(NOT)CarryRSCcondSRSCcondS134助记符助记符说明说明操作操作条件码位置条件码位
58、置AND Rd, Rn, operand2AND Rd, Rn, operand2逻辑与操作逻辑与操作指令指令RdRdRn & operand2Rn & operand2ANDcondSANDcondSORR Rd, Rn, operand2ORR Rd, Rn, operand2逻辑或操作逻辑或操作指令指令RdRdRn | operand2Rn | operand2ORRcondSORRcondSEOR Rd, Rn, operand2EOR Rd, Rn, operand2逻辑异或操逻辑异或操作指令作指令RdRdRn operand2Rn operand2EORcondSE
59、ORcondSBIC Rd, Rn, operand2BIC Rd, Rn, operand2位清除指令位清除指令RdRdRn & (operand2)Rn & (operand2)BICcondSBICcondSARMARM数据处理指令数据处理指令逻辑运算指令逻辑运算指令注:当后缀注:当后缀S时,这些指令根据结果更新标志时,这些指令根据结果更新标志N和和Z,在计算,在计算Operand2时更新标志时更新标志C,不影,不影响标志响标志V。135 传送MOV和传送取反值MVN 指令格式:OP cond S Rd, Operand2说明:MVN将Operand2按位取反送RdOpe
60、rand2只能是寄存器或立即数举例:MOV R0, R0 ; R0 = R0 相当于 NOP 指令MVN R0, #0 xff ; R0 = 0 xffffff00 比较CMP和比较反值CMN格式: OP cond S Rd, Operand2说明:结果不保存但影响条件码标志, CMN做加法。34 5ARM基本寻址方式 ARM指令集 汇编语言程序设计 136 测试位TST和测试等价TEQ指令格式:OP cond Rn, Operand2说明:结果不保存但影响条件码标志。TST实现按位与, TEQ实现按位异或 前导零计数CLZ指令格式:OP cond Rd, Rm说明:CLZ指令对Rm中值的前导零的个数进行计数结果送Rd中。若为31为1,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024广东广州华资软件技术有限公司校园招聘笔试参考题库附带答案详解
- 2025年广东江门中医药职业学院单招职业倾向性测试题库附答案
- 2025年黑龙江交通职业技术学院单招职业技能测试题库完美版
- 2025年赣州职业技术学院单招职业倾向性测试题库审定版
- 2025年吉林工业职业技术学院单招职业适应性测试题库参考答案
- 第二课 创新驱动发展 教学设计-2023-2024学年统编版道德与法治九年级上册(两课时)
- 2025年河北正定师范高等专科学校单招职业适应性测试题库及答案1套
- 输电线路带电作业资格复习题+答案
- 2025年贵阳职业技术学院单招职业技能测试题库带答案
- 人教版一年级数学5单元
- 医院科普直播方案
- 高原反应的症状和处理方法
- 物业有限空间作业应急预案
- 铁道概论(第八版)佟立本主编
- 中考数学总复习全套课件
- 2023年6月新高考天津卷英语试题真题及答案解析(精校打印版)
- 粉尘爆炸风险评估记录-危险源辨识与评价表
- 幼儿园科学课件:《大肚子妈妈》
- 智能农业除草机器人研究现状与趋势分析
- 《论文所用框架图》课件
- 人教版三年级下册说课标、说教材
评论
0/150
提交评论