arm体系结构清华第2章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* {!}为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。 基址寄存器不允许为R15,寄存器列表可以为R0~R15 的任意组合。 {^}为可选后缀,当指令为LDM且寄存器列表中包含R15,选用该后缀时表示:除了正常的数据 传送之外,还将SPSR 复制到CPSR。 * 注意事项: 指令中寄存器和连续内存地址单元的对应关系:编号低的寄存器对应内存低地址单元,编号高的寄存器对应内存高地址单元。 * 内存操作 LDM/STM在实现寄存器组和连续的内存单元中数据传递时,地址的变化方式(addr_mode)有以下四种类型: 后增IA (Increment After) :每次数据传送后地址加4; 先增IB (Increment Before) :每次数据传送前地址加4 ; 后减DA (Decrement After) :每次数据传送后地址减4 ; 先减DB (Decrement Before) :每次数据传送前地址减4 ; * 它们与指令编码中P、U的对应关如下表所示: addr_mode P U D A 0 0 I A 0 1 D B 1 0 I B 1 1 * 堆栈操作 ARM里常用R13作为栈指针(SP),总是指向栈顶。 根据堆栈指向位置的不同可以将堆栈分为满堆栈和空堆栈: 满堆栈(Full Stack): 当堆栈指针SP指向最后压入堆栈的数据时; 空堆栈(Empty Stack): 当堆栈指针SP指向下一个将要放入数据的空位置时; * 堆栈操作 根据堆栈的生成方式,又可以分为递增堆栈和递减堆栈: 递增堆栈(Ascending Stack) : 当堆栈由低地址向高地址生成时; 递减堆栈(Decending Stack) : 当堆栈由高地址向低地址生成时; ARM堆栈的组织形式是“满栈降”的形式。 * 满递增堆栈FA 满递减堆栈FD 空递增堆栈EA 空递减堆栈ED * 块拷贝与栈操作的对应关系 * LDMIA R0,{R5-R8}; STMFD R13!,{R0,R4-R12,LR} ; 将寄存器列表中的寄存器(R0,R4 到R12,LR)存入堆栈。 LDMFD R13!,{R0,R4-R12,LR} ; 将堆栈内容恢复到寄存器(R0,R4 到R12,LR)。 栈顶 * 总结 ARM指令集分类 ARM指令的条件码 数据处理指令的寻址方式 立即数 寄存器 寄存器移位 字及无符号字节的L/S指令 I、P、U、B、W、L 杂类L/S指令 P、U、I、W、L、S、H 批量L/S指令 P、U、S、W、L IA、IB、DA、DB FD、ED、FA、EA * 思考与练习题 在ARM指令中,什么是合法的立即数?判断下面各立即数是否合法,如果合法则写出在指令中的编码格式(也就是8位常数和4位的移位数)。 0x5430 0x108 0x304 0x501 0xfb10000 0x334000 0x3FC000 0x1FE0000 0x5580000 0x7F800 0x39C000 0x1FE80000 * Rs[7:0]=32时指令的操作数为0,因为Rm是32位的。 当Rs[7:0]=32时,指令的操作数shifter_operand为0,循环器的进位值为Rm[0]; 当Rs[7:0]32时,指令的操作数shifter_operand为0,循环器的进位值为0。 * 偏移量方法 :计算操作数的地址,执行指令,不更新基址寄存器 事先更新方法 :计算操作数地址,执行指令,再更新基址寄存器 事后更新方法:操作数的地址为基址寄存器的值,执行指令,再计算新地址更新基址寄存器 * 22位 I = 1 * 满栈:前变址 * 0x108 15 * 算术右移2 语法格式:Rm,ASL Rs 指令编码格式 移位的位数由Rs的最低8位bits[7:0]决定,但有效移位的范围为0 = Rs[7:0] 31位,Rs[7:0]=32时指令的操作数为0。 当R15用作Rn、 Rm、Rd及Rs时,会产生不可预知的结果。 * 循环右移1 语法格式:Rm,ROR #shift_imm 指令编码格式 shift _imm为5位,shift _imm=0时,将执行RRX操作。 进行移位操作后,从寄存器右端移出的位又插入到寄存器左端空出的位。 注:当R15用作第1个源操作数Rn或第2个操作数Rm时,操作数即为当前指令地址加常数8。 * 循环右移2 语法格式:Rm,ROR Rs 指令编码格式 移位的位数由Rs的最低8位bits[7:0]决定,但有效移位的范围为0 = Rs[7:0]

文档评论(0)

精品家园 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档