




已阅读5页,还剩119页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
三 ARM指令系统 寻址方式ARM指令集 重点 ARM伪指令Thumb指令集 ARM指令集的功能子集 寻址方式 立即寻址MOVR0 20 20 R0寄存器寻址MOVR0 R1 R1 R0寄存器移位寻址寄存器间接寻址LDRR0 R3 R3 R0基址加偏址寻址LDRR0 R1 4 R1 4 R0 R1 4 R1前变址偏移寻址LDRR0 R1 4 R1 R0 R1 4 R1后变址偏移寻址堆栈寻址LDM STMFD ED FA EA多寄存器寻址LDM STMIA IB DA DB相对寻址Brel pc rel pc LDMIAR1 R0 R2 R5 R0 R1 R2 R1 4 R5 R1 8 LDMIBR1 R0 R2 R5 R0 R1 4 R2 R1 8 R5 R1 12 LDMDAR1 R0 R2 R5 R5 R1 R2 R1 4 R0 R1 8 LDMDBR1 R0 R2 R5 R5 R1 4 R2 R1 8 R0 R1 12 ARM存储器访问指令 多寄存器存取 数据块传送指令操作过程如右图所示 其中R1为指令执行前的基址寄存器 R1 则为指令执行后的基址寄存器 EA FA ED FD 0 x12345678 堆栈寻址LDM STMFD ED FA EA 0 x12345678 0 x12345678 LDM 出栈 STM 压栈FD ED FA EA 栈底 栈顶 栈区 SP 栈顶 栈底 栈区 SP 0 x12345678 0 x12345678 STMFA 满递增 入栈 STMIB STMFD 满递减 入栈 STMDB 0 x12345678 0 x12345678 Rn Rn 栈顶 SP 栈顶 SP 栈底 栈顶 栈区 SP 栈顶 栈底 栈区 SP 0 x12345678 0 x12345678 STMEA 空递增 入栈 STMIA STMED 空递减 入栈 STMDA 0 x12345678 0 x12345678 Rn Rn 栈顶 SP 栈顶 SP 栈底 栈顶 栈区 SP 栈顶 栈底 栈区 SP 0 x12345678 0 x12345678 LDMFA 满递增 出栈 LDMDA LDMFD 满递减 出栈 LDMIA 0 x12345678 0 x12345678 Rn Rn 栈顶 SP 栈顶 SP 栈底 栈顶 栈区 SP 栈顶 栈底 栈区 SP 0 x12345678 0 x12345678 LDMED 空递减 出栈 LDMIB LDMEA 空递增 出栈 LDMDB 0 x12345678 0 x12345678 Rn Rn 栈顶 SP 栈顶 SP 使用数据块传送指令进行堆栈操作STMDAR0 R5 R6 压栈 LDMIBR0 R5 R6 出栈 使用堆栈指令进行堆栈操作STMEDR0 R5 R6 LDMEDR0 R5 R6 两段代码的执行结果是一样的 但是使用堆栈指令的压栈和出栈操作编程很简单 只要前后一致即可 而使用数据块指令进行压栈和出栈操作则需要考虑空与满 加与减对应的问题 向下生长空堆栈 应用示例 S3C44B0部分启动代码 VectorsbResetHandler fordebugbHandlerUndef handlerUndefbHandlerSWI SWIinterrupthandler bHandlerPabort handlerPAbort bHandlerDabort handlerDAbort b handlerReserved ldrpc HandlerIRQbHandlerFIQHandlerFIQ HANDLERHandleFIQsubsp sp 4 reservedforPCstmfdsp r8 r9 STMDBldrr8 HandleFIQ ISR STARTADDRESSldrr9 r8 strr9 sp 8 ldmfdsp r8 r9 pc LDMIA 简单的ARM程序 文件名 TEST1 S 功能 实现两个寄存器相加 说明 使用ARMulate软件仿真调试AREAExample1 CODE READONLY 声明代码段Example1ENTRY 标识程序入口CODE32 声明32位ARM指令STARTMOVR0 0 设置参数MOVR1 10LOOPBLADD SUB 调用子程序ADD SUBBLOOP 跳转到LOOPADD SUBADDSR0 R0 R1 R0 R0 R1MOVPC LR 子程序返回END 文件结束 使用 进行注释 标号顶格写 实际代码段 声明文件结束 3 3ARM指令系统介绍 一 存储器访问 Load Store 指令 二 ARM数据处理指令 三 程序状态寄存器访问指令 四 ARM分支转移类指令 五 ARM协处理器类指令 六 软件中断 存储器寻址 芯片复位后用户看见的地址空间 128KBFlash LPC2114 2212 256KBFlash LPC2124 2214 16KBSRAM 8KBBootBlock 2MBVPB外设 2MBAHB外设 0 x00000000 0 xFFFFFFFF 保留给片内存储器使用 保留给片内存储器使用 保留给外部储器使用 0 x40000000 0 xE0000000 0 x80000000 0 xF0000000 0 x00020000 地址空间 ARM7处理器是典型的RISC处理器 对存储器的访问只能使用加载和存储指令实现 ARM7处理器是冯 诺依曼存储结构 程序空间 RAM空间及I O映射空间统一编址 除对RAM操作以外 对外围IO 程序数据的访问均要通过加载 存储指令进行 一 存储器访问指令 Load Store 1 单字和无符号字节Load Store指令2 半字和有符号字节Load Store指令3 双字Load Store指令4 多寄存器Load Store指令5 内存与寄存器交换指令 一 存储器访问 Load Store 指令1 单字和无符号字节Load Store指令功能 提供ARM寄存器和内存之间单字节 8位 或单字 32位 数据的传送 LDR STR的功能 3 3ARM指令系统介绍 LDR和STR 字和无符号字节加载 存储指令编码 指令执行的条件码 I为0时 偏移量为12位立即数 为1时 偏移量为寄存器移位 P表示前 后变址 U表示加 减 B为1表示字节访问 为0表示字访问 W表示回写 为指令的寻址方式 Rd为源 目标寄存器 Rn为基址寄存器 L用于区别加载 L为1 或存储 L为0 字节码结构 一 存储器访问 Load Store 指令 STRBR0 R3 R8 ASR 2 R0 R3 R8 4 指令格式 1 零偏移LDR STR 条件码 B T Rd Rn Rn Rd功能 将Rn的内容作为传送数据的地址 B 可选后缀 若有B 则传送Rd的最低有效字节 若操作码是LDR 则将Rd的其它字节清零 加载无符字节数据 零扩展到32位 1 单字和无符号字节Load Store指令 一 存储器访问 Load Store 指令 1 零偏移Rd ARM寄存器Rn 存储器的基址寄存器 若指令是带写回的前变址 加后缀 或后变址 一 存储器访问 Load Store 指令 1 单字和无符号字节Load Store指令 2 前变址LDR STR B Rd Rn Rn offset Rd 有 则 Rn offset Rn 无 Rn不变 1 单字和无符号字节Load Store指令 一 存储器访问 Load Store 指令 2 前变址在数据传送之前 将偏移量加到Rn中 其结果作为传送数据的存储器地址 若使用后缀 则结果写回到Rn中 Rn不允许是R15 其中offset Rn上的偏移量 可选后缀 若有 则将结果地址写回到Rn 若Rn是R15 则不能够用后缀 LDRRd Rn offset Rn offset Rd Rn offset Rd 1 单字和无符号字节Load Store指令 一 存储器访问 Load Store 指令 3 程序相对偏移LDR STR 条件码 Rd Label Label RdLabel 程序相对偏移表达式 必须在当前指令的 4kB范围内 LDRRd Label等价为 LDRRd R15 Label pc R15 Label pc Rd 1 单字和无符号字节Load Store指令 一 存储器访问 Load Store 指令 汇编器由pc计算偏移量 并将pc作为Rn生成前变址指令 不能使用后缀 4 后变址LDR STR B T Rd Rn 将Rn的值用作传送数据的存储器地址 数据传送后 偏移量加到Rn中 结果写回到Rn Rn不允许是R15 LDRRd Rn offset Rn Rd Rn offset Rn 1 单字和无符号字节Load Store指令 一 存储器访问 Load Store 指令 例1 将R0中的内容存放到外设中LDRR1 UARTADD 将UART地址放进R1中STRBR0 R1 将数据放进外设中 UARTADD 10000 UART的地址值 一 存储器访问 Load Store 指令 1 单字和无符号字节Load Store指令 例2 LDRR8 R10 R10 R8LDRNER2 R5 960 Z1时 R5 960 R2 R5 960 R5STRR2 R9 consta struc consta struc是常量表达式 该常量值的范围为1 4095 1 单字和无符号字节Load Store指令 一 存储器访问 Load Store 指令 STRBR0 R3 R8 ASR 2 R0 R3 R8 4 存储R0的最低有效字节 R3和R8不变 STRR5 R7 8 R5 R7 R7 8 R7LDRR0 localdata 读取一个字 该字位于标号localdata所在地址 1 单字和无符号字节Load Store指令 一 存储器访问 Load Store 指令 功能 提供ARM寄存器和内存之间半字 16位 和有符号字节 8位 数据的传送 2 半字和有符号字节Load Store 一 存储器访问 Load Store 指令 字节码结构 LDR和STR 半字和有符号字节加载 存储指令编码 指令执行的条件码 I为0时 偏移量为8位立即数 为1时 偏移量为寄存器移位 P表示前 后变址 U表示加 减 W表示回写 为指令的寻址方式 Rd为源 目标寄存器 Rn为基址寄存器 L用于区别加载 L为1 或存储 L为0 S为1表示有符号访问 为0表示无符号访问 H为1表示半字访问 为0表示字节访问 2 半字和有符号字节Load Store 一 存储器访问 Load Store 指令 格式 1 零偏移LDR STR 条件码 H SH SBRd Rn 2 前变址LDR STR 条件码 H SH SBRd Rn offset 3 程序相对偏移LDR STR 条件码 H SH SBRd Label 2 半字和有符号字节Load Store 一 存储器访问 Load Store 指令 格式 4 后变址LDR STR H SH SBRd Rn SH对有符号半字H对无符号半字SB对有符号字节Label程序相对偏移表达式 必须在当前指令的 255字节范围内offset加在Rn上的偏移量Rn和 同前面第一条 LDR和STR字和无符号半字 2 半字和有符号字节Load Store 一 存储器访问 Load Store 指令 例1 LDREQSHR11 R6 有条件地 R11 R6 读取16位半字 有符号扩 展到32位LDRHR1 R0 22 R1 R0 22 读取16 位半字 零扩展到32位STRHR4 R0 R1 存储最低的有效半字到 R0 R1 地址开始的两个字节LDRSBR6 constf 读取位于标号constf地址中 的字节 有符号扩展 2 半字和有符号字节Load Store 一 存储器访问 Load Store 指令 功能 提供ARM寄存器和内存之间双字 64位 数据的传送 3 双字Load Store指令 一 存储器访问 Load Store 指令 字节码结构 3 双字Load Store指令 一 存储器访问 Load Store 指令 格式 1 零偏移LDR STR DRd Rn 2 前变址LDR STR DRd Rn 3 程序相对偏移LDR STR DRd LABEL 4 后变址LDR STR DRd Rn 3 双字Load Store指令 一 存储器访问 Load Store 指令 Label程序相对偏移表达式 它必须在当前指令的 255字节范围内 将包含偏移量的最后的地址写回到Rn 注 对于双字传送地址必须是8的倍数 若有协处理器 可允许对此检查 例 LDRDR6 R11 R11 R6 R11 4 R7STRDR4 R9 24 R4 R9 24 R5 R9 28 3 双字Load Store指令 一 存储器访问 Load Store 指令 3 双字Load Store指令 一 存储器访问 Load Store 指令 其中 Rd读取或存储寄存器中的一个 另一个是R d 1 Rd必须是偶数寄存器 且不是R14 Rn不允许与Rd和R d 1 相同 除非指令为零偏移 或不带写回的前索引 Offset加在Rn上的偏移量 LDM和STM 多寄存器加载 存储指令编码功能 读取和存储多个寄存器 可以传送R0 R15的任何组合 字节码结构 指令执行的条件码 S对应于指令中的 符号 P表示前 后变址 U表示加 减 W表示回写 寄存器列表 Rn为基址寄存器 L用于区别加载 L为1 或存储 L为0 4 多寄存器Load store指令 一 存储器访问 Load Store 指令 格式 1 标准格式LDM STM Rn 2 非用户模式下格式1LDM Rn 当寄存器组中有PC时 表示 除了正常的数据传送之外 还可以同时把当前的SPSR写入CPSR中 传入或传出的是用户模式下的寄存器 而不是当前模式下的寄存器 4 多寄存器Load store指令 一 存储器访问 Load Store 指令 3 非用户模式下格式2LDM STM Rn 当寄存器组中没有PC时 表示 传入或传出的是用户模式下的寄存器 而不是当前模式下的寄存器 可以实现访问用户模式的寄存器 Rn 基址寄存器 装有传送数据的初始地址 Rn不允许是R15 reglist 读取或存储的寄存器列表 包含在括号中 若包含多于1个寄存器列表或包含寄存器范围 则必须用逗号隔开 4 多寄存器Load store指令 可选后缀 它有两个目的 操作码是LDM且reglist中包含PC R15 那么除了正常的多寄存器传送外 将SPSR也拷贝到CPSR中 用于从异常处理返回 数据传入或传出的是用户模式的寄存器 而不是当前模式的寄存器 4 多寄存器Load store指令 一 存储器访问 Load Store 指令 注 对于LDM指令 如包含PC 位 0 1时 转至Thumb状态 寄存器组中至少有一个寄存器 一般不应有Rn FD ED FA EA用于堆栈操作 IA IB DA DB用于一般的数据传送 例1 若保存3个工作寄存器状态和返回地址 STMFDR13 R0 R2 R14 若恢复3个工作寄存器状态和返回地址 LDMFDR13 R0 R2 PC 4 多寄存器Load store指令 一 存储器访问 Load Store 指令 例2 LDMIAR8 R0 R2 R9 R8 R0 R8 4 R2 R8 8 R9STMDBR1 R3 R6 R11 R12 R12 R1 4 R11 R1 8 R6 R1 12 R5 R1 16 R4 R1 20 R3 R1 24 R1 24 R1STMFDR13 R0 R4 R7 LR 寄存器进栈LDMFDR13 R0 R4 R7 PC 同样的寄存器出栈 从子程序返回 4 多寄存器Load store指令 一 存储器访问 Load Store 指令 例3 子程序调用 SUB1STMFDSP R0 R2 R14 保护R0 R2和返回地址 R14为返回主程序的地址 其它指令0 x8000BLLabel 允许子程序嵌套 R14 0 x8004 其它指令LDMFDSP R0 R2 R15 恢复R0 R2 返回子程序调用程序后执行 4 多寄存器Load store指令 一 存储器访问 Load Store 指令 SWP和SWPB 寄存器和存储器交换指令编码 指令执行的条件码 B用于区别无符号字节 B为1 或字 B为0 Rm源寄存器 Rd目标寄存器 Rn为基址寄存器 功能 用一条指令实现在寄存器和存储器之间交换数据 5 内存和寄存器交换指令 SWP指令应用示例 SWPR1 R1 R0 将R1的内容与R0指向的存储单元的内容进行交换SWPBR1 R2 R0 将R0指向的存储单元内的容读取一字节数据到R1中 高24位清零 并将R2的内容写入到该内存单元中 最低字节有效 格式 SWP B Rd Rm Rn Rn Rd Rm Rn nm d 如d m 为交换 Rm Rn Rm Rn 其中B若有B 则交换字节 否则交换32位字 Rm寄存器Rm的数据存储到存储器 Rm可以与Rd相同 此时 寄存器的内容与存储器的内容进行交换 Rd数据从存储器读取到寄存器Rd Rn寄存器Rn的内容为进行数据交换的存储器的地址 Rn必须与Rd和Rm不同 6 内存和寄存器交换指令 一 存储器访问 Load Store 指令 二 ARM数据处理指令 数据处理指令的特点 1 所有的操作数要么来自寄存器 要么来自立即数 不会来自内存 2 如果有结果 则结果一定是32位宽 一个例外 长乘法指令产生64位结果 并放在一个寄存器中 不会写入内存 3 每一个操作数寄存器和结果寄存器都在指令中独立指出 即 ARM指令采用3地址模式 Rd Rn Rm 4 所有ARM数据处理指令均可选择使用S后缀 并影响状态标志 功能 完成数据在寄存器中的运算 这些运算包括32位数据的算术运算 逻辑运算 位操作以及饱和运算处理 其中某一个操作数可以经过移位或循环运算得到 1 数据运算指令 二 ARM数据处理指令 ARM数据处理指令 指令编码 指令执行的条件码 I用于区别立即数 I为1 和寄存器移位 I为0 opcode数据处理指令操作码 第二操作数 Rd目标寄存器 Rn第一操作数寄存器 S设置条件码 与指令中的S位对应 1 数据运算指令 二 ARM数据处理指令 字节码结构 格式 S Rd Rn OPerand2操作码包括ADD SUB RSB ADC SBC RSC AND ORR EOR BIC MOV MVN CMP CMN TST和TEQ指令 其中 S若选定S 则根据操作结果更新条件码标志 N Z C和V RdARM结果寄存器Rn存储第1操作数的ARM寄存器Operand2第2操作数 1 数据运算指令 二 ARM数据处理指令 注 1 条件码标志若指定S 那么ADD SUB RSB ADC SBC RSC指令会根据结果更新标志N Z C和V 减法 含比较 够减时 C 1 AND ORR EOR BIC MOV和MVN指令将 根据结果更新标志N和Z 在计算Operand2时更新标志C 不影响V标志 1 数据运算指令 二 ARM数据处理指令 CMP CMN TST和TEQ指令不需要S 注 2 R15的使用ADD SUB RSB ADC SBC RSC AND ORR EOR BIC MOV和MVN指令以及CMP CMN TST和TEQ指令若将R15作为Rn 操作数 使用 那么使用的值是当前指令的地址加8 1 数据运算指令 二 ARM数据处理指令 若选用S 则将当前模式的SPSR拷贝到CPSR 这样可从异常返回 SUBSPC R14 4MOVSPC R14在有寄存器控制移位的任何数据处理指令中 不能将R15作为Rd或任何操作数来使用 1 数据运算指令 二 ARM数据处理指令 若将R15作为Rd用 则 执行转移到结果对应的地址 2 第2操作数大多数ARM数据处理指令都有一个灵活的第2操作数 在指令格式中由 Operand2 表示 它有两种格式 二 ARM数据处理指令 1 immed 8r常量表达式 常量必须对应于8位位图 该位图在32位字中 被循环移位偶数位 0 2 4 6 8 26 28 30 2 第2操作数 二 ARM数据处理指令 循环右移10位 8位常数 合法常量 0XFF 0XFF000 0XF000000F 非法常量 0X101 0XFF04 0XFF003 0XFFFFFFFF 2 Rm shift Rm存储第2操作数的ARM寄存器 可用各种方法对寄存器中的位图进行移位或循环移位 移位结果作为第2操作数 但Rm本身不变 shiftRm的移位方法 是下面之一 ASRn算术右移n移位 1 n 32 LSLn逻辑左移n移位 0 n 31 LSRn逻辑右移n移位 1 n 32 RORn循环右移n位 0 n 31 RRX带进位的循环右移1位 2 第2操作数 二 ARM数据处理指令 2 Rm shift 2 第2操作数 二 ARM数据处理指令 ARM数据处理指令 算术运算 ARM数据处理指令 算术运算 加法运算指令 ADD指令将operand2的值与Rn的值相加 结果保存到Rd寄存器 指令格式如下 ADD cond S Rd Rn operand2应用示例 ADDSR1 R1 1 R1 R1 1 并影响标志位ADDR1 R1 R2 R1 R1 R2 ARM数据处理指令 算术运算 减法运算指令 SUB指令用寄存器Rn减去operand2 结果保存到Rd中 指令格式如下 SUB cond S Rd Rn operand2应用示例 SUBSR0 R0 1 R0 R0 1 并影响标志位SUBSR2 R1 R2 R2 R1 R2 并影响标志位 ARM数据处理指令 算术运算 逆向减法运算指令 RSB指令将operand2的值减去Rn 结果保存到Rd中 指令格式如下 RSB cond S Rd Rn operand2应用示例 RSBR3 R1 0 xFF00 R3 0 xFF00 R1RSBSR1 R2 R2 LSL 2 R1 R2 2 R2 R2 3 ARM数据处理指令 算术运算 带进位加法指令 ADC将operand2的值与Rn的值相加 再加上CPSR中的C条件标志位 结果保存到Rd寄存器 指令格式如下 ADC cond S Rd Rn operand2应用示例 使用ADC实现64位加法 结果存于R1 R0中 ADDSR0 R0 R2 R0等于低32位相加 并影响标志位ADCR1 R1 R3 R1等于高32位相加 并加上低位进位 ARM数据处理指令 算术运算 带进位减法指令 SBC用寄存器Rn减去operand2 再减去CPSR中的C条件标志位的非 即若C标志清零 则结果减去1 结果保存到Rd中 指令格式如下 减法 含比较 够减时 C 1 SBC cond S Rd Rn operand2应用示例 使用SBC实现64位减法 结果存于R1 R0中 SUBSR0 R0 R2 低32位相减 并影响标志位SBCR1 R1 R3 高32位相减 并减去低位借位 ARM数据处理指令 算术运算 带进位逆向减法指令 RSC指令用寄存器operand2减去Rn 再减去CPSR中的C条件标志位的非 结果保存到Rd中 指令格式如下 RSC cond S Rd Rn operand2应用示例 使用RSC指令实现求64位数值的负数 RSBSR2 R0 0RSCR3 R1 0 ARM数据处理指令 逻辑运算指令 ARM数据处理指令 逻辑运算指令 逻辑与操作指令 AND指令将operand2的值与寄存器Rn的值按位作逻辑 与 操作 结果保存到Rd中 指令格式如下 用于屏蔽操作数1的某些位 AND cond S Rd Rn operand2应用示例 ANDSR0 R0 0 x01 R0 R0保留R0中的0位和1位 丢弃其余的位 ARM数据处理指令 逻辑运算指令 ARM数据处理指令 逻辑运算指令 逻辑异或操作指令 EOR指令将operand2的值与寄存器Rn的值按位作逻辑 异或 操作 结果保存到Rd中 指令格式如下 用于反转操作数1的某些位 EOR cond S Rd Rn operand2应用示例 EORR1 R1 0 x0F 将R1的低4位取反EORR2 R1 R0 R2 R1 R0EORSR0 R5 0 x01 将R5和0 x01进行逻辑异或 结果保存到R0 并影响标志位 ARM数据处理指令 逻辑运算指令 位清除指令 BIC指令将寄存器Rn的值与operand2的值的反码按位作逻辑 与 操作 结果保存到Rd中 指令格式如下 用于清除操作数1的某些位 BIC cond S Rd Rn operand2应用示例 BICR1 R1 0 x0F 将R1的低4位清零 其它位不变BICR1 R2 R3 将R3的反码和R2相逻辑 与 结果保存到R1中 ARM数据处理指令 比较指令 ARM数据处理指令 比较指令 比较指令 CMP指令将寄存器Rn的值减去operand2的值 根据操作的结果更新CPSR中的相应条件标志位 以便后面的指令根据相应的条件标志来判断是否执行 指令格式如下 CMP cond Rn operand2应用示例 CMPR1 10 R1与10比较 设置相关标志位CMPR1 R2 R1与R2比较 设置相关标志位 ARM数据处理指令 比较指令 比较指令 CMP指令将寄存器Rn的值减去operand2的值 根据操作的结果更新CPSR中的相应条件标志位 以便后面的指令根据相应的条件标志来判断是否执行 指令格式如下 CMP cond Rn operand2 注意 CMP指令与SUBS指令的区别在于CMP指令不保存运算结果 在进行两个数据的大小判断时 常用CMP指令及相应的条件码来操作 ARM数据处理指令 比较指令 负数比较指令 CMN指令使用寄存器Rn的值加上operand2的值 根据操作的结果更新CPSR中的相应条件标志位 以便后面的指令根据相应的条件标志来判断是否执行 指令格式如下 CMN cond Rn operand2应用示例 CMNR0 1 R0 1 判断R0是否为1的补码 如果是 则设置Z标志位 ARM数据处理指令 比较指令 负数比较指令 CMN指令使用寄存器Rn的值加上operand2的值 根据操作的结果更新CPSR中的相应条件标志位 以便后面的指令根据相应的条件标志来判断是否执行 指令格式如下 CMP cond Rn operand2 注意 CMN指令与ADDS指令的区别在于CMN指令不保存运算结果 CMN指令可用于负数比较 比如CMNR0 1指令则表示R0与 1比较 若R0为 1 即1的补码 则Z置位 否则Z复位 ARM数据处理指令 比较指令 位测试指令 TST指令将寄存器Rn的值与operand2的值按位作逻辑 与 操作 根据操作的结果更新CPSR中的相应条件标志位 以便后面的指令根据相应的条件标志来判断是否执行 指令格式如下 TST cond Rn operand2应用示例 TSTR0 0 x01 判断R0的最低位是否为0TSTR1 0 x0F 判断R1的低4位是否为0 ARM数据处理指令 比较指令 位测试指令 TST指令将寄存器Rn的值与operand2的值按位作逻辑 与 操作 根据操作的结果更新CPSR中的相应条件标志位 以便后面的指令根据相应的条件标志来判断是否执行 指令格式如下 TST cond Rn operand2 注意 TST指令与ANDS指令的区别在于TST指令不保存运算结果 TST指令通常与EQ NE条件码配合使用 当所有测试位均为0时 EQ有效 而只要有一个测试位不为0 则NE有效 ARM数据处理指令 比较指令 相等测试指令 TEQ指令将寄存器Rn的值与operand2的值按位作逻辑 异或 操作 根据操作的结果更新CPSR中的相应条件标志位 以便后面的指令根据相应的条件标志来判断是否执行 指令格式如下 用于反转操作数为1的某些位 TEQ cond Rn operand2应用示例 TEQR0 R1 比较R0与R1是否相等 不影响V位和C位 ARM数据处理指令 比较指令 相等测试指令 TEQ指令将寄存器Rn的值与operand2的值按位作逻辑 异或 操作 根据操作的结果更新CPSR中的相应条件标志位 以便后面的指令根据相应的条件标志来判断是否执行 指令格式如下 TEQ cond Rn operand2 注意 TEQ指令与EORS指令的区别在于TEQ指令不保存运算结果 使用TEQ进行相等测试时 常与EQ NE条件码配合使用 当两个数据相等时 EQ有效 否则NE有效 ARM7TDMI具有三种乘法指令 分别为 32 32位乘法指令 32 32位乘加指令 32 32位结果为64位的乘 乘加指令 4 乘法指令 ARM指令 乘法指令 乘法指令编码 指令执行的条件码 Opcode乘法指令操作码 S设置条件码 与指令中的S位对应 Rm为被乘数寄存器 Rd RdLo为MLA指令相加的寄存器或64位乘法指令的目标寄存器 低32位 Rn RdHi为目标寄存器或64位乘法指令的目标寄存器 高32位 Rs为乘数寄存器 ARM指令 乘法指令 ARM指令 乘法指令 32位乘法指令 MUL指令将Rm和Rs中的值相乘 结果的低32位保存到Rd中 指令格式如下 MUL cond S Rd Rm Rs应用示例 MULR1 R2 R3 R1 R2 R3MULSR0 R3 R7 R0 R3 R7 同时影响CPSR中的N位和Z位 ARM指令 乘法指令 32位乘加指令 MLA指令将Rm和Rs中的值相乘 再将乘积加上第3个操作数 结果的低32位保存到Rd中 指令格式如下 MLA cond S Rd Rm Rs Rn应用示例 MLAR1 R2 R3 R0 R1 R2 R3 R0 ARM指令 乘法指令 64位无符号乘法指令 UMULL指令将Rm和Rs中的值作无符号数相乘 结果的低32位保存到RdLo中 而高32位保存到RdHi中 指令格式如下 UMULL cond S RdLo RdHi Rm Rs应用示例 UMULLR0 R1 R5 R8 R1 R0 R5 R8 ARM指令 乘法指令 64位无符号乘加指令 UMLAL指令将Rm和Rs中的值作无符号数相乘 64位乘积与RdHi RdLo相加 结果的低32位保存到RdLo中 而高32位保存到RdHi中 指令格式如下 UMLAL cond S RdLo RdHi Rm Rs应用示例 UMLALR0 R1 R5 R8 R1 R0 R5 R8 R1 R0 ARM指令 乘法指令 64位有符号乘法指令 SMULL指令将Rm和Rs中的值作有符号数相乘 结果的低32位保存到RdLo中 而高32位保存到RdHi中 指令格式如下 SMULL cond S RdLo RdHi Rm Rs应用示例 SMULLR2 R3 R7 R6 R3 R2 R7 R6 ARM指令 乘法指令 64位有符号乘加指令 SMLAL指令将Rm和Rs中的值作有符号数相乘 64位乘积与RdHi RdLo相加 结果的低32位保存到RdLo中 而高32位保存到RdHi中 指令格式如下 SMLAL cond S RdLo RdHi Rm Rs应用示例 SMLALR2 R3 R7 R6 R3 R2 R7 R6 R3 R2 MOV MVN传送 传送非格式 MOV S Rd Operand2 将Operand2的值拷贝到RdMVN S Rd Operand2 将Operand2的值进行按位逻辑非 操作后送到Rd S 选择S 则会根据操作结果更新条件码 N Z C 三 ARM传送指令 ARM指令 数据传送 ARM指令 数据传送 MOV指令将8位图立即数 参看 第2操作数 immed 8r 常数表达式 或寄存器传送到目标寄存器 Rd 可用于移位运算等操作 指令格式如下 MOV cond S Rd operand2MOV指令举例如下 MOVR1 0 x10 R1 0 x10MOVR0 R1 R0 R1MOVSR3 R1 LSL 2 R3 R1 2 并影响标志位MOVPC LR PC LR 子程序返回MOVSPC R14 从异常返回 恢复CPSR ARM数据处理指令 数据传送 MVN指令将8位图立即数 参看 第2操作数 immed 8r 常数表达式 或寄存器 operand2 按位取反后传送到目标寄存器 Rd 因为其具有取反功能 所以可以装载范围更广的立即数 指令格式如下 MVN cond S Rd operand2MVN指令举例如下 MVNR1 0 xFF R1 0 xFFFFFF00MVNR1 R2 将R2取反 结果存到R1 在ARM处理器中 只有MRS指令可以对状态寄存器CPSR和SPSR进行读操作 通过读CPSR可以了解当前处理器的工作状态 读SPSR寄存器可以了解到进入异常前的处理器状态 MRS cond Rd psr MRS指令格式 指令对应编码 指令执行的条件码 目标寄存器 不能为R15 区别CPSR 为0 和SPSR 为1 寄存器 三 程序状态寄存器访问指令 ARM状态寄存器读指令 在ARM处理器中 只有MRS指令可以对状态寄存器CPSR和SPSR进行读操作 通过读CPSR可以了解当前处理器的工作状态 读SPSR寄存器可以了解到进入异常前的处理器状态 MRS cond Rd psr MRS指令格式 应用示例 MRSR1 CPSR 将CPSR状态寄存器读取 保存到R1中MRSR2 SPSR 将SPSR状态寄存器读取 保存到R2中 ARM状态寄存器写指令 在ARM处理器中 只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作 与MRS配合使用 可以实现对CPSR或SPSR寄存器的读 修改 写操作 可以切换处理器模式 或者允许 禁止IRQ FIQ中断等 MSR cond psr fields immed 8r MSR指令格式1 MSR cond psr fields Rm MSR指令格式2 指令执行的条件码 CPSR或SPSR 指定传送的区域 可以为以下字母 必须小写 的一个或者组合 c控制域屏蔽字节 psr 7 0 x扩展域屏蔽字节 psr 15 8 s状态域屏蔽字节 psr 23 16 f标志域屏蔽字节 psr 31 24 保存要传送到状态寄存器指定域数据的源寄存器 要传送到状态寄存器指定域的立即数 保存要传送到状态寄存器指定域数据的源寄存器 ARM状态寄存器写指令 在ARM处理器中 只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作 与MRS配合使用 可以实现对CPSR或SPSR寄存器的读 修改 写操作 可以切换处理器模式 或者允许 禁止IRQ FIQ中断等 指令执行的条件码 CPSR或SPSR 指定传送的区域 可以为以下字母 必须小写 的一个或者组合 c控制域屏蔽字节 psr 7 0 x扩展域屏蔽字节 psr 15 8 s状态域屏蔽字节 psr 23 16 f标志域屏蔽字节 psr 31 24 要传送到状态寄存器指定域的立即数 MSR指令1编码 MSR指令2编码 Rotate 立即数对齐8 bit immediate 8位立即数 例 设置N Z C V标志MSRCPSR f ff000000 仅高8位有效 其它必须位0 1 2 3 4 ARM状态寄存器写指令 在ARM处理器中 只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作 与MRS配合使用 可以实现对CPSR或SPSR寄存器的读 修改 写操作 可以切换处理器模式 或者允许 禁止IRQ FIQ中断等 应用示例1 子程序 使能IRQ中断ENABLE IRQMRSR0 CPSRBICR0 R0 0 x80MSRCPSR c R0MOVPC LR 应用示例2 子程序 禁能IRQ中断DISABLE IRQMRSR0CPSRORRR0 R0 0 x80MSRCPSR c R0MOVPC LR 1 将CPSR寄存器内容读出到R0 2 修改对应于CPSR中的I控制位 3 将修改后的值写回CPSR寄存器的对应控制域 4 返回上一层函数 ARM转移类指令完成循环 调用子程序和从ARM状态转向Thumb状态等功能 它包括B BL BX和BLX指令 四 ARM分支转移类指令 ARM分支指令 指令编码 分支指令B BL指令编码格式 指令执行的条件码 L区别B指令 L为0 和BL指令 L为1 24位有符号立即数 偏移量 分支指令BX指令编码格式 指令执行的条件码 Rm目标地址寄存器 该寄存器装载跳转地址 ARM指令 分支指令 ARM指令 分支指令 分支指令 B指令 该指令跳转范围限制在当前指令的 32M字节地址内 ARM指令为字对齐 最低2位地址固定为0 指令格式如下 B cond Label应用示例 BWAITA 跳转到WAITA标号处B0 x1234 跳转到绝对地址0 x1234处 ARM指令 分支指令 带链接的分支指令 BL指令适用于子程序调用 使用该指令后 下一条指令的地址被拷贝到R14 即LR 连接寄存器中 然后跳转到指定地址运行程序 跳转范围限制在当前指令的 32M字节地址内 指令格式如下 BL cond Label Addr1 Addr2 1 当程序执行到BL跳转指令时 硬件将下一条指令的地址Addr2装入LR寄存器 并把跳转地址装入程序计数器 PC 2 程序跳转到目标地址Label继续执行 当子程序执行结束后 将LR寄存器内容存入PC 返回调用函数继续执行 ARM指令 分支指令 带链接的分支指令 BL指令适用于子程序调用 使用该指令后 下一条指令的地址被拷贝到R14 即LR 连接寄存器中 然后跳转到指定地址运行程序 跳转范围限制在当前指令的 32M字节地址内 指令格式如下 BL cond Label 应用示例 BLDELAY 调用子程序DELAY 例1 条件转移 CMPR0 5 如果R0小于5BLTSUB1 则转SUB1BGESUB2 否则转SUB2例2 程序调用 BLSUB 调用子程序SUB 返回点SUB 子程序入口MOVPC R14 执行完返回 四 ARM分支转移类指令 转移 转移带链接类指令B BL 例3 执行10次循环 MOVR0 10 设置循环次数LOOP SUBSR0 1 循环次数减1BNELOOP 不为0 继续循环 否则结束循环 四 ARM分支转移类指令 转移 转移带链接类指令B BL ARM指令 分支指令 带状态切换的分支指令 BX指令 4GB 该指令可以根据跳转地址 Rm 的最低位来切换处理器状态 BLX跳转范围限制在当前指令的 32M字节地址内 ARM指令为字对齐 最低2位地址固定为0 指令格式如下 BX cond Rm ARM指令 分支指令 带状态切换的分支指令 BX指令 4GB 该指令可以根据跳转地址 Rm 的最低位来切换处理器状态 BLX跳转范围限制在当前指令的 32M字节地址内 ARM指令为字对齐 最低2位地址固定为0 指令格式如下 BX cond Rm 应用示例 ADRLR0 ThumbFun 1 将Thumb程序的入口地址加1存入R0BXR0 跳转到R0指定的地址 并根据R0的最低位来切换处理器状态 完成与协处理器有关的操作 如 协处理器内部寄存器之间的数据传送 协处理器与存储器之间的数据传送 协处理器与CPU寄存器之间的数据传送 这些指令依赖于使用特定的协处理器 五 ARM协处理器类指令 ARM指令 协处理器指令 ARM协处理器指令 数据操作指令 ARM处理器通过CDP指令通知ARM协处理器执行特定的操作 该操作由协处理器完成 即对命令的参数的解释与协处理器有关 指令的使用取决于协处理器 若协处理器不能成功地执行该操作 将产生未定义指令异常中断 指令格式如下 指令执行的条件码 协处理器的特定操作码 存放第1个源操作数的协处理器寄存器 作为目标寄存器的协处理器寄存器 指令操作的协处理器名 可选的协处理器特定操作码 存放第2个源操作数的协处理器寄存器 CDP cond coproc opcode1 CRd CRn CRm opcode2 CDP cond coproc opcode1 CRd CRn CRm opcode2 数据操作指令编码 ARM协处理器指令 数据操作指令 ARM处理器通过CDP指令通知ARM协处理器执行特定的操作 该操作由协处理器完成 即对命令的参数的解释与协处理器有关 指令的使用取决于协处理器 若协处理器不能成功地执行该操作 将产生未定义指令异常中断 指令格式如下 CDP cond coproc opcode1 CRd CRn CRm opcode2 CDPp7 0 c0 c2 c3 1 对协处理器7操作 操作码为0 可选操作码为1 协处理器7中的寄存器C2和C3完成操作0 再完成子操作1 然后将结果放在C1中 CDPp6 1 c3 c4 c5 对协处理器6操作 操作码为1 协处理器6中的寄存器C4和C5完成操作1 然后将结果放在C3中 ARM协处理器指令 数据存取指令 协处理器数据存取指令LDC STC指令可以将某一连续内存单元的数据读取到协处理器的寄存器中 或者将协处理器的寄存器数据写入到某一连续的内存单元中 传送的字数由协处理器来控制 若协处理器不能成功地执行该操作 将产生未定义指令异常中断 LDC cond L coproc CRd 数据存储指令格式 STC cond L coproc CRd 数据读取指令格式 ARM协处理器指令 数据存取指令 协处理器数据存取指令LDC STC指令可以将某一连续内存单元的数据读取到协处理器的寄存器中 或者将协处理器的寄存器数据写入到某一连续的内存单元中 传送的字数由协处理器来控制 若协处理器不能成功地执行该操作 将产生未定义指令异常中断 数据操作指令编码 指令执行的条件码 P表示前 后变址 U表示加 减 W表示回写 N表示数据大小 L表示该指令是读取 为0 还是写入 为1 8位立即数偏移 协处理器编号 协处理器中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-江苏-江苏工程测量员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-江苏-江苏仓库管理员四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西水文勘测工五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西地图绘制员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东防疫员二级(技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东热力运行工二级(技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东地图绘制员四级(中级工)历年参考题库含答案解析
- 2025年综合评标专家-河北-河北综合评标专家(咨询类)历年参考题库含答案解析(5套)
- 乐都中考试题及答案
- 季风水田课件
- 肺部体格检查
- 人工智能在铸造领域的应用
- 开展市场调研和客户分析
- 生产工艺培训总结
- 阅读好书拒绝盗版活动方案
- ptf增稠剂聚合工艺
- 成语故事-引狼入室
- 【招聘管理工具】求职人员登记表(可直接打印两页标准完整模板)1
- 两高环境污染罪司法解释解读
- 医疗器械专业知识培训
- 2024年江苏省国信集团有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论