




已阅读5页,还剩198页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARM体系结构与编程 2020 2 12 内容 ARM概述和分类 ARM指令集和汇编程序设计 ARM体系结构和存储系统 ARM中断和异常处理 第一章ARM概述和分类 2020 2 12 内容 ARM简介 ARM的分类 ARM的命名规则 基于ARM的嵌入式系统概述 2020 2 12 ARM介绍 什么是ARM 其实 人人都用ARM 什么是ARM ARM是一个公司的名字ARM代表一项技术 即AdvancedRISCMachineARM是一个内核 而不是我们看到的具体的芯片 ARM发展的历程 第一片ARM处理器是1983年10月到1985年4月间在位于英国剑桥的AcornComputer公司开发1990年 为广泛推广ARM技术而成立了独立的公司AdvanceRISCMachine ARM 主要设计ARM系列RISC处理器内核授权ARM内核给生产和销售半导体的合作伙伴ARM公司不生产芯片IP IntelligenceProperty 另外也提供基于ARM架构的开发设计技术软件工具 评估板 调试工具 应用软件 总线架构 外围设备单元 等等20世纪90年代 ARM快速进入世界市场 ARMOfficesWorldwide 800 雇员全球 EnglandCambridge Maidenhead Sheffield BlackburnGermanyMunichFranceParis SophiaAntipolisKoreaSeoul USSeattle LosGatos WalnutCreek Austin Boston SanDiegoChinaTaiwanandShanghaiJapanShin Yokohama Tokyo ARMPartnershipModel 2020 2 12 ARM的应用 2020 2 12 ARM分类 基于指令集体系结构 构架ISA 的分类ARMV1体系是最初版本 只有26位的寻址空间 没有乘法指令 最终没有商业化ARMV2体系与V1体系同为26位寻址空间 具有乘法和加法指令 支持协处理器ARMV3体系的寻址范围扩展到32位 具有乘法和加法指令 支持协处理器ARMV4体系增加了半字存储操作 对调试的支持以及支持嵌入的ICEARMV5体系增加了DSP指令支持和对Java指令的支持ARMV6体系增加了媒体指令 ARMv6指令集合中加入了超过60条SIMD单指令多数据指令ARMV7体系定义了三种独立的内核型 A 应用领域 R 实时领域 M 控制领域 2020 2 12 ARM系列处理器 基于处理器内核的分类ARM7系列ARM9系列ARM9E系列ARM10E系列SecurCore系列StrongARM Xscale Intel ARM11 2020 2 12 ARM命名举例 2020 2 12 ARM体系的变种 1 Thumb指令集 T变种 Thumb指令集是把32位的ARM指令集的一个子集重新编码后而形成的一个特殊的16位的指令集2 长乘指令 M变种 长乘指令是一种生成64位相乘结果的乘法指令 此指令为ARM指令 M变种增加了两条长乘指令3 增强型DSP指令 E变种 E变种的ARM体系增加了一些增强处理器对典型的DSP算法处理能力的附加指令 4 Java加速器Jazelle J变种 ARM的Jazelle技术是Java语言和先进的32位RISC芯片完美结合的产物 5 ARM媒体功能扩展 SIMD变种 2020 2 12 ARM的命名规则 ARM的命名分成两类 基于ARMArchitecture的版本命名规则 基于ARMArchitecture版本的处理器系列命名规则 举个例子 s3c2410采用ARMv4T架构版本 ARM920T处理器系列 其中处理器核为ARM9TDMI 2020 2 12 基于ARMArchitecture的版本命名 规则 ARMv n variants x variants 分成四个组成部分 ARMv 固定字符 即ARMVersion n 指令集版本号 迄今为之 ARM架构版本发布了7个系列 所以n 1 7 其中最新的版本是第7版 variants 变种 x variants 排除x后指定的变种常见的变种有 T Thumb指令集 M 长乘法指令 E 增强型DSP指令 J Java加速器Jazelle SIMD ARM媒体功能扩展例如 ARMv5TxM表示ARM指令集版本为5 支持T变种 不支持M变种 2020 2 12 基于ARMArchitecture版本的处理器系列命名 采用上述的架构 形成一系列的处理器 有时候还要区分处理器核和处理器系列 不过 在这里其实不用区分太细 毕竟这是功能的小部分的变化 核心是相同的 规则 ARM x y z T D M I E J F S x 处理器系列 y 存储管理 保护单元 z cache T 支持Thumb指令集 D 支持片上调试 M 支持快速乘法器 I 支持EmbeddedICE 支持嵌入式跟踪调试 E 支持增强型DSP指令 J 支持Jazelle F 具备向量浮点单元VFP S 可综合版本 2020 2 12 基于ARM的嵌入式系统概述 1 RISC设计思想与CISC相比 有以下几个方面不同 a 设计重点不同 RISC重点在于通过软件的灵活降低硬件执行指令的复杂度 即使得编译器更高的复杂性b 指令集 RISC减少了指令种类 操作也简单 基本是一个周期执行一条指令 每一条指令长度是固定 而CISC指令长度不固定 执行也需要多个周期c 寄存器 RISC拥有更多寄存器 都可以存放数据或地址 而CISC都是用于特定目的的专用寄存器d load store结构 即处理器只处理寄存器中的数据 独立的load store指令完成数据在寄存器和外部存储器之间的传送 即数据处理与存储器访问分开 而CISC能够直接处理存取器中的数据注 ARM指令集属于RISC指令集 但与单纯的RISC有以下几方面不同 2020 2 12 基于ARM的嵌入式系统概述 ARM指令集属于RISC指令集 但与单纯的RISC有以下几方面不同 a 大部分ARM指令是单周期完成的 但也有不是的 如多寄存器的load store指令的执行周期是不确定的 具体由被传送的寄存器个数决定 b 内嵌桶型移位寄存器c Thumb16位指令集d 条件执行e 增强指令 如添加了强大的数字信号处理器 DSP 指令 以支持16 16位乘法操作及饱和操作 2020 2 12 基于ARM的嵌入式系统概述 2 高速缓存 cache 1 为什么采用高速缓存微处理器的时钟频率比内存速度提高快得多 高速缓存可以提高内存的平均性能 2 高速缓存的工作原理高速缓存是一种小型 快速的存储器 它保存部分主存内容的拷贝 CPU 高速缓存控制器 CACHE 主存 数据 数据 地址 2020 2 12 基于ARM的嵌入式系统概述 3 嵌入式处理器分类 微处理器 MicroProcessorUnit MPU 微控制器 MicroControllerUnit MCU 嵌入式DSP DigitalSignalProcessor DSP 片上系统 SystemOnChip 嵌入式微处理器 嵌入式微处理器的基础是通用计算机中的CPU 在应用中 将微处理器装配在专门设计的电路板上 只保留和嵌入式应用有关的母板功能 这样可以大幅度减小系统体积和功耗 为满嵌入式应用的特殊要求 嵌入式微处理器虽然在功能上和标准微处理器基本是一样的 但在工作温度 抗电磁干扰 可靠性等方面都做了各种增强 目前主要的嵌入式处理器类型有Am186 88 386EX SC 400 PowerPC 68000 MIPS ARM StrongARM系列等 嵌入式微处理器 嵌入式微控制器 嵌入式微控制器又称单片机 顾名思义 就是将整个计算机系统集成到一块芯片中 嵌入式微控制器一般以某一种微处理器内核为核心 芯片内部集成ROM EPROM RAM 总线 总线逻辑 定时 计数器 WatchDog I O 串行口 脉宽调制输出 A D D A FlashRAM EEPROM等各种必要功能和外设 为适应不同的应用需求 一般一个系列的单片机具有多种衍生产品 每种衍生产品的处理器内核都是一样的 不同的是存储器和外设的配置及封装 这样可以使单片机最大限度地和应用需求相匹配 功能不多不少 从而减少功耗和成本 和嵌入式微处理器相比 微控制器的最大特点是单片化 体积大大减小 从而使功耗和成本下降 可靠性提高 微控制器是目前嵌入式系统工业的主流 微控制器的片上外设资源一般比较丰富 适合于控制 因此称微控制器 嵌入式微控制器 嵌入式微控制器目前的品种和数量最多 比较有代表性的通用系列包括8051 P51XA MCS 251 MCS 96 196 296 C166 167 MC68HC05 11 12 16 68300等 另外还有许多半通用系列如 支持USB接口的MCU8XC930 931 C540 C541 支持I2C CAN Bus LCD及众多专用MCU和兼容系列 目前MCU占嵌入式系统约70 的市场份额 嵌入式DSP处理器 DSP处理器对系统结构和指令进行了特殊设计 使其适合于执行DSP算法 编译效率较高 指令执行速度也较高 在数字滤波 FFT 谱分析等方面DSP算法正在大量进入嵌入式领域 DSP应用正从在通用单片机中以普通指令实现DSP功能 过渡到采用嵌入式DSP处理器 嵌入式DSP处理器有两个发展来源 一是DSP处理器经过单片化 EMC改造 增加片上外设成为嵌入式DSP处理器 TI的TMS320C2000 C5000等属于此范畴 二是在通用单片机或SOC中增加DSP协处理器 例如Intel的MCS 296和Infineon Siemens 的TriCore 推动嵌入式DSP处理器发展的另一个因素是嵌入式系统的智能化 例如各种带有智能逻辑的消费类产品 生物信息识别终端 带有加解密算法的键盘 ADSL接入 实时语音压解系统 虚拟现实显示等 这类智能化算法一般都是运算量较大 特别是向量运算 指针线性寻址等较多 而这些正是DSP处理器的长处所在 嵌入式DSP处理器 有代表性的产品是TexasInstruments的TMS320系列和Motorola的DSP56000系列 TMS320系列处理器包括用于控制的C2000系列 移动通信的C5000系列 以及性能更高的C6000和C8000系列 Motorola公司的DSP56000已经发展成为DSP56000 DSP56100 DSP56200和DSP56300等几个不同系列的处理器 PHILIPS公司也推出了基于可重置嵌入式DSP结构低成本 低功耗技术上制造的DSP处理器 特点是具备双Harvard结构和双乘 累加器单元 应用目标是大批量消费类电子产品 随着EDI的推广和VLSI设计的普及化 及半导体工艺的迅速发展 在一个硅片上实现一个更为复杂的系统的时代已来临 这就是SystemOnChip SOC 各种通用处理器内核将作为SOC设计公司的标准库 和许多其它嵌入式系统外设一样 成为VLSI设计中一种标准的器件 用标准的VHDL等语言描述 存储在器件库中 用户只需定义出其整个应用系统 仿真通过后就可以将设计图交给半导体工厂制作样品 这样除个别无法集成的器件以外 整个嵌入式系统大部分均可集成到一块或几块芯片中去 应用系统电路板将变得很简洁 对于减小体积和功耗 提高可靠性非常有利 它结合了许多功能区块 将功能做在一个芯片上 ARMRISC MIPSRISC DSP或是其他的微处理器核心 加上通信的接口单元 例如通用串行端口 USB TCP IP通信单元 GPRS通信接口 GSM通信接口 IEEE1394 蓝牙模块接口等等 这些单元以往都是依照各单元的功能做成一个个独立的处理芯片 嵌入式片上系统 SoC 2020 2 12 基于ARM的嵌入式系统概述 4 嵌入式系统硬件 总线 4 嵌入式系统硬件微处理器 CPU 是嵌入式系统硬件平台的核心构件 但不是全部 按照冯 诺依曼体系结构思想 计算机的硬件是由CPU 存储器和I O设备三部分组成的 总线是把CPU与存储器 I O设备相连接的信息通道 但总线并不仅仅指的是一束信号线 而应包含相应的通信协议 按照使用场合的不同 总线分成芯片级总线 CPU总线 板卡级总线 内总线 和系统级总线 外总线 总线和总线桥 2020 2 12 基于ARM的嵌入式系统概述 4 嵌入式系统硬件AMBA总线是一个多总线系统 规范定义了三种可以组合使用的不同类型的总线 AHB AdvancedHigh performanceBus ASB AdvancedSystemBus 和APB AdvancedPeripheralBus AHB CPU核 存储器控制器 中断控制器 LCD控制器 DMA和USB主机模块等 可以包括多个主模块 APB WATCHDOG IIS IIC PWM ADC UART GPIO RTC等 只有一个主模块 ASB 连接高性能系统模块 在某些需高速且不必使用AHB总线的场合使用 2020 2 12 基于ARM的嵌入式系统概述 5 嵌入式存储器大多数嵌入式产品的存储器结构是分层的 即多种类型的存储器在决定存储器层次 宽度 类型等特性时 需综合考虑产品的价格 性能 功耗等因素 存储器系统 寄存器 高速缓存SRAM 主存储器DRAM 本地存储器Flash ROM 磁盘 网络存储器Flash ROM 磁盘 时钟周期 0 1 10 50 100 20000000 分层结构 存储器种类 RAM 随机存取存储器SRAM 静态随机存储器 高速存储器或cache 不需刷新电路即能保存内部存储数据 DRAM 动态随机存储器 一般使用电容存储 需经常刷新1 SRAM比DRAM快2 SRAM比DRAM耗电多3 DRAM存储密度比SRAM高得多4 DRAM需要周期性刷新SDRAM 同步动态随机存储器 是DRAM中的一种 因与处理器总线同步 故能突发式地输出到总线ROM 只读存储器 闪速存储器 FLASH PROM 可编程ROMEPROM 可擦除 可编程ROMEEPROM 电可擦除 可编程ROMFLASH 闪存相对传统的EPROM芯片 这种芯片可以用电气的方法快速地擦写由于快擦写存储器不需要存储电容器 故其集成度更高 制造成本低于DRAM它使用方便 既具有SRAM读写的灵活性和较快的访问速度 又具有ROM在断电后可不丢失信息的特点 所以快擦写存储器技术发展十分迅速FLASH的架构大致上可分为具程序执行能力的NOR架构以及储存数据的NAND架构 NOR技术和NAND技术 NORFlash市场目前由Intel和AMD公司主导 其主要功能是程序的储存 如PC中的BIOSNOR的特点是芯片内执行 XIP eXecuteInPlace 这样应用程序可以直接在flash闪存内运行 不必再把代码读到系统RAM中 NOR的传输效率很高 在1 4MB的小容量时具有很高的成本效益 但是很低的写入和擦除速度大大影响了它的性能 NANDFlash相对上属于封闭的市场 专利权掌握在少数厂商手中 Toshiba和Samsung公司为主 其主要功能是数据的储存 如小型存储卡 随身电子盘等都是NAND结构能提供极高的单元密度 可以达到高存储密度 并且写入和擦除的速度也很快 应用NAND的困难在于flash的管理需要特殊的系统接口 2020 2 12 基于ARM的嵌入式系统概述 6 初始化启动代码 1 初始化硬件配置 2 诊断 3 引导初始化硬件配置包括 设置堆栈指针 硬件工作时钟 存储器映射等等 I O寄存器 快速SRAM 大块DRAM 启动ROM 启动之前 I O寄存器 快速SRAM 大块DRAM 启动ROM 启动之后 2020 2 12 基于ARM的嵌入式系统概述 6 初始化启动代码诊断硬件是否能正常工作 不能工作的是否隔离 即识别和隔离故障 引导过程包括装载一个映像文件并将控制权交给它 装载可以包括拷贝整个程序 代码和数据 也可以只拷贝易变 volatile 变量的数据到RAM中 启动后 通过更改PC指向映像文件的起始地址 从而交出控制权 ARM的特点 RISC指令集Load Store体系结构固定的32位指令大多数指令单周期完成Thumb DSP jazeller功能扩展低功耗 2020 2 12 小结 什么是ARMARM的特点ARM的分类ARM的命名规则嵌入式硬件体系结构嵌入式存储器存储器映射 第二章ARM体系结构和存储系统 2020 2 12 内容 流水线 pipeline 存储 模式 model 寄存器 2020 2 12 存储 地址空间 ARM结构使用单个平面的232个8位字节地址空间 字节地址按照无符号数排列 从0到232 1 地址空间可以看作是包含230个32位字 或231个16位半字 32位地址线 数据线 支持如下数据类型 字节 byte 8bits 半字 Halfword 16bits 半字必须对齐2字节边界 字 Word 32bits 字必须对齐4字节边界 2020 2 12 存储 ARM处理器可以将存储器中的字以下列格式存储 大端格式 Big endian 字数据的高字节存储在低地址中 而低字节存储在高地址中小端格式 Little endian 与小端对齐相反 字数据的高字节存储在高地址中 低字节存储在低地址中 2020 2 12 ARM结构通常希望所有的存储器访问都合理的对齐 具体来说就是字访问的地址通常是字对齐的 而半字访问使用的地址是半字对齐的 不按这种方式对齐的存储器访问称为非对齐的存储器访问 非对齐的取指 不可预知结果 ARM状态忽略低2位 Thumb状态忽略最低位 忽略由存储器实现 非对齐的数据访问 执行结果不可预测 忽略字单元地址的低2位 忽略半字单元地址的最低位 忽略可能由处理器或存储器完成 存储 非对齐的存储器访问 指令流水线 为增加处理器指令流的速度 ARM7系列使用3级流水线 允许多个操作同时处理 比逐条指令执行要快 PC指向正被取指的指令 而非正在执行的指令 Fetch Decode Execute 从存储器中读取指令 解码指令 寄存器读 从寄存器Bank 移位及ALU操作寄存器写 到寄存器Bank PCPC PC 4PC 2 PC 8PC 4 ARMThumb 2020 2 12 处理器状态 处理器状态 ARM处理器包含32位ARM指令集和16位Thumb指令集 因此ARM处理器有两种操作态 ARM状态 32位 这种状态下执行的是字方式的ARM指令 Thumb状态 16位 这种状态下执行半字方式的Thumb指令 注意 两个状态之间的切换并不影响处理器模式或寄存器内容 2020 2 12 处理器模式 简介 ARM体系结构支持7种处理器模式 分别为 用户模式 快中断模式 中断模式 管理模式 中止模式 未定义模式和系统模式 如下表所示 这样的好处是可以更好的支持操作系统并提高工作效率 特权模式 除用户模式外的6种模式异常模式 除系统模式外的特权模式 2020 2 12 处理器模式 2020 2 12 内部寄存器 简介 在ARM处理器内部有37个用户可见的寄存器 30个通用寄存器6个状态寄存器1个专用于记录当前状态5个专用于记录模式切换前的状态1个程序计数器PC在不同的工作模式和处理器状态下 程序员可以访问的寄存器也不尽相同 2020 2 12 ARM状态各模式下可以访问的寄存器 2020 2 12 内部寄存器 r0 r12 通用寄存器 当C和汇编互相调用时 r0 r3用来传递函数参数 可记为a0 a3r13 用于各种模式下的堆栈寄存器 sp r14 用来保存程序返回地址的链接寄存器 lr r15 程序计数器 pc r8 FIQ r12 FIQ 允许快速中断处理r8 User r12 User 除了FIQ模式外各模式公用除了User和System模式外 各种模式都有自己独立的r13和r14 2020 2 12 内部寄存器 R14寄存器与子程序调用 MOVPC LR R14 地址A 1 程序A执行过程中调用程序B 操作流程 2 程序跳转至标号Label 执行程序B 同时硬件将 BLLabel 指令的下一条指令所在地址存入R14 3 程序B执行最后 将R14寄存器的内容放入PC 返回程序A 2020 2 12 内部寄存器 正常操作时 从R15读取的值是处理器正在取指的地址 即当前正在执行指令的地址加上8个字节 两条ARM指令的长度 由于ARM指令总是以字为单位 所以R15寄存器的最低两位总是为0 2020 2 12 程序状态寄存器 简介 ARM内核包含1个CPSR和5个供异常处理程序使用的SPSR CPSR反映了当前处理器的状态 其包含 4个条件代码标志 负 N 零 Z 进位 C 和溢出 V 2个中断禁止位 分别控制一种类型的中断 5个对当前处理器模式进行编码的位 1个用于指示当前执行指令 ARM还是Thumb 的位 2020 2 12 程序状态寄存器 简介 条件代码标志 保留 控制位 溢出标志 进位或借位扩展 零 负或小于 IRQ禁止 FIQ禁止 状态位 模式位 N Z C V I T F CPSR寄存器的格式 CPSR模式位设置表 2020 2 12 程序状态寄存器 简介 每个异常模式还带有一个程序状态保存寄存器 SPSR 它用于保存在异常事件发生之前的CPSR CPSR和SPSR通过特殊指令进行访问 注意 如果通过程序修改CPSR寄存器中的模式位进入异常模式 那么硬件将不会把CPSR保存至SPSR中 2020 2 12 小结 ARM处理器存储格式指令流水线ARM处理器状态ARM处理器模式SPLRPCCPSRSPSR 第三章ARM指令系统 2020 2 12 内容 ARM指令集 ARM汇编程序设计 ARM处理器寻址 2020 2 12 ARM处理器寻址方式 寻址方式分类 寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式 ARM处理器具有9种基本寻址方式 1 寄存器寻址 2 立即寻址 3 寄存器移位寻址 4 寄存器间接寻址 5 基址寻址 6 多寄存器寻址 7 堆栈寻址 8 块拷贝寻址 9 相对寻址 2020 2 12 操作数的值在寄存器中 指令中的地址码字段指出的是寄存器编号 指令执行时直接取出寄存器值来操作 寄存器寻址指令举例如下 MOVR1 R2 将R2的值存入R1SUBR0 R1 R2 将R1的值减去R2的值 结果保存到R0 ARM处理器寻址方式 寻址方式分类 寄存器寻址 MOVR1 R2 0 xAA 2020 2 12 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身 也就是说 数据就包含在指令当中 取出指令也就取出了可以立即使用的操作数 这样的数称为立即数 立即寻址指令举例如下 SUBSR0 R0 1 R0减1 结果放入R0 并且影响标志位MOVR0 0 xFF000 将立即数0 xFF000装入R0寄存器 ARM处理器寻址方式 寻址方式分类 立即寻址 MOVR0 0 xFF00 0 xFF00 从代码中获得数据 2020 2 12 寄存器移位寻址是ARM指令集特有的寻址方式 当第2个操作数是寄存器移位方式时 第2个寄存器操作数在与第1个操作数结合之前 选择进行移位操作 寄存器移位寻址指令举例如下 MOVR0 R2 LSL 3 R2的值左移3位 结果放入R0 即是R0 R2 8ANDSR1 R1 R2 LSLR3 R2的值左移R3位 然后和R1相 与 操作 结果放入R1 ARM处理器寻址方式 寻址方式分类 寄存器移位寻址 MOVR0 R2 LSL 3 0 x08 0 x08 逻辑左移3位 2020 2 12 指令集介绍 ARM指令集 第2个操作数 2020 2 12 寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号 所需的操作数保存在寄存器指定地址的存储单元中 即寄存器为操作数的地址指针 寄存器间接寻址指令举例如下 LDRR1 R2 将R2指向的存储单元的数据读出 保存在R1中SWPR1 R1 R2 将寄存器R1的值和R2指定的存储 单元的内容交换 ARM处理器寻址方式 寻址方式分类 寄存器间接寻址 LDRR0 R2 0 xAA 2020 2 12 基址寻址就是将基址寄存器的内容与指令中给出的偏移量 4K 相加 减 形成操作数的有效地址 基址寻址用于访问基址附近的存储单元 常用于查表 数组操作 功能部件寄存器访问等 寄存器间接寻址是偏移量为0的基址加偏移寻址 基址寻址指令举例如下 前索引寻址 LDRR2 R3 0 x0C 读取R3 0 x0C地址上的存储单元的内容 放入R2STRR1 R0 4 先R0 R0 4 然后把R0的值寄存 到保存到R1指定的存储单元 ARM处理器寻址方式 寻址方式分类 基址寻址 LDRR2 R3 0 x0C 0 xAA 将R3 0 x0C作为地址装载数据 基址寻址指令举例如下 LDRR0 R1 4 R0 R1 R1 R1 4 后索引基址寻址 ARM这种自动索引机制不消耗额外的时间LDRR0 R1 R2 R0 R1 R2 ARM处理器寻址方式 寻址方式分类 基址寻址 2020 2 12 多寄存器寻址一次可传送几个寄存器值 允许一条指令传送16个寄存器的任何子集或所有寄存器 多寄存器寻址指令举例如下 LDMIAR1 R2 R7 R12 将R1指向的单元中的数据读出到 R2 R7 R12中 R1自动加4 STMIAR0 R2 R7 R12 将寄存器R2 R7 R12的值保 存到R0指向的存储 单元中 R0自动加4 ARM处理器寻址方式 寻址方式分类 多寄存器寻址 LDMIAR1 R2 R4 R6 0 x40000010 堆栈是一个按特定顺序进行存取的存储区 操作顺序为 后进先出 堆栈寻址是隐含的 它使用一个专门的寄存器 堆栈指针 指向一块存储区域 堆栈 指针所指向的存储单元即是堆栈的栈顶 存储器堆栈可分为两种 向上生长 向高地址方向生长 称为递增堆栈向下生长 向低地址方向生长 称为递减堆栈 ARM处理器寻址方式 寻址方式分类 堆栈寻址 2020 2 12 ARM处理器寻址方式 寻址方式分类 堆栈寻址 0 x12345678 0 x12345678 2020 2 12 堆栈指针指向最后压入的堆栈的有效数据项 称为满堆栈 压栈时先修改sp 后数据压栈 出栈时先数据出栈 后修改sp 堆栈指针指向下一个待压入数据的空位置 称为空堆栈 压栈时先数据压栈 后修改sp 出栈时先修改sp 后数据出栈 ARM处理器寻址方式 寻址方式分类 堆栈寻址 0 x12345678 2020 2 12 所以可以组合出四种类型的堆栈方式 满递增 堆栈向上增长 堆栈指针指向内含有效数据项的最高地址 指令如LDMFA STMFA等 空递增 堆栈向上增长 堆栈指针指向堆栈上的第一个空位置 指令如LDMEA STMEA等 满递减 堆栈向下增长 堆栈指针指向内含有效数据项的最低地址 指令如LDMFD STMFD等 空递减 堆栈向下增长 堆栈指针向堆栈下的第一个空位置 指令如LDMED STMED等 ARM处理器寻址方式 寻址方式分类 堆栈寻址 2020 2 12 多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置 如 STMIAR0 R1 R7 将R1 R7的数据保存到存储器中 存储指针R0在保存第一个值之后增加 增长方向为向上增长 STMIBR0 R1 R7 将R1 R7的数据保存到存储器中 存储指针R0在保存第一个值之前增加 增长方向为向上增长 ARM处理器寻址方式 寻址方式分类 块拷贝寻址 2020 2 12 相对寻址是基址寻址的一种变通 由程序计数器PC提供基准地址 指令中的地址码字段作为偏移量 两者相加后得到的地址即为操作数的有效地址 相对寻址指令举例如下 BLSUBR1 调用到SUBR1子程序BEQLOOP 条件跳转到LOOP标号处 LOOPMOVR6 1 SUBR1 ARM处理器寻址方式 寻址方式分类 相对寻址 2020 2 12 ARM指令小节目录 1 指令格式2 数据处理指令3 条件码4 乘法指令5 ARM分支指令6 存储器访问指令7 杂项指令8 伪指令 2020 2 12 指令集介绍 ARM指令集 指令格式 2020 2 12 ARM是三地址指令格式 指令的基本格式如下 指令集介绍 ARM指令集 基本指令格式 S 其中号内的项是必须的 号内的项是可选的 各项的说明如下 opcode 指令助记符 cond 执行条件 S 是否影响CPSR寄存器的值 Rd 目标寄存器 Rn 第1个操作数的寄存器 operand2 第2个操作数 例 2020 2 12 ARM指令的基本格式如下 指令集介绍 ARM指令集 第2个操作数 S 灵活的使用第2个操作数 operand2 能够提高代码效率 它有如下的形式 immed 8r 常数表达式 Rm 寄存器方式 Rm shift 寄存器移位方式 2020 2 12 指令集介绍 ARM指令集 第2个操作数 immed 8r 常数表达式该常数必须对应8位位图 即一个8位的常数通过循环右移偶数位得到 循环右移10位 8位常数 例如 ADDR1 R2 0 x0F 0 x103 0 x104 0 x102 2020 2 12 指令集介绍 ARM指令集 第2个操作数 Rm 寄存器方式在寄存器方式下 操作数即为寄存器的数值 例如 SUBR1 R1 R2 2020 2 12 指令集介绍 ARM指令集 第2个操作数 Rm shift 寄存器移位方式将寄存器的移位结果作为操作数 移位操作不消耗额外的时间 但Rm值保持不变 2020 2 12 指令集介绍 ARM指令集 第2个操作数 Rm shift 寄存器移位方式例如 ADDR1 R1 R1 LSL 3 R1 R1 R1 R3 2020 2 12 ARM指令小节目录 1 指令格式2 数据处理指令3 条件码4 乘法指令5 ARM分支指令6 存储器访问指令7 杂项指令8 伪指令 2020 2 12 简单的ARM程序 文件名 test 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 文件结束 2020 2 12 指令集介绍 ARM指令集 ARM数据处理指令 数据处理指令大致可分为3类 数据传送指令 算术逻辑运算指令 比较指令 数据处理指令只能对寄存器的内容进行操作 而不能对内存中的数据进行操作 所有ARM数据传送或算术逻辑运算指令均可选择使用S后缀 以使指令影响CPSR中的标志 2020 2 12 ARM数据处理指令 数据传送 注 当后缀S时 这些指令根据结果更新标志N和Z 在计算Operand2时更新标志C 不影响标志V 2020 2 12 ARM数据处理指令 算术运算 注 这些指令影响N Z C和V标志位 2020 2 12 ARM数据处理指令 逻辑运算指令 注 当后缀S时 这些指令根据结果更新标志N和Z 在计算Operand2时更新标志C 不影响标志V 2020 2 12 ARM数据处理指令 比较指令 注 这些指令影响N Z C和V标志位 如 CMNR0 1 测试R0的值是否为1的补码 若是z置位 2020 2 12 ARM指令小节目录 1 指令格式2 数据处理指令3 条件码4 乘法指令5 ARM分支指令6 存储器访问指令7 杂项指令8 伪指令 2020 2 12 ARM指令的基本格式如下 指令集介绍 ARM指令集 条件码 S 使用条件码 cond 可以实现高效的逻辑操作 节省跳转和条件语句 提高代码效率 2020 2 12 指令条件码表 2020 2 12 指令集介绍 ARM指令集 条件码 C代码 if a b a elseb 对应的汇编代码 CMPR0 R1 R0 a 与R1 b 比较ADDHIR0 R0 1 若R0 R1 则R0 R0 1ADDLSR1 R1 1 若R0 R1 则R1 R1 1 示例 2020 2 12 ARM指令小节目录 1 指令格式2 数据处理指令3 条件码4 乘法指令5 ARM分支指令6 存储器访问指令7 杂项指令8 伪指令 2020 2 12 指令集介绍 ARM指令集 乘法指令 ARM具有三种乘法指令 分别为 32 32位乘法指令 32 32位乘加指令 32 32位结果为64位的乘 乘加指令 2020 2 12 ARM指令 乘法指令 2020 2 12 ARM指令小节目录 1 指令格式2 数据处理指令3 条件码4 乘法指令5 ARM分支指令6 存储器访问指令7 杂项指令8 伪指令 2020 2 12 指令集介绍 ARM指令集 分支指令 在ARM中有两种方式可以实现程序的跳转 一种是使用分支指令直接跳转 另一种则是直接向PC寄存器赋值实现跳转 分支指令有以下三种 分支指令B 带链接的分支指令BL 带状态切换的分支指令BX 2020 2 12 ARM指令 分支指令 2020 2 12 ARM指令小节目录 1 指令格式2 数据处理指令3 条件码4 乘法指令5 ARM分支指令6 存储器访问指令7 杂项指令8 伪指令 2020 2 12 指令集介绍 ARM指令集 存储器访问指令 ARM处理器是典型的RISC处理器 对存储器的访问只能使用加载和存储指令实现 存储器访问指令分为 单寄存器操作指令和多寄存器操作指令 2020 2 12 ARM存储器访问指令 单寄存器加载 2020 2 12 ARM存储器访问指令 单寄存器存储 2020 2 12 LDR和STR 字和无符号字节加载 存储指令LDR指令用于从内存中读取单一字或字节数据存入寄存器中 STR指令用于将寄存器中的单一字或字节数据保存到内存 指令格式如下 ARM存储器访问指令 单寄存器存储 LDR cond T Rd 将指定地址上的字数据读入RdSTR cond T Rd 将Rd中的字数据存入指定地址LDR cond B T Rd 将指定地址上的字节数据读入RdSTR cond B T Rd 将Rd中的字节数据存入指定地址 2020 2 12 ARM存储器访问指令 单寄存器存储 ARM指令集提供了几种存储器寻址的不同方式 这些方式是以下几种变址模式的组合 注 表示要把计算出的地址回写到基址寄存器 2020 2 12 LDR和STR 半字和有符号字节加载 存储指令这类LDR STR指令可加载有符号半字或字节 可加载 存储无符号半字 偏移量格式 寻址方式与加载 存储字和无符号字节指令相同 ARM存储器访问指令 单寄存器存储 LDR cond SBRd 将指定地址上的有符号字节读入RdLDR cond SHRd 将指定地址上的有符号半字读入RdLDR cond HRd 将指定地址上的半字数据读入RdSTR cond HRd 将Rd中的半字数据存入指定地址 注意 半字数据加载 寄存器高两个字节置零 字节数据加载 寄存器高三个字节置零 2020 2 12 LDR和STR指令应用示例 1 加载 存储字和无符号字节指令LDRR2 R5 将R5指向地址的字数据存入R2STRR1 R0 0 x04 将R1的数据存储到R0 0 x04地址LDRBR3 R2 1 将R2指向地址的字节数据存入R3 R2 R2 1STRBR0 R3 R8 ASR 2 R0 R3 R8 4 存储R0的最低有效字节2 加载 存储半字和有符号字节指令LDRSBR1 R0 R3 将R0 R3地址上的字节数据存入R1 高24位用符号扩展LDRHR6 R2 2 将R2指向地址的半字数据存入R6 高16位用0扩展 读出后 R2 R2 2STRHR1 R0 2 将R1的半字数据保存到R0 2地址 只修改低2字节数据 然后R0 R0 2 ARM存储器访问指令 单寄存器存储 2020 2 12 ARM存储器访问指令 多寄存器存取 多寄存器加载 存储指令可以实现在一组寄存器和一块连续的内存单元之间传输数据 LDM为加载多个寄存器 STM为存储多个寄存器 允许一条指令传送16个寄存器的任何子集或所有寄存器 它们主要用于现场保护 数据复制 常数传递等 2020 2 12 ARM存储器访问指令 多寄存器存取 多寄存器加载 存储指令格式如下 LDM cond Rn reglist STM cond Rn reglist cond 指令执行的条件 模式 控制地址的增长方式 一共有8种模式 表示在操作结束后 将最后的地址写回Rn中 reglist 表示寄存器列表 可以包含多个寄存器 它们使用 隔开 如 R1 R2 R6 R9 寄存器由小到大排列 可选后缀 允许在用户模式或系统模式下使用 它有以下两个功能 1 若op是LDM且寄存器列表包含R15时 那么除了正常的多寄存器传送外 还将SPSR也复制到CPSR中 这用于异常处理返回 仅在异常模式下使用 2 数据传入或传出的是用户模式下的寄存器 而不是当前模式的寄存器 2020 2 12 ARM存储器访问指令 多寄存器存取 多寄存器加载 存储指令的8种模式如下表所示 右边四种为堆栈操作 左边四种为数据传送操作 进行数据复制时 先设置好源数据指针和目标指针 然后使用块拷贝寻址指令LDMIA STMIA LDMIB STMIB LDMDA STMDA LDMDB STMDB进行读取和存储 进行堆栈操作操作时 要先设置堆栈指针 SP 然后使用堆栈寻址指令STMFD LDMFD STMED LDMED STMFA LDMFA和STMEA LDMEA实现堆栈操作 2020 2 12 ARM存储器访问指令 多寄存器存取 使用数据块传送指令进行堆栈操作STMDAR0 R5 R6 LDMIBR0 R5 R6 使用堆栈指令进行堆栈操作STMEDR13 R5 R6 LDMEDR13 R5 R6 两段代码的执行结果是一样的 但是使用堆栈指令的压栈和出栈操作编程很简单 只要前后一致即可 而使用数据块指令进行压栈和出栈操作则需要考虑空与满 加与减对应的问题 2020 2 12 ARM存储器访问指令 寄存器和存储器交换指令 SWP指令用于将一个内存单元 该单元地址放在寄存器Rn中 的内容读取到一个寄存器Rd中 同时将另一个寄存器Rm的内容写入到该内存单元中 使用SWP可实现信号量操作 指令格式如下 SWP cond B Rd Rm Rn 其中 B为可选后缀 若有B 则交换字节 否则交换32位字 Rd用于保存从存储器中读入的数据 Rm的数据用于存储到存储器中 若Rm与Rd相同 则为寄存器与存储器内容进行互换 Rn为要进行数据交换的存储器地址 注 Rn不能与Rd和Rm相同 2020 2 12 ARM指令小节目录 1 指令格式2 数据处理指令3 条件码4 乘法指令5 ARM分支指令6 存储器访问指令7 杂项指令8 伪指令 2020 2 12 指令集介绍 ARM指令集 杂项指令 ARM指令集中有三条指令作为杂项指令 在实际应用中这三条指令非常重要 它们如下所示 2020 2 12 ARM杂项指令 软中断指令 SWI指令用于产生SWI异常 使得CPU模式变换到管理模式 并且将CPSR保存到管理模式的SPSR中 然后程序跳转到SWI异常入口 不影响条件码标志 该指令主要用于用户程序调用操作系统的系统服务 操作系统在SWI异常处理程序中进行相应的系统服务 SWI cond immed 24 SWI指令格式 2020 2 12 ARM杂项指令 软中断指令 根据SWI指令传递的参数SWI异常处理程序可以作出相应的处理 SWI指令传递参数有以下两种方法 指令中的24位立即数指定了用户请求的服务类型 参数通过通用寄存器传递 MOVR0 34 设置子功能号为34SWI12 调用12号软中断指令中的24位立即数被忽略 用户请求的服务类型由寄存器R0的值决定 参数通过其它的通用寄存器传递 MOVR0 12 调用12号软中断MOVR1 34 设置子功能号为34SWI0 2020 2 12 ARM杂项指令 软中断指令 本示例只有一级软中断 含有二级中断见异常处理 CMPR0 MaxSWILDRLSPC PC R0 LSL 2 BSWIOutOfRangeSwitableDCDdo SWI 0 该服务对应的SWI指令中立即数为0DCDdo SWI 1 该服务对应的SWI指令中立即数为1 do SWI 0 服务程序do SWI 0的代码 LDMFDSP R0 R3 R12 PC 从do SWI 0异常中断返回do SWI 1 服务程序do SWI 0的代码 2020 2 12 1 2 3 4 ARM杂项指令 状态寄存器写指令 应用示例1 子程序 使能IRQ中断ENABLE IRQMRSR0 CPSRBICR0 R0 0 x80MSRCPSR c R0MOVPC LR 应用示例2 子程序 禁止IRQ中断DISABLE IRQMRSR0 CPSRORRR0 R0 0 x80MSRCPSR c R0MOVPC LR 1 将CPSR寄存器内容读出到R0 2 修改对应于CPSR中的I控制位 3 将修改后的值写回CPSR寄存器的对应控制域 4 返回上一层函数 2020 2 12 ARM指令小节目录 1 指令格式2 数据处理指令3 条件码4 乘法指令5 ARM分支指令6 存储器访问指令7 杂项指令8 伪指令 2020 2 12 指令集介绍 ARM伪指令 ARM伪指令不属于ARM指令集中的指令 是为了编程方便而定义的 伪指令可以像其它ARM指令一样使用 但在编译时这些指令将被等效的一条或多条ARM指令所代替 ARM伪指令有四条 分别为ADR伪指令 ADRL伪指令 LDR伪指令 NOP伪指令 2020 2 12 ARM伪指令 小范围的地址读取 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 在汇编编译器编译源程序时 ADR伪指令被编译器替换成一条合适的指令 通常 编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能 若不能用一条指令实现 则产生错误 编译失败 ADR cond register expr ADR伪指令格式 指令执行的条件码 加载的目标寄存器 地址表达式 地址表达式expr的取指范围 当地址值是字节对齐时 其取指范围为 255 255 当地址值是字对齐时 其取指范围为 1020 1020 2020 2 12 ARM伪指令 小范围的地址读取 ADRR0 Delay DelayMOVR0 r14 应用示例 源程序 0 x20ADDr0 pc 0 x3c 0 x64MOVr0 r14 编译后的反汇编代码 使用伪指令将程序标号Delay的地址存入R0 ADR伪指令被汇编成一条指令 2020 2 12 ARM伪指令 小范围的地址读取 2020 2 12 ARM伪指令 中等范围的地址读取 ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 比ADR伪指令可以读取更大范围的地址 在汇编编译器编译源程序时 ADRL伪指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园教育质量监测与评价指标
- 中小学心理健康教育教案参考
- 隧道顶管施工技术方案详解
- 企业知识产权保护管理实务指南
- 大学生在线学习心得体会分享
- 兼职员工管理及合同规范指南
- 五年级上册数学期末试题精讲
- 六年级毕业典礼活动策划及执行方案
- 零售业客户关系管理实战指南
- 建筑消防工程进度控制与质量监测
- 2025年市级科技馆招聘笔试重点
- 2025西电考试题及答案
- 泡茶的步骤课件
- 2025年先兆流产的护理查房
- 2025年部编版新教材语文九年级上册教学计划(含进度表)
- 2025年打字员中级工试题及答案
- 2022.12六级真题第3套答案及详解
- 食堂工作人员食品安全培训
- 测绘项目设备配置方案(3篇)
- 2025年餐厅主管考试题及答案
- 输血反应的早期识别与干预
评论
0/150
提交评论