- 1、本文档共62页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
32位嵌入式微处理器ARM
嵌入式系统及应用 32位嵌入式微处理器ARM(2) 指令体系 为什么需要了解汇编指令集 ARM和Thumb指令集被设计用来得出最好的编译器输出 尤其是Thumb指令集 对于很多系统来说,设计上的绝大部分努力将关注的焦点集中在被编译的代码上,而指令集的知识是不必要的 但是…… 嵌入式系统需要初始化代码和中断例程 所有的系统都需要调试 –很有可能是在汇编指令这一级的 通过编写汇编的处理例程可使系统的性能提高 ARM体系的有些特性对编译器是无效的 主要内容 v4T 架构 v5TE 架构 v6 架构 Thumb 条件执行和标志位 通过在指令后加上合适的条件标志位,ARM指令可以条件执行 通过减少前向的分支数目,增强了指令的代码密度和指令性能 CMP r0, r1 ADDGT r2, r2, #1 ADDLE r3, r3, #1 默认情况下,数据处理指令不会影响条件标志位,但是,可在指令后加“s”(或其它条件位)后缀,以实现标志位的置位。 loop ADD r2, r2, r3 SUBS r1, r1, #0x01 BNE loop 条件执行的例子 指令条件码 可能的指令条件码如下所示 注意: AL 是默认的,不需要被特别指出。 数据处理指令 由以下指令组成 : 算术运算: ADD ADC SUB SBC RSB RSC 逻辑运算: AND ORR EOR BIC 比较运算: CMP CMN TST TEQ 数据传送: MOV MVN 这些指令仅对存放于寄存器的数据操作,对内存数据是无效的. 语法: Operation{cond}{S} Rd, Rn, Operand2 第二个操作数可以为一个寄存器或者一个立即数 SUB r0, r1, r2 AND r1, r4, #0xFF 比较指令仅仅设置了条件标志位 –无需指定Rd CMP r0, r3 数据传送指令并不指定Rd MOV r0, r1 第二个操作数通过桶型移位器传输到ALU 第二个操作数 寄存器方式, 可附加移位操作 移位的值可为以下的两种: 5位的无符号整数(0-31) 其它寄存器的最低字节 用来实现乘以一个常数 ADD r0, r5, r5 LSL 1 ? r0 = r5 x 3 立即数 范围在 0-255的8位立即数 或者该8位立即数循环右移偶数位得到的数 允许32位的常数直接加载到寄存器中 移位操作 以下的移位操作是数据处理指令的一部分. 移位的范围为0-31位,对指令的性能不会造成太大的影响 立即数常数 ARM 指令不能包含一个 32位的立即数常数 ARM 指令都是32 位定长的 在数据处理指令的格式中,第二个操作数有12位来对应 4 位的移位数乘以2组成了步长,范围在0-30的移位值 立即数法则: “8 位的常数循环右移偶数位得到” 加载32位的常数 为了加载更大的立即数, 汇编器提供了伪指令: LDR rd, =const 这将: 产生一条 MOV 或者 MVN 指令 或者 产生一条 PC相对寻址的LDR 指令将立即数从literal pool (嵌入在代码中的常数域)里读出来 举例 LDR r0, =0xFF = MOV r0, #0xFF LDR r0, =0= LDR r0, [PC, #Imm12] … … DCD 0推荐用这种方式将常数加载到寄存器 乘法和除法 有两类乘法 -分别产生 32位和 64位 的结果 32位的这类乘法在 ARM7TDMI 会执行 2- 5 时钟周期 MUL r0, r1, r2 ; r0 = r1 * r2 MLA r0, r1, r2, r3 ; r0 = (r1 * r2) + r3 64位的乘法提供了两种乘法指令:无符号和有符号乘 对于这类指令他们有两个目标寄存器 [U|S]MULL r4, r5, r2, r3 ; r5:r4 = r2 * r3 [U|S]MLAL r4, r5, r2, r3 ; r5:r4 = (r2 * r3) + r5:r4 大多数的 ARM 核不提供整数除法指令 除法操作由c的库函数例程或者移位操作实现 分支指令 分支跳转指令有如下的格式: B{L}{cond} label 子函数调用可加上 {L}实现 在指令编码中,存在一个 24 位的地址域 在执行时它被左移两位 (因为 ARM 指令是字对齐的),产生一个26位的偏移地址,由此可知跳转的范围大体在-32MB~+32MB之间 引起了流水线清空
您可能关注的文档
最近下载
- 电子部超级说服力.pdf VIP
- 地方化债又出新规:从35、47、14号文到134号文.docx
- (完整word版)学前教育专业简笔画教案.doc
- 《运筹学》课程教学大纲(本科).docx VIP
- 公路工程监理资料管理.ppt
- 华中农业大学 614微生物学 2016年考研真题.pdf VIP
- 参考学习资料 附件1:国铁集团工电部关于新建西至华中地区铁路煤运通道线名运营里程线路允许速度的函(审签稿).docx
- (新版)拖拉机驾驶证科目一知识考试题库500题(含答案).docx
- 人教部编2024年新改版语文五年级上册全套月考试题及答案(共4套).pdf VIP
- 17小学语文《盼》课件(共40张PPT).pptx VIP
文档评论(0)