ARM 汇编分支结构的小技巧.doc_第1页
ARM 汇编分支结构的小技巧.doc_第2页
ARM 汇编分支结构的小技巧.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARM 汇编分支结构的小技巧最近学了点关于ARM的汇编中分支结构的小技巧,拿出来跟大家分享一下。如果您几百年前就看过了或早就精通了,不要笑话俺,俺是初学者:)如果大家也像偶一样是新手不妨看一下,应该没有坏处.计算r1和r2的绝对值对应的C伪指令为:if ( r1r2 )r0 = r1+r2;elser0 = r1-r2;对应的ARM汇编为:cmp r1, r2subgt r0, r1, r2sublt r0, r2, r1以上条件判断只适合简单的分支结构,复杂的分之结构如何实现呢?比如如下控制逻辑:if ( r1r2 )r0 = r1 - r2;if ( r0r3 )r0 = 1;elser0 = 0;elser0 = r2 - r1;if ( r0r3 )r0 = 1;elser0 = 0;如果还按照上面的思路则很难写出汇编语句,因为ARM只有一个CPSR寄存器,只能存储一次比较结果。对此问题,有如下四种解决思路:( 其中条件 LE 为无符号小于等于GT 为带符号大于EQ 为等于)1.使用跳转语句BEGIF CMP R1, R2BLE ELSE /* 跳到第二分支 */SUB R0, R1, R2CMPGT R0, R3MOVGT R0, #1MOVLE R0, #0B ENDIFELSESUB R1, R2, R1CMPGT R0, R3MOVGT R0, #1MOVLE R0, #0ENDIF说明:跳转语句会影响流水线的执行,所以对速度有严格要求的场合要慎用2.通过MSR和MRS两条指令使用通用寄存器或堆栈直接对CPSR进行操作CMP R1, R2MRSLE R5, CPSR /* 保存CPSR,进入第一个if */SUBGT R0, R1, R2CMPGT R0, R3MOVGT R0, #1MOVLE R0, #0ELSEMSR CPSR, R5SUBLE R0, R2, R1CMP R0, R3MOVGT R0, #1MOVLE R0, #0说明:在很多if嵌套的情况下,可以使用堆栈保存CPSR的值,但应注意对内存的操作速度要慢于寄存器的速度3.通过临时变量记录比较的结果CMP R1, R2MOVLE R5, #1 /*用R5记录状态,用1表示R1 R2 */SUBGT R0, R1, R2CMPGT R0, R3MOVGT R0, #1MOVLE R0, #0ELSECMP R5, #1SUBEQ R0, R1, R2CMPEQ R0, R3MOVGT R0, #1MOVLE R0, #04.跳转

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论