网站大量收购独家精品文档,联系QQ:2885784924

第5章ARM编程基础(2016年3月4日)分解.ppt

  1. 1、本文档共113页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
共113页 * 例: void enable_IRQ(void) { int tmp; _ _asm //声名内联汇编代码 { MRS tmp, CPSR BIC tmp, tmp, #0x80 MSR CPSR_c, tmp } } 共113页 * 汇编语句块中,如果有两条指令占据了同一行,那么必须用分号“ ;”将它们分隔。如果一条指令需要占用多行,那么必须用反斜线符号“ \ ”作为续行符。 可以在内联汇编语言块内的任意位置使用 C/C++ 格式的注释。 共113页 * 内联汇编代码中定义的标号可被用作跳转或C/C++ goto 语句的目标,同样,在C/C++代码中定义的标号,也可被用作内联汇编代码跳转指令的目标。 2、内联汇编的限制 内联汇编 与 真实汇编 之间有很大区别,会受到很多限制。 (1)它不支持 Thumb 指令;除了程序状态寄存器 PSR 之外,不能直接访问其他任何物理寄存器等; 共113页 * (2)如果在内联汇编程序指令中出现了以某个寄存器名称命名的操作数,那么它被叫做虚拟寄存器,而不是实际的物理寄存器。编译器在生成和优化代码的过程中,会给每个虚拟寄存器分配实际的物理寄存器,但这个物理寄存器可能与在指令中指定的不同。唯一的一个例外就是状态寄存器 PSR ,任何对 PSR 的引用总是执行指向物理 PSR; 共113页 * (3)在内联汇编代码中不能使用寄存器 PC(R15)、LR(R14)和SP(R13),任何试图使用这些寄存器的操作都会导致出现错误消息; (4)鉴于上述情况,在内联汇编语句块中最好使用 C 或 C++ 变量作为操作数; 共113页 * (5)虽然内联汇编代码可以更改处理器模式,但更改处理器模式会禁止使用 C 操作数或对已编译 C 代码的调用,直到将处理器模式恢复为原设置之后。 共113页 * 5.5.2 嵌入式汇编 嵌入式汇编程序是一个编写在C程序外的单独汇编程序,该程序段可以像函数那样被 C 程序调用。 与内联汇编不同,嵌入式汇编具有真实汇编的所有特性,数据交换符合 ATPCS 标准,同时支持 ARM 和Thumb,所以它可以对目标处理器进行不受限制的低级访问。但是不能直接引用 C/C++ 的变量。 共113页 * 用 _ _asm 声明的嵌入式汇编程序像 C 函数那样可以有参数和返回值。定义一个嵌入式汇编函数的语法格式为: _ _asm return–type function–name(parameter-list) { 汇编程序段 } 注:ADS环境中不能使用嵌入式汇编。 共113页 * return–type:函数返回值类型,C语言中的数据类型; 嵌入式汇编在形式上看起来就像使用关键字 _ _asm 进行了声明的函数,如下所示: function–name:函数名; parameter-list:函数参数列表。 共113页 * _ _asm int add(int i, int j) { ADD R0, R0, R1 MOV PC, LR } 参数名只允许使用在参数列表中,不能用在嵌入式汇编函数体内。如下面定义的嵌入式汇编程序是错误的。 共113页 * _ _asm int f(int i) { ADD i, i, #1 //错误 MOV PC, LR } 按 ATPCS 规定,应该使用寄存器 R0 来代替 i。 共113页 * 在 C 程序中调用嵌入式汇编程序的方法与调用 C 函数的方法相同。 void main() { printf(“12345 + 67890 =%d\n”,add(12345,67890)); } 灵活地使用内联汇编和嵌入式汇编,有助于提高程序效率。 共113页 * 5.5.3 内联汇编代码与嵌入式汇编代码之间的差异 1、内联汇编代码使用高级处理器抽象,并在代码生成过程中与 C 和 C++代码集成。因此编译程序将 C 和 C++代码与汇编代码一起进行优化; 2、与内联汇编代码不同,嵌入式汇编代码从 C 和 C++ 代码中分离出来单独进行汇编,产生与 C 和 C++ 源代码编译对象相结合的编译对象; 共113页 * 3、可通过编译程序来内联汇编代码,但无论是

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档