- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章ARM体系结构-V3-指令集20150927分析
位操作指令应用 ;将R2中高8位数据传送到R3的低8位中。 MOV R0, R2, LSR #24 ORR R3, R0, R3, LSL #8 用移位实现乘法应用 MOV R0, R0, LSL #n ; R0=R0n; R0=R0*(2**n) ADD R0, R0, R0, LSL #n ; R0=R0+R0*(2**n) RSB R0, R0, R0, LSL #n ; R0= R0*(2**n) - R0 64位数据加减运算应用 ;假设,R1R0存放一个64位数据,R3R2存放另一个64位数据。 64位数据加法运算 ADDS R0, R0, R2 ADC R1, R1, R3 64位数据减法运算 SUBS R0, R0, R2 SBC R1, R1, R3 数据变换应用 ;已知:R0=A B C D, 转换目标:R0= D C B A 程序一: 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 ;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 条件执行举例 ;求最大公约数 C语言代码: int gcd (int a, int b) { while (a != b) if ( a b ) a = a – b; else b = b – a; return a; } 对应的ARM代码段:R0=a, R1=b gcd CMP R0, R1 ;比较a和b大小 SUBGT R0, R0, R1 ;if (ab) a=a-b (if a= = b do nothing) SUBLT R1, R1, R0 ;if (ba) b=b-a (if a= = b do nothing) BNE gcd ;if (a!=b) then-跳转到gcd处继续执行 MOV PC, LR ;子程序结束,返回 条件判断语句 C语言代码: if ( a = = 0 || b = = 1) c = d + e ; 对应的ARM代码段: CMP R0, #0 ;判断R0是否等于0 CMPNE R1, #1 ;如果R0不等于0,判断R1是否等于1 ADDEQ R2, R3, R4 ;R0=0或R1=1时,R2=R3+R4 循环语句 MOV R0, #loopcount Loop …… SUBS R0, R0, #1 BNE loop 复习题 1. 编写1+2+3+…+100的汇编程序。 2. 如何实现128位数的减法,举例说明。 3. 将存储器中起始地址M1处的4个字数据移动到地址M2处。 4. 参考CPSR寄存器中各标志位的含义,使处理器工作于系统模式。 5. 用跳转指令实现两段程序间的来回切换。 * 下一指令在内存中或者逊尼存储系统中; 操作数可位于:主存或虚存;寄存器;I/O设备 中。 数据处理指令10 10.MLA 32位乘加指令 格式:MLA{cond}{S} Rd,Rn,op2,op3; 功能:Rd=Rn×op2+op3 op2和op3必须为寄存器。Rn、op2和op3的值为32位的有符号数或无符号数。 例如: MLA R0,R1,R2,R3 ;R0=R1×R2+R3 数据处理指令11 11.SMULL 64位有符号数乘法指令 格式: SMULL{cond}{S} Rdl,Rdh,Rn,op2; 功能:Rdh Rdl=Rn×op2 Rdh、Rdl和op2均为寄存器。Rn和op2的值为32位的有符号数。 例如: SMULL R0,R1,R2,R3 ;R0=R2×R3的低32位 ;R1=R2×R3的高32位 数据处理指令12 12.SMLAL 6
文档评论(0)