[工学]第四章 ARM汇编程序设计.ppt

  1. 1、本文档共96页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]第四章 ARM汇编程序设计

作业 1. 实现C字符串拷贝(strcopy,r0=srcstr,r1=desstr) 2. 求最大公约数(用ARM汇编语言实现) int gcd(int a, int b) { while(a!=b) { if(ab) a=a-b; else b=b-a; } return a; } 作业 3.将R0中的数据调换顺序 例如: R0 = 0xFF00FF99调换顺序后 R0=0x99FF00FF 4. 编写程序实现19!,将得到的64位结果送入[R9:R8]中 * * C:.text,.data,.bss Linux:ELF, win: PE CoFF * 通过半主机,运行在 ARM? 目标上的代码可以使用运行 RealView? 调试器的主 机上的 I/O 功能。 这些功能包括键盘输入、屏幕输出和磁盘 I/O 等。 半主机是用于 ARM 目标的一种机制,可将来自应用程序代码的输入/输出请求 传送至运行调试器的主机。 半主机是通过一组定义好的软件指令(如 SVC)来实现的,这些指令通过程序 控制生成异常。 * .W 是可选的指令宽度说明符。 有关详细信息,请参阅第4-22 页的 Thumb-2 中的 ADR。 * * * * * * * INCBIN INCBIN 指令在被汇编的文件内包含一个文件。 该文件按原样包含,没有进行汇编。 KEEP KEEP 指令指示汇编器在对象文件的符号表中保留局部符号。 ROUT ROUT 指令标记局部标签的范围边界,使用 ROUT 指令可限制局部标签的范围。 这样就更容易避免意外引用错误的标签。 如果区域中没有 ROUT 指令,则局部标签的范围是整个区域 NOFP NOFP 指令可确保在汇编语言源文件中没有浮点指令。 3. ARM汇编语言伪指令 伪指令 语法格式 作 用 ADR ADR{cond} register , expr 将基于PC或基于寄存器的地址值读取到寄存器中。小范围的地址读取。 ADRL ADRL {cond} register,expr 将基于PC或基于寄存器的地址值读取到寄存器中。中等范围的地址读取。 LDR LDR {cond} register,=[expr | label-expr] 将一个32位的立即数或者一个地址值读取到寄存器中。大范围的地址读取。 NOP NOP 在汇编时将被替换成ARM中的空操作。 ADR ADR 可将一个立即值与 pc 值相加,并将结果写入目标寄存器。 ADR{cond}{.W} Rd,label ADRL 将相对于程序或相对于寄存器的地址载入寄存器中。 与 ADR 指令相似。ADRL 生成两个数据处理指令,因此它比 ADR 加载的地址范围要宽。 ADRL{cond} Rd,label LDR 使用以下项之一加载寄存器: ? 一个 32 位常数值 ? 一个地址 LDR{cond}{.W} Rt, =expr LDR{cond}{.W} Rt, =label_expr 4. ARM汇编程序设计 ARM汇编语言编程的重点 ARM数据处理操作 设置条件码 汇编语言子程序调用及返回 跳转表思想 ARM与Thumb之间的状态转换及函数的相调用 ARM数据处理操作 ARM中数据的处理有以下三种形式: 简单的寄存器操作 立即数操作 寄存器移位操作 其中32位立即数在32位指令中的编码以及ARM特有的寄存器移位操作是数据处理方面的难点。 用移位、逆向减、加实现下列各操作 1.将R0乘以2^n 2.将R0乘以2^n+r0 3.将R0乘以2^n-r0 4.R0 = R0 * 10 + R1 5.R0 = R0 * 100 + R1 mov r0, r0, lsl #n add r0, r0, r0, lsl #n rsb r0, r0, r0, lsl #n add r0, r0, r0, lsl #2 add r0, r1, r0, lsl #1 add r0, r0, r0, lsl #2 add r0, r0, r0, lsl #2 add r0, r1, r0, lsl #2 设置条件码 ARM的任何数据处理指令都能通过增加“S”操作码来设置条件码(N,Z,C和V)。 条件执行 ARM指令集不同寻常的特征是每条指令(除了某些v5T指令)都可以是条件执行的。 条件转移 在程序中可以通过条件码的使用让微处理器决定是否进行转移,还可用来控制循环的退出。 将C代码改写成汇编代码 if( (a==0) || (b==1) ) c = d

文档评论(0)

jiupshaieuk12 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档