- 1、本文档共79页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 ARM编程模型与指令集 2.1 ARM编程模型 2.2 ARM处理器的指令系统 2.3 ARM汇编语言编程 2.1.1 ARM的特点 与其他处理器相比,ARM具有以下特点 非常多的通用寄存器 37个 没有硬件堆栈 LOAD/STORE体系 多种处理器工作模式以及影子寄存器 指令等长 ARM作为RISC处理器的特征 RISC的特征 通过Load/Store在寄存器和内存中进行数据传递,数据处理的操作只针对寄存器的内容,而不直接对存储器进行操作。 简单的寻址模式,所有Load/Store的地址都只由寄存器内容和指令域决定 统一和固定长度的指令域,简化了指令的译码 此外,ARM体系结构还提供 每一条数据处理指令都对算术逻辑单元(ALU)和移位器控制,以实现对ALU和移位器的最大利用。 多寄存器装载和存储指令实现最大数据吞吐量 所有指令的条件执行实现了最快速的代码执行 地址自动增加和自动减少的寻址模式实现了程序循环的优化 2.1.2 ARM7TDMI的组成 主要组成部分如下: 寄存器堆:用来存储处理器的状态。它有两个读端口和一个写端口,而R15(程序寄存器)则有三个读端口和一个写端口。 桶形移位器:能使一个操作数移动或循环任意位。 ALU:完成指令集所需要的算术和逻辑功能。 地址寄存器与累加器:选择或使用已有的存储器地址,在需要时产生下一个地址。 数据寄存器:用来暂存输入或传出存储器的数据 指令译码器和控制逻辑。 2.1.2 ARM7TDMI的组成(图) ARM7TDMI的数据流 在一个单循环数据处理指令中,将采用两个寄存器的操作数。B总线上的数据将通过移位与A总线上的数据在ALU中合并,结果被写回寄存器组。 程序寄存器中的值将存进地址寄存器,再从这里放进加法器,加后的值再写回寄存器库中的R15和地址寄存器,作为下一指令的取地址。 2.1.3 ARM7TDMI的三级流水线 取指:从存储器中取出指令并放进指令流。 译码:指令译码,数据控制信号将准备下一个周期。这一阶段,指令拥有译码逻辑,但不拥有数据路径。 执行:指令拥有数据路径;寄存器组被读,一个操作数被移位,ALU产生的结果被写回目标寄存器。 2.1.4 ARM的工作模式 ARM的七种运行模式 特权模式 异常模式 用户和系统模式 2.1.5 ARM的寄存器 ARM有37个32位的寄存器 1个专用的程序计数器 1个专用的当前程序状态寄存器 5个专用的程序状态保存寄存器 30个通用寄存器 每一种处理器模式可以访问 R0-R12寄存器 R13(堆栈指针,SP)和R14(连接寄存器,LR) 程序计数器,R15(PC) 当前程序状态寄存器,cpsr 在特权模式下(除了系统模式)还可以访问 一个特殊的spsr(程序状态保存寄存器) ARM状态各模式下的寄存器 ARM状态各模式下的寄存器 ARM状态各模式下可以访问的寄存器 一般的通用寄存器 R0-R13 一般的通用寄存器(不分组的R0-R7) 一般的通用寄存器(分组的R8-R14) 一般的通用寄存器(分组的R8-R12) 一般的通用寄存器(R13-R14) 堆栈指针寄存器R13(SP) 链接寄存器R14(LR) 寄存器堆与影子寄存器 ARM7TDMI处理器含有31个通用的32位寄存器和6个状态寄存器。一般情况下,只有16个通用寄存器(R0至R15)和1或2个状态寄存器对于程序员来说是可见的。寄存器可用与否取决于处理器的模式。其他的寄存器用于支持IRQ,FIQ,管理,中止和未定义模式而来回切换。 在每一种模式下只有R0-R15,CPSR,SPSR寄存器程序员可见。只有当前处理器工作模式可以访问的寄存器称为影子寄存器。 80X80微处理器没有工作模式之分,自然没有影子寄存器的概念。 内部寄存器 R14(LR)寄存器与子程序调用 内部寄存器 R14寄存器与异常发生 内部寄存器 R14寄存器注意要点 R14寄存器注意要点 R14寄存器注意要点 程序计数器R15(PC) 内部寄存器 读R15的限制 内部寄存器 读R15的限制 内部寄存器 读R15的限制 内部寄存器 写R15的限制 内部寄存器 写R15的限制 程序状态寄存器CPSR 内部寄存器 ARM状态和Thumb状态之间寄存器的关系 Thumb状态寄存器在Arm状态寄存器上的映射 内部寄存器 在Thumb状态中访问高寄存器 程序状态寄存器(CPSR) 条件码标志 N:负数。改变标志位的最后的ALU操作产生负数结果(32位结果的 最高位是1) Z:零。改变标志位的最后的ALU操作产生0结果(32位结果的每一 位都是0)。 C:进位。改变标志位的最后的ALU操作产生到符号位的进位。 V:溢出。改变标志位的最后的ALU操作产生到符号位的进位。 中断禁止位
文档评论(0)