第5章ARM Cortex-M3指令系统.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文档。上传文档
查看更多
IF-THEN指令 例 用IT 指令优化C 代码 C伪代码 if (R0==R1) { R3 = R4 + R5; R3 = R3 / 2; } else { R3 = R6 + R7; R3 = R3 / 2; } IT指令优化: CMP R0, R1 ; 比较R0 和R1 ITTEE EQ ; 如果 R0 == R1, Then-Then-Else-Else ADDEQ R3, R4, R5 ; 相等时加法 ASREQ R3, R3, #1 ; 相等时算术右移 ADDNE R3, R6, R7 ; 不等时加法 ASRNE R3, R3, #1 ; 不等时算术右移 ITxyz cond ;围起4 条指令的IF-THEN 块 x, y, z可以是“T”或者“E” 第5章ARM Cortex-M3指令系统 1 2 CM3指令系统概述 CM3的一些特殊指令 DMB 在双口RAM 以及多核架构的操作中很有用。如果RAM 的访问是带缓冲的,并且 写完之后马上读,就必须让它“喘口气”——用DMB 指令来隔离,以保证缓冲中的数据已 经落实到RAM 中。DSB 比DMB 更保险(当然也是有执行代价的),它是宁可错杀也不漏网 ——任何它后面的指令,不管要不要使用先前的存储器访问结果,通通清洗缓冲区。大虾们 可以在有绝对信心时使用DMB,新手还是保险点好。 同DMB/DSB 相比,ISB 指令看起来似乎最小白。不过它还有其它的用场——对于高级底 层技巧:“自我更新”(self‐mofifying)代码,非常有用。举例来说,如果某个程序从下一条要 执行的指令处更新了自己,但是先前的旧指令已经被预取到流水线中去了,此时就必须清洗 流水线,把旧版本的指令洗出去,再预取新版本的指令因此,必须在被更新代码段的前面使用ISB,以保证旧的代码从流水线中被清洗出去,不再有机会执行。 * * 第5章ARM Cortex-M3指令系统 1 2 CM3指令系统概述 CM3的一些特殊指令 1. CM3指令系统概述 从VT4的ARM7TDMI开始,ARM处理器一直同时支持两种独立的指令集: ARM指令集,在ARM态执行; Thumb指令集,Thum态执行; 执行此两种指令时,处理器需要在ARM与Thumb两种状态间切换; 到了V6,产生了Thumb-2指令集,其是16位Thumb的一个超集,在此指令集中,16位与32位指令首次并存。 1. CM3指令系统概述 1. CM3指令系统概述 Cortex-M3是第一个支持Thumb-2的处理器,它不支持传统的ARM指令。 1. CM3指令系统概述 传统16位Thumb 和32位ARM是两个独立的指令集,具有各自的语法,需用各自的编译器进行编译。 AREA Example8,CODE,READONLY ENTRY CODE32 ARM_CODE ADR R0,THUMB_CODE+1 BX R0 ; 跳转并切换处理器状态 ? CODE16 THUMB_CODE MOV R0,#10 ; R0 = 10 MOV R1,#20 ; R1 = 20 ADD R0,R1 ; R0 = R0+R1 B . END 1. CM3指令系统概述 统一汇编语言语法(UAL) CM3统一汇编语言语法(UAL)统一了Thumb‐2指令集中的16位与32位指令的语法格式,允许开发者以相同的语法格式书写这两种不同长度的指令,并且由汇编器来决定是使用16 位指令,还是使用32 位指令。 1. CM3指令系统概述 例如原16位Thumb指令: ADD R0, R1 AND R0, R1 使用UAL语法后写为: ADDS R0, R0, R1 ANDS R0, R0, R1 使用UAL 语法后,其书写格式与32位指令相同,也必须加S 后缀才会更新状态寄存器 1. CM3指令系统概述 在Thumb‐2 指令集中,有些操作(如R0=R0+1)既可以由16 位,也可以由32 位指令完成。在UAL 下,你可以让汇编器决定用哪个,也可以手工指定是用16 位还是32 位指令来完成。例如: ADDS R0, #1 ;由汇编器决定(汇编器将为了节省空间通常会使用16 位指令) ADDS.N R0, #1 ;指定使用16 位指令(N=Narrow) ADDS.W R0, #1 ;指定使用32 位指令(W=Wide 1. CM3指令系统概述 AND Rd, Rn ; Rd = Rn AND.W Rd, Rn, #imm12 ; Rd = Rn imm12 AND.W Rd, Rm, Rn ; Rd = Rm Rn ORR Rd, Rn ; Rd |= Rn ORR.W Rd, Rn, #imm12

文档评论(0)

yigang0925 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档