第3章 ARM微处理器指令系统4-ARM指令应用举例.pptVIP

第3章 ARM微处理器指令系统4-ARM指令应用举例.ppt

  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文档。上传文档
查看更多
第3章 ARM微处理器指令系统4-ARM指令应用举例

Assemble Language of ARM 3.5? 基本ARM指令的应用 算术逻辑运算指令的应用 跳转指令的应用 Load/store指令的应用 批量load/store指令的应用 信号量指令的应用 与系统相关的一些指令的应用 3.5.1 算术逻辑运算指令的应用 1. 位操作指令应用 将r2中的高8位数据传送到r3的低8位中 MOV R0, R2, LSR #24 ORR R3, R0, R3, LSL #8 2. 实现乘法的指令段 MOV R0, R0, LSL #1 ;2*R0 ADD R0, R0, R0, LSL #1 ;3*R0 RSB R0, R1, R0, LSL #2 ;4*R0-R1 MOV R0, R0, LSL #n ;2n*R0 ADD R0, R0, R0, LSL #n ;(2n+1)*R0 RSB R0, R0, R0, LSL #n ;(2n-1)*R0 3. 64位数据运算 R0,R1存放64位数据的低32位和高32位;R2,R3存放64位数据的低32位和高32位: ADDS R0, R0, R2 ADC R1, R1, R3 ;64位加法 SUBS R0, R0, R2 SBC R1, R1, R3 ;64位减法 CMP R1, R3 CMPEQ R0, R2 ;64位数据比较 4. 内存中数据存储方式的转换 big endian little endian R0=ABCD R0=DCBA EOR R1, R0, R0, ROR #16 ;R1=A^C, B^D, C^A, D^B BIC R1, R1, #0xFF0000 ;R1=A^C, 0, C^A, D^B MOV R0, R0, ROR #8 ;R0= D, A, B, C EOR R0, R0, R1, LSR #8 ;LSR: 0, A^C, 0, C^A ;R0= D, C, B, A MOV R2, #0xFF ;R2=0xFF ORR R2, R2, #0xFF0000 ;R2=0x00FF00FF AND R1, R2, R0 ;R1= 0 B 0 D AND R0, R2, R0, ROR #24 ;R0= 0 C 0 A ORR R0, R0, R1, ROR #8 ;R0= D C B A 3.5.2 跳转指令的应用 1. 子程序调用 BL指令在指令跳转操作的同时保存当前PC寄存器值,用于从被调用的子程序中返回。 ;…… BL function_name SUB R2,R1,R0 ;…… function_name ;…… MOV PC, LR 2. 条件执行-最大公约数 最大公约数C语言代码: int gcd (int a, int b) { while (a ! = b) if (a b) a = a - b; else b = b - a; return a; } 最大公约数ARM汇编代码: gcd cmp r0, r1 ;reached the end? beq stop blt less ;if r0 r1 sub r0, r0, r1 ;subtract r1 from r0 b gcd less sub r1, r1, r0 ;subtract r0 from r1 b gcd stop ;…… 最大公约数ARM汇编代码(条件执行): 代码执行前r0中存放a,r1中存放b;代码执行后r0中存放a和b的最大公约数: gcd CMP R0, R1 SUBGT R0, R0, R1 SUBLT R1, R1, R0 BNE gcd MOV PC, LR 3. 条件判断语句(C语言代码) if (a == 0 || b == 1) c= d + e; 代码执行前r0中存放a,r1中存放b;代码执行后r2中存放d和e的和: CMP R0, #0 CMPNE R1, #1 ADDEQ R2, R3, R4 4. 循环语句 对于一个for或while循环: MOV R0, #loopcount ;初始化计数器 loop ;…… SUBS R0, R0, #1 ;计数器的更新及CPSR的更新 BNE loop ;…… 5. 多路分支程序语句 代码根据maxindex的不同值跳转不同的代码段,这里要求各目标代码段的大小都为2RoutineSizeLog2: CMP R0, #maxindex ;R0

文档评论(0)

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

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

1亿VIP精品文档

相关文档