ARM体系结构与编程(第2版)第7章说课.ppt

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM体系结构支持ARM程序和Thumb程序混合使用。本章介绍ARM程序和Thumb程序混合使用时需要的相关技术。 * 7.1 概 述 1.??ARM程序和Thumb程序混合使用的场合 强调速度的场合 有一些功能只有ARM程序能够完成 当处理器进入异常中断处理程序时,程序状态自动切换到ARM状态 ARM处理器总是从ARM状态开始执行 2. 在编译或者汇编时使用选项–apcs/interwork * 7.2 在汇编语言程序中通过用户代码支持interwork 对于C/C++源程序而言,只要在编译时指定-apcs /interwork选项,连接器生成的代码就遵守支持ARM程序和Thumb程序混合使用的ATPCS。而对于汇编源程序而言,用户必须保证编写的代码遵守支持ARM程序和Thumb程序混合使用的ATPCS。 对于汇编程序来说,可以有两种方法来实现程序状态的切换。第一种方法是利用连接器提供的小程序(veneers)来实现程序状态的切换,这时用户可以使用指令BL来调用子程序;另一种方法是用户自己编写状态切换的程序,这种方法编写的程序需要的代码更少,运行的速度更快。本节主要介绍第二种方法。 这里介绍ARM中与这个问题相关的指令、伪操作以及程序设计。 * 7.2.1 可以实现程序状态切换的指令 1. BX指令 2. 第1种格式的BLX指令BLX(1) 3. 第2种格式的BLX指令BLX(2) 4.??LDR、LDM及POP指令用于程序状态的切换 * 7.2.2 与程序状态切换相关的伪操作 ARM汇编器既可以处理ARM指令,也可以处理Thumb指令。这时,通过下面两个伪操作告诉ARM汇编器将要处理的是哪一种指令。 CODE16伪操作:告诉汇编编译器后面的指令序列为16位的Thumb指令。 CODE32伪操作:告诉汇编编译器后面的指令序列为32位的ARM指令。 语法格式 CODE16 CODE32 使用说明 当汇编源程序中同时包含ARM指令和Thumb指令时,使用CODE16伪操作告诉汇编编译器后面的指令序列为16位的Thumb指令;使用CODE32伪操作告诉汇编编译器后面的指令序列为32位的ARM指令。但是,CODE16伪操作和CODE32伪操作只是告诉编译器后面指令的类型,该伪操作本身并不进行程序状态的切换。 * 7.2.3 进行状态切换的汇编程序实例 下面给出一个状态切换汇编程序的例子: 参见教材P255 可以通过下面的步骤来编译和运行上面的例子。 (1) 用文本编辑器将上述代码输入,并保存成文件addreg.s。 (2) 用asm -g addreg.s命令行汇编该程序。 (3) 用armlink addreg.o -o addreg命令行连接生成映像文件。 (4) 用armsd addreg加载该映像文件。 (5) 通过step单步跟踪该程序。 * * 7.3 在C/C++程序中实现interwork 1. 需要考虑interwork的场合 如果C/C++程序中包含需要返回到另一种程序状态的子程序,需要在编译该C/C++程序时指定选项-apcs /interwork。 如果C/C++程序间接地调用另一种指令系统的子程序,或者C/C++程序中地虚函数调用另一种指令系统的子程序时,需要在编译该C/C++程序时指定-apcs /interwork选项。 如果调用者程序和被调用的程序是不同指令集的,而被调用者是non-interwork代码,这时,不要使用函数指针来调用该被调用程序。总地来说,当程序中包含了Thumb指令和ARM指令时,使用函数指针时,要特别注意。 如果在连接时目标文件中包含了Thumb程序,这时,连接器会选择Thumb C/C++库进行连接。 通常情况下,如果不能肯定程序中不进行程序状态切换,使用编译选项-apcs /interwork来编译程序。 * 7.3 在C/C++程序中实现interwork 2. 编译选项-apcs /interwork的作用 当C/C++程序中包含了程序状态切换时,可以在编译时指定编译选项-apcs /interwork,格式如下: tcc -apcs /interwork armcc -apcs /interwork tcpp -apcs /interwork armcpp -apcs /interwork 3.??C语言的interwork实例 参见教材P258 * 7.4 在汇编语言程序中通过连接器支持interwork 7.2节中,介绍了用户在汇编程序中如何编写实现程序状态切换的代码。本节介绍利用连接器生成的代码段实现在汇编程序之间以及汇编程序和C/C++程序之间实现程序状态的切换。 通常,将连接器生成的用于程序状态切换的代码段称为veneer

文档评论(0)

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

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

1亿VIP精品文档

相关文档