第2章3-ARM汇编程序设计.pptVIP

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章3-ARM汇编程序设计

在ARM嵌入式系统中,一般用C语言等高级语言对各个应用接口模块功能的实现进行程序设计,但在某些地方用汇编语言更方便、简单。 在一些关键部分,例如用来初始化电路以及用来为软件(高级语言编写)做运行前准备的启动代码必须用汇编语言编写。 汇编语言的代码效率很高,一般用于对硬件的直接控制。 例 5 实现整数除法,整数用补码表示。先将被除数和除数高位对齐,如果够减上商1,并减去除数;否则上商0。然后右移除数1位,重复上述操作。 .global _start .macro mCLZ Rd, Rs @ 求一个数的前导0个数 MOV \Rd, #0 @ 在某些ARM中,可使用指令CLZ代替 __mCLZ_L1: TST \Rs, #0 ADDEQ \Rd, \Rd, #1 MOVEQ \Rs, \Rs, ROR #31 @ 左移一位 BEQ __mCLZ_L1 MOV \Rs, \Rs, LSR \Rd .endm .macro mUNSIGN Rd, Rs @ 将一个数无符号化 TST \Rs, #0@ 将无符号的整数放到Rs中 EORNE \Rd, \Rd, #1 @ 将符号部分放到Rd中 MVNNE \Rs, \Rs ADDNE \Rs, \Rs, #1 .endm .text _start: LDR R0, =-123456 @ 被除数 LDR R1, =523 @ 除数 Div: MOV R6, #0 @ 结果的符号位 mUNSIGN R6, R0 @ 无符号化 mUNSIGN R6, R1 MOV R5, #0 @ 商 CMP R0, R1 @ 如果被除数小于除数 BLT Division_L2 @ 直接商0 mCLZ R3, R1 @ 判断除数位数,确定移位情况 SUB R3, R3, #1 MOV R1, R1, LSL R3 Division_L1: MOV R5, R5, LSL #1 CMP R0, R1 @ 判断是否够减 SUBGT R0, R0, R1 @ 如果够减,做减法,上商1 ORRGT R5, R5, #1 SUBS R3, R3, #1 MOVCS R1, R1, LSR #1 BCS Division_L1 Division_L2: TST R6, #1 @ 处理结果的符号 MVNNE R5, R5 ADDNE R5, R5, #1 Division_F: MOV R1, R0 MOV R0, R5 例 6 用Thumb指令实现内存数据区块拷贝操作。 .global _start .equ NUM, 18 @设置要复拷贝的字数 .text _start: .arm MOV SP, #0x9000 ADR R0, Thumb_start + 1 BX R0 .thumb Thumb_start: LDR R0, =Src @R0 = 源数据区指针 LDR R1, =Dst @R1 = 目标数据区指针 MOV R2, #NUM LSR R3, R2, #2 @获得块拷贝的次数 BEQ Copy_Words PUSH {R4-R7} @保存将要使用的寄存器R4-R7 Copy_4Word: @进行块拷贝,每次拷贝4个字 LDMIA R0!, {R4-R7} STMIA R1!, {R4-R7} SUB R3, #1 BNE Copy_4Word POP {R4-R7} @恢复寄存器R4-R7 Thumb_start: @将剩余的数据区以字为单位拷贝 Copy_Words: MOV R3, #3 AND R2, R3 @获得剩余的数据的字数 BEQ Stop Copy_Word: LDMIA R0!, {R3} STMIA R1!, {R3} SUB R2, #1 BNE Copy_Word Stop: B Stop .ltorg Src: .long 1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF,0x10,0x11,0x12 Dst: .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .end

文档评论(0)

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

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

1亿VIP精品文档

相关文档