编程模型与指令系统.ppt_第1页
编程模型与指令系统.ppt_第2页
编程模型与指令系统.ppt_第3页
编程模型与指令系统.ppt_第4页
编程模型与指令系统.ppt_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

2020 3 26 1 4 1ARM微处理器的工作模式 ARM微处理器支持7种工作模式User 用户模式 usr ARM处理器正常的程序执行状态System 系统模式 sys 运行具有特权的操作系统任务IRQ 外部中断模式 irq 用于通用的中断处理FIQ 快速中断模式 fiq 用于高速数据传输或通道处理 第四章ARM微处理器的编程模型与指令系统 2020 3 26 3 4 1ARM微处理器的工作模式 续 ARM微处理器支持7种工作模式Supervisor 管理模式 svc 操作系统使用的保护模式复位 软中断调用 SWI Abort 中止模式 abt 当数据或指令预取中止时进入该模式可用于虚拟存储及存储保护Undefined 未定义指令模式 und 当未定义的指令执行时进入该模式可用于支持硬件协处理器的软件仿真 2020 3 26 4 4 1ARM微处理器的工作模式 续 特权模式除用户模式以外 其余6种模式称之为特权模式 PrivilegedModes 当处理器运行在用户模式下时 某些被保护的系统资源是不能被访问的异常模式除去用户模式和系统模式以外的5种又称为异常模式 ExceptionModes 常用于处理中断或异常 以及需要访问受保护的系统资源等情况 2020 3 26 5 4 1ARM微处理器的工作模式 续 工作模式的改变通过软件改变系统调用通过外部中断或异常处理改变外部中断 IRQ FIQ来自中断控制器异常处理来自CPU内部 2020 3 26 6 4 1ARM微处理器的工作模式 续 工作模式的改变举例SWI软件中断指令SWI0 x0 调用0号软中断SWI0 x12 调用12号软中断IRQ外部中断 irqvoidHandlerTIMER5 void timeval 当前时刻递增pIC I ISPC INT TIMER5 清除中断请求位 2020 3 26 7 4 2ARM微处理器的工作状态 ARM微处理器的工作状态一般有两种第一种为ARM状态处理器执行32位的ARM指令ARM指令要求字对齐第二种为Thumb状态处理器执行16位的Thumb指令Thumb指令要求半字对齐 2020 3 26 8 4 2ARM微处理器的工作状态 续 工作状态切换在程序的执行过程中 处理器可以随时在两种工作状态之间切换处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容ARM微处理器在开始执行代码时总是处于ARM状态也就是复位后进入ARM状态 2020 3 26 9 4 2ARM微处理器的工作状态 续 工作状态切换方法进入Thumb状态执行BX指令BX 带状态切换的跳转指令当操作数寄存器的最低位 0 为1时 可以使微处理器从ARM状态切换到Thumb状态BXR0 R0的最低位 0 为1处理器工作在Thumb状态 如果发生异常并进入异常处理子程序 则异常处理完毕返回时 自动从ARM状态切换到Thumb状态 2020 3 26 10 4 2ARM微处理器的工作状态 续 工作状态切换方法进入ARM状态执行BX指令BX 带状态切换的跳转指令当操作数寄存器的最低位 0 为0时 可以使微处理器从Thumb状态切换到ARM状态BXR0 R0的最低位 0 为0处理器工作在Thumb状态 如果发生异常并进入异常处理子程序 则进入时处理器自动从Thumb状态切换到ARM状态 2020 3 26 11 4 2ARM微处理器的工作状态 续 工作状态切换举例BLabelCMPR1 0BEQLabelADRLR0 ThumbFun 1BXR0BLXLabel BLX 下一条指令地址送往LR寄存器 Label送往PC 并完成状态切换 2020 3 26 12 4 3ARM体系结构的寄存器组织 ARM处理器的寄存器37个32位寄存器31个通用寄存器6个状态寄存器这些寄存器不能被同时访问取决于处理器的工作状态工作模式 2020 3 26 13 4 3ARM体系结构的寄存器组织 1ARM状态下的寄存器组织2Thumb状态下的寄存器组织3程序状态寄存器 2020 3 26 14 1ARM状态下的寄存器组织 通用寄存器通用寄存器包括R0 R15可以分为三类未分组寄存器R0 R7分组寄存器R8 R14程序计数器R15 PC 2020 3 26 15 1ARM状态下的寄存器组织 续 未分组寄存器R0 R7在所有的工作模式下 每个未分组寄存器都指向对应的一个物理寄存器在中断或异常处理进行工作模式转换时 由于不同的处理器工作模式均使用相同的物理寄存器 可能会造成寄存器中数据的破坏 2020 3 26 16 1ARM状态下的寄存器组织 续 分组寄存器R8 R14R8 R12每个寄存器对应2个不同的物理寄存器当使用FIQ模式时 访问R8 fiq R12 fiq当使用其他模式时 访问R8 usr R12 usrR13 R14每个寄存器对应6个不同的物理寄存器其中一个寄存器是用户模式与系统模式共用另外5个物理寄存器对应于其他5种不同的工作模式 2020 3 26 17 1ARM状态下的寄存器组织 续 不同物理寄存器的区分R13 R14 mode为 usr fiq irq svc abt und例如 R13 usr R13 fiq R13 irqR14 svc R14 abt R14 und 2020 3 26 18 1ARM状态下的寄存器组织 续 R13寄存器常用作堆栈指针SP StackPointer 一种习惯用法也可使用其他的寄存器作为堆栈指针在Thumb指令集中 某些指令强制使用R13作为堆栈指针在应用程序初始化时 一般都要初始化每种模式下的R13 使其指向该工作模式的栈空间 2020 3 26 19 1ARM状态下的寄存器组织 续 R14寄存器也称链接寄存器LR LinkRegister 当执行BL子程序调用指令时 R14中得到R15 程序计数器PC 的备份BLLabel 下一条指令地址 LR Label PC当发生中断或异常时 对应的分组寄存器R14 svc R14 irq R14 fiq R14 abt和R14 und用来保存R15的返回值其他情况下 R14用作通用寄存器 2020 3 26 20 1ARM状态下的寄存器组织 续 R14寄存器常用情形1 常用用法 子程序返回 MOVPC LRBXLR2 在子程序入口处使用以下指令将R14存入堆栈STMFDSP LR 使用以下指令可以完成子程序返回LDMFDSP PC 2020 3 26 1ARM状态下的寄存器组织 续 R15寄存器R15寄存器用作程序计数器 PC 在ARM状态下 位 1 0 为0 位 31 2 用于保存PC在Thumb状态下 位 0 为0 位 31 1 用于保存PC由于ARM体系结构采用了多级流水结构 对于ARM指令集而言 PC总是指向当前执行指令的下两条指令的地址 即PC的值为当前执行指令的地址值加8个字节R15也可用作通用寄存器 但一般不这么使用因为对R15的使用有一些特殊的限制 当违反了这些限制时 程序的执行结果是未知的 2020 3 26 22 1ARM状态下的寄存器组织 续 CPSR寄存器用作CPSR CurrentProgramStatusRegister CPSR可在任何工作模式下被访问 它包括条件标志位 中断禁止位 当前处理器模式标志位 以及其他一些相关的控制和状态位异常模式下有一个专用的物理状态寄存器 称为SPSR SavedProgramStatusRegister 当异常发生时 SPSR用于保存CPSR的当前值 从异常退出时则可由SPSR来恢复CPSR用户模式和系统模式不属于异常模式 没有SPSR 2020 3 26 国防科技大学计算机学院601室 23 2020 3 26 24 2Thumb状态下的寄存器组织 Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集程序可以直接访问8个通用寄存器 R7 R0 程序计数器 PC 堆栈指针 SP 连接寄存器 LR CPSR在每一种异常模式下都有一组SP LR和SPSR 2020 3 26 25 2020 3 26 国防科技大学计算机学院601室 26 两种工作状态下寄存器比较 2020 3 26 27 3程序状态寄存器 程序状态寄存器的构成一个当前程序状态寄存器 CPSR 五个备份程序状态寄存器 SPSR 备份的程序状态寄存器用来进行异常处理程序状态寄存器的功能保存ALU中的当前操作信息控制允许和禁止中断设置处理器的工作模式 2020 3 26 28 3程序状态寄存器 续 2020 3 26 29 3程序状态寄存器 续 条件码标志 ConditionCodeFlags N Z C V均为条件码标志位它们的内容可被算术或逻辑运算的结果所改变 并且可以决定某条指令是否被执行在ARM状态下 绝大多数的指令都是有条件执行的在Thumb状态下 仅有分支指令B是有条件执行的 2020 3 26 30 3程序状态寄存器 续 实例C代码 if a b a elseb Thumb代码 CMPR0 R1BHIA ADDADDR1 R1 1BOVERA ADDADDR0 R0 1OVER ARM代码 CMPR0 R1ADDHIR0 R0 1ADDLSR1 R1 1 2020 3 26 31 3程序状态寄存器 续 标志位N当用两个补码表示的带符号数进行运算时N 1表示运算结果为负数N 0表示运算结果为正数或零标志位ZZ 1表示运算结果为零 Z 0表示运算结果为非零标志位V对于加 减法运算指令 当操作数和运算结果为补码表示的带符号数时 V 1表示符号位溢出对于其他的非加 减运算指令 V的值通常不改变 2020 3 26 32 3程序状态寄存器 续 标志位C加法运算 包括比较指令CMN 当运算结果产生了进位时 无符号数溢出 C 1 否则C 0减法运算 包括比较指令CMP 当运算时产生了借位 无符号数溢出 C 1 否则C 0对于包含移位操作的非加 减运算指令 C为移出值的最后一位对于其他的非加 减运算指令 C的值通常不改变 2020 3 26 33 3程序状态寄存器 续 中断禁止位I和FI 1禁止IRQ中断 I 0允许IRQ中断F 1禁止FIQ中断 F 0允许IRQ中断运行状态控制位T对于ARMv5及以上的T系列处理器 当该位为1时 程序运行于Thumb状态 否则运行于ARM状态对于ARMv5及以上的非T系列处理器 当该位为1时 执行下一条指令以引起未定义指令异常 当该位为0时 表示运行于ARM状态工作模式位M 4 0 这些位决定了处理器的工作模式 2020 3 26 34 3程序状态寄存器 续 2020 3 26 35 本讲小结 目的与要求掌握ARM处理器的工作模式 工作状态 ARM状态下的寄存器组织熟悉Thumb状态下的寄存器组织 程序状态寄存器重点与难点工作模式寄存器组织 2020 3 26 36 4 4ARM微处理器的数据类型 字 半字 字节字 Word 字的长度为32位半字 Half Word 半字的长度为16位字节 Byte 字节的长度为8位ARM微处理器要求自然对齐字需要4字节对齐地址的低两位为0半字需要2字节对齐地址的最低位为0字节则是任意地址对齐 2020 3 26 37 4 4ARM微处理器的数据类型 续 边界对齐 数据存储 如果一个数据是从偶地址开始的连续存储 那么它就是半字对齐 否则就是非半字对齐如果一个数据是以能被4整除的地址开始的连续存储 那么它就是字对齐 否则就是非字对齐 2020 3 26 38 4 4ARM微处理器的数据类型 续 ARM体系结构的存储结构从零地址开始的以字节为单位的线性组合从零字节到三字节放置第一个存储的字数据 从第四个字节到第七个字节放置第二个存储的字数据 依次排列作为32位的微处理器 ARM体系结构所支持的最大寻址空间为4GB 232字节 受到物理地址线的限制 一般实际嵌入式处理器最大寻址空间为几百兆 2020 3 26 39 4 4ARM微处理器的数据类型 续 ARM体系结构可以用两种方法存储字数据大端格式 Bigendian 字数据的高字节存储在低地址中字数据的低字节存放在高地址中小端格式 Littleendian 与大端存储格式相反低地址中存放的是字数据的低字节高地址中存放的是字数据的高字节 2020 3 26 40 大端格式 Bigendian 2020 3 26 41 小端格式 Littleendian 2020 3 26 42 举例1 程序LDRR0 0 x11223344LDRR1 0 x00000100STRR0 R1 LDRBR2 R1 R2 答案小端模式 R2 0 x44大端模式 R2 0 x11 LDR伪指令 使用以下项之一加载寄存器 一个32位常数值一个地址LDR伪指令的形式 LDRRn expr 而非 2020 3 26 43 4 5ARM微处理器的异常状态 当正常的程序执行流程发生暂时的停止时 称之为异常 Exception 例如处理一个外部的中断请求在处理异常之前 当前处理器的状态必须保留 这样当异常处理完成之后 当前程序可以继续执行处理器允许多个异常同时发生 它们将会按固定的优先级进行处理中断优先级中断嵌套 2020 3 26 44 2020 3 26 45 4 5ARM微处理器的异常状态 续 1对异常的响应2从异常返回3各类异常的具体描述4异常向量5异常优先级6应用程序中的异常处理 2020 3 26 46 1对异常的响应 当出现异常后 ARM处理器会执行以下操作1将CPSR复制到相应的SPSR中2对CPSR进行设置根据异常类型 强制设置CPSR的工作模式位设置中断禁止位 以禁止中断发生如果处理器处于Thumb状态 则切换到ARM状态3将下一条指令的地址存入相应链接寄存器LRLR中保存的是下一条指令的地址 当前执行指令地址 4或 8 与异常类型有关 4强制PC从相关的异常向量地址取下一条指令执行 从而跳转到相应的异常处理程序处 2020 3 26 47 1对异常的响应 续 ARM处理器对异常的响应过程用伪码描述为SPSR CPSRCPSR 4 0 ExceptionModeNumberCPSR 5 0 切换到ARM工作状态If ResetorFIQthenCPSR 6 1 禁止新的FIQ异常CPSR 7 1 禁止新的IRQ异常R14 ReturnLinkPC ExceptionVectorAddress CPU自动完成 2020 3 26 48 程序在系统模式下运行用户程序 假定当前处理器状态为Thumb状态 允许IRQ中断 用户程序运行时发生IRQ中断 硬件完成以下动作 置位I位 禁止IRQ中断 清零T位 进入ARM状态 设置MOD位 切换处理器模式至IRQ模式 将下一条指令的地址存入IRQ模式的LR寄存器 将CPSR寄存器内容存入IRQ模式的SPSR寄存器 将跳转地址存入PC 实现跳转 BackAddr JumpAddr 表示对该位不关心 2020 3 26 49 2从异常返回 异常处理完毕之后 ARM微处理器会执行以下几步操作从异常返回1 将SPSR复制回CPSR中2 将链接寄存器LR的值减去相应偏移量后送到PC中注意复位异常处理程序不需要返回 编程 指令 完成 2020 3 26 50 在异常处理结束后 异常处理程序完成以下动作 将SPSR寄存器的值复制回CPSR寄存器 将LR寄存的值减去一个常量后复制到PC寄存器 跳转到被中断的用户程序 BackAddr JumpAddr return BackAddr 4 表示对该位不关心 2020 3 26 51 3各类异常的具体描述 复位的响应过程SPSR svc CPSR 不可预知 CPSR 4 0 0b10011CPSR 5 0 切换到ARM工作状态CPSR 6 1 禁止新的FIQ异常CPSR 7 1 禁止新的IRQ异常R14 svc ReturnLink 不可预知 PC 0 x00000000 2020 3 26 52 3各类异常的具体描述 续 UndefinedInstruction 未定义指令 当ARM处理器遇到不能处理的指令时 会产生未定义指令异常采用这种机制 可以通过软件仿真扩展ARM或Thumb指令集在未定义指令处理程序中执行以下指令返回MOVSPC R14 und恢复PC 从R14 und 和CPSR 从SPSR und 的值 并返回到未定义指令后的下一条指令指令加后缀 S 且目的寄存器为PC则自动复制 2020 3 26 53 3各类异常的具体描述 续 未定义指令异常的响应过程SPSR und CPSRCPSR 4 0 0b11011CPSR 5 0 切换到ARM工作状态 CPSR 6 保持不变CPSR 7 1 禁止新的IRQ异常R14 und ReturnLinkPC 0 x00000004 2020 3 26 54 3各类异常的具体描述 续 SoftwareInterrupt 软件中断 软件中断指令 SWI 用于进入管理模式 常用于请求执行特定的管理功能在ARM上写的操作系统典型的使用SWI来为编程者提供各种例程在软件中断处理程序中执行以下指令返回MOVSPC R14 svc恢复PC 从R14 svc 和CPSR 从SPSR svc 的值 并返回到SWI的下一条指令指令加后缀 S 且目的寄存器为PC则自动复制 2020 3 26 55 3各类异常的具体描述 续 SWI的响应过程SPSR svc CPSRCPSR 4 0 0b10011CPSR 5 0 切换到ARM工作状态 CPSR 6 保持不变CPSR 7 1 禁止新的IRQ异常R14 svc ReturnLinkPC 0 x00000008 2020 3 26 56 3各类异常的具体描述 续 ABORT 中止 产生中止异常意味着对存储器的访问失败中止异常包括两种类型 指令预取中止 发生在指令预取时数据中止 发生在数据访问时当确定中止原因后 Abort处理程序执行以下指令返回SUBSPC R14 abt 4 指令预取中止SUBSPC R14 abt 8 数据中止恢复PC 从R14 abt 和CPSR 从SPSR abt 的值 并重新执行产生中止的指令 返回当前指令 2020 3 26 57 3各类异常的具体描述 续 中止异常的响应过程SPSR abt CPSRCPSR 4 0 0b10111CPSR 5 0 切换到ARM工作状态 CPSR 6 保持不变CPSR 7 1 禁止新的IRQ异常R14 abt ReturnLinkPC 0 x0000000c 0 x00000010 2020 3 26 58 3各类异常的具体描述 续 IRQ InterruptRequest IRQ异常属于正常的中断请求 IRQ优先级低于FIQ若CPSR的I位置1 则禁止IRQ中断 若CPSR的I位清零 处理器会在指令执行完之前检查IRQ的输入注意只有在特权模式下才能改变I位的状态IRQ处理程序执行以下指令返回SUBSPC R14 irq 4该指令将寄存器R14 irq的值减去4后 复制到程序计数器PC中 同时将SPSR irq寄存器的内容复制到CPSR中 并返回到引起中断的下一条指令 2020 3 26 59 3各类异常的具体描述 续 IRQ的响应过程SPSR irq CPSRCPSR 4 0 0b10010CPSR 5 0 切换到ARM工作状态 CPSR 6 保持不变CPSR 7 1 禁止新的IRQ异常R14 irq ReturnLinkPC 0 x00000018 2020 3 26 60 3各类异常的具体描述 FIQ FastInterruptRequest FIQ异常是为了支持数据传输或者通道处理而设计的若将CPSR的F位置1 则禁止FIQ中断 若将CPSR的F位清零 处理器会在指令执行时检查FIQ的输入注意只有在特权模式下才能改变F位的状态FIQ处理程序执行以下指令返回SUBSPC R14 fiq 4该指令将寄存器R14 fiq的值减去4后 复制到程序计数器PC中 同时将SPSR fiq寄存器的内容复制到CPSR中 并返回到引起中断的下一条指令 2020 3 26 61 3各类异常的具体描述 续 FIQ的响应过程SPSR fiq CPSRCPSR 4 0 0b10001CPSR 5 0 切换到ARM工作状态CPSR 6 1 禁止新的FIQ异常CPSR 7 1 禁止新的IRQ异常R14 fiq ReturnLinkPC 0 x0000001c 2020 3 26 62 3各类异常的具体描述 续 2020 3 26 63 4异常向量 ExceptionVectors 2020 3 26 64 4异常向量 续 ExceptionVectors MappedtoAddress0 Absoluteaddressingmodemustbeused VectorsLDRPC Reset AddressLDRPC Undef AddressLDRPC SWI AddressLDRPC PAbt AddressLDRPC DAbt AddressNOP ReservedVectorLDRPC IRQ AddressLDRPC FIQ Address 2020 3 26 65 5异常优先级 ExceptionPriorities 2020 3 26 66 6应用程序中的异常处理 应用程序首先要进行异常处理当系统运行时 异常可能会随时发生 因此要保证在发生异常时ARM处理器不至于处于未知状态采用的方式是在异常向量表中的特定位置放置一条跳转指令 跳转到异常处理程序异常处理过程当发生异常时 程序计数器PC会被强制 自动 设置为对应的异常向量 从而 自动 跳转到异常处理程序 当异常处理完成以后 返回到主程序继续执行 2020 3 26 67 程序段说明 以下函数为各异常模式服务子程序 设成死循环是为调试用 一旦发生此类异常 程序便跳入异常模式服务子程序 终止程序运行 voidHaltUndef void 未定义 程序跑飞 Uart Printf 0 theprogrammishaltUndefed while 1 voidHaltSwi void 软中断 Uart Printf 0 theprogrammishaltSWI while 1 2020 3 26 68 voidHaltPabort void 预取指令中止 Uart Printf 0 theprogrammishaltPaborted while 1 voidHaltDabort void 数据中止 程序跑飞 Uart Printf 0 theprogrammishaltdaborted while 1 voidHaltFIQ void 快速中断 Uart Printf 0 theprogrammishaltdFIQ while 1 2020 3 26 69 异常向量表 ExceptionVectors MappedtoAddress0 Absoluteaddressingmodemustbeused VectorsLDRPC HandleResetLDRPC HaltUndefLDRPC HaltSwiLDRPC HaltPabortLDRPC HaltDabortNOP ReservedVectorLDRPC HandleIRQLDRPC HaltFIQ 2020 3 26 70 本讲小结 目的与要求掌握数据类型 异常向量表和异常程序设计熟悉边界对齐 大小端格式了解ARM处理器的异常处理机制重点与难点数据类型 异常向量表和异常程序设计边界对齐 异常程序设计 2020 3 26 71 ARM微处理器的指令系统 一 ARM微处理器的寻址方式二 ARM微处理器的指令集概述三 ARM指令集四 Thumb指令集 2020 3 26 72 一 ARM微处理器的寻址方式 寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式ARM指令系统的寻址方式1立即寻址2寄存器寻址3寄存器间接寻址4基址寻址5相对寻址6多寄存器寻址7堆栈寻址 2020 3 26 73 1立即寻址 立即寻址也叫立即数寻址这是一种特殊的寻址方式 操作数本身就在指令中给出 只要取出指令也就取到了操作数 这个操作数被称为立即数 对应的寻址方式也就叫做立即寻址例如ADDR0 R0 1 R0 R0 1ADDR0 R0 0 x3f R0 R0 0 x3f在以上两条指令中 第二个源操作数即为立即数 要求以 为前缀 对于以十六进制表示的立即数 还要求在 后加上 0 x 或 立即数一般为8位 超过8位使用伪指令LDR 2020 3 26 74 2寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数这种寻址方式是各类微处理器经常采用的一种方式 也是一种执行效率较高的寻址方式例如ADDR0 R1 R2 R0 R1 R2该指令的执行效果是将寄存器R1和R2的内容相加 其结果存放在寄存器R0中 2020 3 26 75 3寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址 而操作数本身存放在存储器中例如ADDR0 R1 R2 R0 R1 R2 LDRR0 R1 R0 R1 STRR0 R1 R1 R0在第一条指令中 以寄存器R2的值作为操作数的地址 在存储器中取得一个操作数后与R1相加 结果存入寄存器R0中 LDR STR 左寄存器 右存储器 2020 3 26 76 4基址寻址 基址寻址就是将寄存器 该寄存器一般称作基址寄存器 的内容与指令中给出的地址偏移量相加 从而得到一个操作数的有效地址基址寻址方式常用于访问某基地址附近的单元采用基址寻址方式的指令常见有以下几种形式LDRR0 R1 4 R0 R1 4 LDRR0 R1 4 R0 R1 4 R1 R1 4LDRR0 R1 4 R0 R1 R1 R1 4LDRR0 R1 R2 R0 R1 R2 2020 3 26 77 5相对寻址 相对寻址以程序计数器PC的当前值为基地址 指令中的地址标号作为偏移量 将两者相加之后得到操作数的有效地址以下程序段完成子程序的调用和返回 跳转指令BL采用了相对寻址方式BLSORT 跳转到子程序处执行 SORT MOVPC LR 从子程序返回 2020 3 26 78 6多寄存器寻址 采用多寄存器寻址方式 一条指令可以完成多个寄存器值的传送 最多传送16个通用寄存器的值例如LDMIAR0 R1 R2 R3 R4 R1 R0 R0 R0 4 R2 R0 R0 R0 4 R3 R0 R0 R0 4 R4 R0 R0 R0 4指令后缀IA表示在每次执行操作后R0按字长度增加注意 在寄存器列表中同一寄存器仅能指定一次 加载 存储操作按照寄存器固定次序进行 所以寄存器排列先后关系随意 LDM STM 左存储器 右寄存器 STMIASP R0 R1 LDMIASP R1 R0 2020 3 26 79 7堆栈寻址 堆栈按先进后出 FILO 的方式工作根据堆栈指针指向来分堆栈指针指向最后一个压入堆栈的数据时 称为满堆栈堆栈指针指向下一个将要放入数据的空位置时 称为空堆栈根据堆栈的生成方式堆栈指针递增计数 递增堆栈堆栈指针递减计数 递减堆栈 2020 3 26 80 7堆栈寻址 续 ARM微处理器支持这四种类型的堆栈工作方式满递增堆栈 堆栈指针指向最后压入的数据 且由低地址向高地址生成 LDMFA STMFA 满递减堆栈 堆栈指针指向最后压入的数据 且由高地址向低地址生成 LDMFD STMFD 空递增堆栈 堆栈指针指向下一个将要放入数据的空位置 且由低地址向高地址生成 LDMEA STMEA 空递减堆栈 堆栈指针指向下一个将要放入数据的空位置 且由高地址向低地址生成 LDMED STMED STMFDSP R0 R7 LR LR最先进栈 R0最后LDMFDSP R0 R7 PC R0最先出栈 PC最后 STMFDSP R0 R7 LR LDMFDSP PC R0 R7 2020 3 26 81 二 ARM微处理器的指令集概述 ARM微处理器的指令集是Load Store型注意 可以使用间接寻址等方式访问存储器 注意和纯RISC处理器的区别1指令格式2指令助记符3指令条件域 2020 3 26 82 1指令格式 S operand2 opcode 指令助记符 如ADD LDR STRcond 执行条件 如NE EQS 是否影响CPSR的值Rd 目标寄存器Rn 第一操作数寄存器operand2 第二操作数灵活使用第二操作数能够提高代码质量例子 ADDEQSR0 R1 0 x3f 2020 3 26 83 2指令助记符 2020 3 26 84 2020 3 26 85 2020 3 26 86 3指令条件域 条件执行当处理器工作在ARM状态时 几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件的执行当指令的执行条件满足时 指令被执行 否则忽略条件码每一条ARM指令包含4位的条件码 位于指令码的最高4位 31 28 条件码共有15种 每种条件码可用两个字符表示 这两个字符可添加在指令助记符的后面 2020 3 26 87 2020 3 26 88 3指令条件域 续 实例C代码 if a b a elseb ARM代码 CMPR0 R1ADDHIR0 R0 1ADDLSR1 R1 1C代码 if a 10 ARM代码 CMPR0 10CMPNER1 20ADDNER0 R0 R1 if a 10 CMPR0 10CMPEQR1 20ADDNER0 R0 R1 2020 3 26 89 三 ARM指令集 1跳转指令2数据处理指令3乘法指令与乘加指令4程序状态寄存器访问指令5加载 存储指令6数据交换指令7移位指令8协处理器指令9异常产生指令 2020 3 26 90 1跳转指令 在ARM程序中有两种方法可以实现程序的跳转直接向程序计数器PC写入跳转地址值可以实现在4GB的地址空间中的任意跳转MOVPC R14使用专门的跳转指令跳转指令包括以下4条指令B跳转指令BL带返回的跳转指令BX带状态切换的跳转指令BLX带返回和状态切换的跳转指令 2020 3 26 91 2数据处理指令 数据处理指令可分为数据传送指令 算术逻辑运算指令和比较指令数据传送指令进行数据的传输MOVMVN比较指令不保存运算结果 只更新CPSR中相应的条件标志位算术逻辑运算指令完成常用的算术与逻辑的运算该类指令不但将运算结果保存在目的寄存器中 同时更新CPSR中的相应条件标志位 2020 3 26 92 2数据处理指令 续 数据处理指令MOV数据传送指令MVN数据取负传送指令CMP比较指令CMN取负比较指令TST位测试指令TEQ相等测试指令ADD加法指令ADC带进位加法指令SUB减法指令SBC带借位减法指令RSB反向减法指令RSC带借位反向减法指令AND逻辑与指令ORR逻辑或指令EOR逻辑异或指令BIC位清除指令 2020 3 26 93 3乘法指令与乘加指令 ARM微处理器支持的乘法指令与乘加指令有6条可分为运算结果为32位和运算结果为64位两类与前面的数据处理指令不同 指令中的所有操作数 目的寄存器必须为通用寄存器 不能对操作数使用立即数或被移位的寄存器目的寄存器和第一操作数必须是不同的寄存器 2020 3 26 94 3乘法指令与乘加指令 续 乘法指令与乘加指令 6条 MUL32位乘法指令MULR0 R1 R2 R0 R1 R2MLA32位乘加指令MLAR0 R1 R2 R3 R0 R1 R2 R3SMULL64位有符号数乘法指令SMULLR0 R1 R2 R3 R0保存结果低32位 R1保存结果高32位SMLAL64位有符号数乘加指令UMULL64位无符号数乘法指令UMLAL64位无符号数乘加指令 2020 3 26 95 4程序状态寄存器访问指令 ARM微处理器支持程序状态寄存器访问指令用于在程序状态寄存器和通用寄存器之间传送数据程序状态寄存器访问指令包括以下两条MRS程序状态寄存器到通用寄存器的数据传送指令MRSR0 CPSRMRSR0 SPSRMSR通用寄存器到程序状态寄存器的数据传送指令MSRCPSR R0MSRSPSR R0 2020 3 26 96 5加载 存储指令 ARM微处理器支持加载 存储指令用于在寄存器和存储器之间传送数据常用的加载存储指令如下LDR字数据加载指令LDRB字节数据加载指令LDRH半字数据加载指令STR字数据存储指令STRB字节数据存储指令STRH半字数据存储指令LDM批量数据加载指令STM批量数据存储指令 LDR STR 左寄存器 右存储器LDM STM 左存储器 右寄存器记忆规律 R表示寄存器M表示存储器 2020 3 26 97 6数据交换指令 ARM微处理器所支持数据交换指令能在存储器和寄存器之间交换数据 数据交换指令有两条SWP字数据交换指令SWPR0 R1 R2 R2 R0 R1 R2 SWPR0 R0 R1 R0 R1 SWPB字节数据交换指令 低8位 SWPBR0 R1 R2 R2 R0 R1 R2 SWPBR0 R0 R1 R0 R1 2020 3 26 98 7移位指令 ARM微处理器内嵌桶型移位器移位操作在ARM指令集中不作为单独的指令使用 只能作为指令格式中是一个字段移位操作包括如下6种类型LSL逻辑左移MOVSR3 R1 LSL 2 R3 R1 2ASL算术左移LSR逻辑右移ASR算术右移ROR循环右移RRX带扩展的循环右移 2020 3 26 99 8协

温馨提示

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

评论

0/150

提交评论