基于ARM及Thumb指令集.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM及Thumb指令集 课程安排 ARM指令集 Thumb指令集 v5TE体系结构扩展 ARM指令编码格式 说明 Cond 指令执行的条件编码 Opcode 指令操作符编码 S 决定指令的操作是否影响CPSR的值 Rd 操作目标寄存器编码 Rn 包含第一操作数的寄存器编码 Shifter_operand 表示第二操作数 条件执行及标志位 ARM指令可以通过添加适当的条件码后缀来达到条件执行的目的。 这样可以提高代码密度,减少分支跳转指令数目,提高性能。 CMP r3,#0 CMP r3,#0 BEQ skip ADDNE r0,r1,r2 ADD r0,r1,r2 skip 默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位。 CMP不需要增加 “S”就可改变相应的标志位。 loop … SUBS r1,r1,#1 BNE loop Condition Codes 下表为所有可能的条件码: 注意:AL为默认状态,不需要单独指出 条件执行示例 一系列的指令都使用条件指令 if (a==0) func(1); CMP r0,#0 MOVEQ r0,#1 BLEQ func 置标志位,再使用不同的条件码 if (a==0) x=0; if (a0) x=1; CMP r0,#0 MOVEQ r1,#0 MOVGT r1,#1 使用条件比较指令 if (a==4 || a==10) x=0; CMP r0,#4 CMPNE r0,#10 MOVEQ r1,#0 分支指令 Branch : B{cond} label Branch with Link : BL{cond} subroutine_label 处理器把偏移量左移两位,进行符号扩展后再与PC相加 跳转范围:± 32 Mbyte 如何执行长跳转? 数据处理指令 包括: 算术指令: ADD ADC SUB SBC RSB RSC 逻辑指令: AND ORR EOR BIC 比较指令: CMP CMN TST TEQ 数据搬移: MOV MVN 上述指令只能对寄存器操作,不能针对存储器。 语法: 操作{cond}{S} Rd, Rn, Operand2 只有比较指令影响标志位 -不指定Rd 数据搬移不指定Rn 第二个操作数通过桶型移位器送到ALU中。 桶型移位器 桶型移位器: 第二个操作数 寄存器, 可选择是否增加移位操作. 移位值可以是: 5 bit 无符号整数 放在另一个寄存器的低字节 用于常数乘法 立即数 8 bit ,大小范围0-255。 右移偶数位 允许直接加载32-bit 常数到寄存器中。 立即数 (1) 没有任何一条ARM 指令可包括一个32 bit的立即数 所有的ARM指令都是32 bits固定长度 数据处理指令格式中,第二个操作数有12位 4 bit 移位值 (0-15)乘于2,得到一个范围在0-30,步长为 2的移位值。 记住一条准则: “最后8位一定要移动偶数位”. 立即数 (2) Examples: 下列命令中,汇编器把立即数转换为移位操作: MOV r0,#4096 ; uses 0x40 ror 26 ADD r1,r2,#0xFF0000 ; uses 0xFF ror 16 也可使用 MVN来进行位反转: MOV r0, #0xFFFFFFFF ; assembles to MVN r0,#0 使用无法用上述方法生成的数据,将产生错误 。 装载32 bit常数 为允许装载大常数,汇编器提供了一条伪指令: LDR rd, =const 它可能汇编成下列指令: MOV or MVN。 或 LDR 指令,从数据池(Literal pools)读取常数。 For example LDR r0,=0xFF = MOV r0,#0xFF LDR r0,=0= LDR r0,[PC,#Imm12] … … DCD 0推荐使用这种方法把常数装入寄存器 。 Quiz #1 1. 写一条 ARM 指令,分别完成下列操作: a) r0 = 16 b) r0 = r1 / 16 (带符号的数字) c) r1 = r2 * 3 d) r0 = -r0 2. 下面哪些立即数是数据处理指令中有效的数据?

文档评论(0)

aa15090828118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档