第二部分习题答案_第1页
第二部分习题答案_第2页
免费预览已结束,剩余4页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章1、ARM 处理器的特点是什么?答:ARM 处理器立足于嵌入式市场,其设计思想并不单纯地追求处理器速度,而是着 眼于系统的整体性能。具体来讲,主要包括以下几个方面。首先,低功耗是一个主要的考虑方面。其次,高代码密度是嵌入式系统的又一个重要 需求。另外,嵌入式系统通常都是价格敏感的。还有一个影响嵌入式系统性能的因素就是处理器内核管芯(die)的面积,对于一个单片方案,处理器内核所占的面积越小,留给外设 电路的空间就越大,这可以减少最终产品的外围芯片数目,从而降低设计和制造成本。在体系结构方面,ARM 处理器采用精简指令系统计算机( RISC)结构,但 ARM 处理 器又不是纯粹的 RISC

2、。为了能够更好地满足嵌入式应用的需求,ARM 处理器还增加了以下特点:一些特定指令的周期数可变,即并不是所有的ARM 指令都是单周期的。内嵌桶形移位器产生了更为复杂的指令。Thumb 16 位指令集。条件执行。这个特性可以减少分支指令的数目,从而改善性能,提高代码密度。2、ARM 处理器系列主要包括几大类?各自的特性是什么?ARM 处理器系列属性的比较类型 属性、ARM7ARM9ARM9EARM10EARM11Cortex处理器流 水线深度3556813典型频率(MHz)2362504705406201100典型功耗(mw/MHz)0.030.25(+cache)0.235(+cache)0.

3、45(+cache)0.6(+cache)0.45(+cache)性能(MIPS)Dhryst one 2.11303003004006752000典型的指 令集结构ARMv3ARMv4TARMv5TEARMv5TEJARMv6ARMv73、ARM 处理器有哪些处理器模式? 各自如何切换?答:ARM 处理器有 7 种处理器模式,它们分别是:用户模式,快速中断模式,外部中断模 式,管理模式,中止模式,未定义模式和系统模式。各模式之间的切换,可以通过软件控制 来实现,也可以由外部中断或异常而引起。处理器复位之后,首先进入管理模式,操作系统内核通常处于这种模式。当运行用户 程序时,进入用户模式。在用

4、户模式下,应用程序不能访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换,只允许对CPSR (当前程序状态寄存器)的控制域进行读操作,但允许对 CPSR 条件标志的读/写访问,用户模式下执行软中断指令(SWI) 时也进入管理模式。系统模式是一种特殊的用户模式,它使用和用户模式完全相同的寄存器,但允许对 CPSR 的完全访问,当操作系统任务需要访问系统资源但又想避免访问与异常模式 相关的寄存器时进入该模式。当处理器访问存储器失败时,进入中止模式。当处理器遇到没有定义的指令或处理器不支持该指令时,进入未定义模式。快速中断模式和外部中断模式分别对 ARM 处理器两种不同级别的中

5、断做出响应。4、“字节序”是指什么? ARM 处理器如何解决这一问题?答:当把一个多字节的数据存入以字节为单位编址的内存空间时, 存在哪个字节定位在哪个 地址单元的问题,在存储系统中称为字节序。一般有两种方案, big-endian 和 little-endian 。 在 big-endian 方案中,低字节在高地址单元中;在 little-endian 方案中,低字节在低地址单 元中。ARM 处理器支持两种方案的字节序,可以通过系统设置指定处理器支持那种方案。一 般缺省为litter-endian ,而且对于指令访问来说,总是 little-endian 。第七章1、试分析 ARM 处理器指

6、令系统中对立即数进行预处理的好处。 答:一般立即数寻址在指令系统中是必不可少的。 ARM 指令系统是 32 位的 RISC 结构,每 条指令的位数都固定为 32 位。因此在指令中能直接给出的立即数位数就会很少,使得立即 数的使用受到很大限制。ARM 对立即数进行预处理的技术, 使得在 12 位的空间内可以表示部分 32 位的立即数, 它突破了指令格式中位数的限制, 使得立即数的范围大大扩大。 虽然这样做只能表示部分立 即数, 但大部分常用的立即数因为小于8 位,都能直接表示。 而对于不能表示的立即数,又有伪指令 LDR 来处理。从计算机系统结构的角度来说,这种设计是非常优秀的。2、举例说明 A

7、RM 指令系统中条件执行的好处。 由于条件执行可以有效地减少分支指令的数目, 从而减少指令流水线的暂停次数, 因此 条件执行既可以改善代码执行的性能,又可以提高代码的密度。例如,求最大公约数的 C 语言代码片断为:while (a != b) if (a b) a -= b; else b -= a;不采用条件执行的 ARM 汇编代码为:gcdCMPBEQBLTSUB BR1,R2 completelessthanR1,gcdR1, R2lessthanSUBR2,R2,R1Bgcdcomplete而采用条件执行的ARM汇编代码为gcdCMPR1,R2SUBGTR1,R1,R2SUBLTR2,

8、R2,R1BNEgcd可见条件执行的优点是非常明显的。3、举例说明 BX 指令的功能。答:BX 是一条跳转指令,其目标地址采用寄存器寻址。BX 指令用 Rm 寄存器的最低位影响 CPSR 中的 T 标志位,同时将计算后的目标地址保存在寄存器 PC 中。因此, BX 指 令既可以实现远距离( 231)的绝对跳转,又可以实现 ARM 空间到 Thumb 空间的切换。指令的语法格式为:BX 其中,为指令执行的条件码,当 忽略时指令为无条件执行; 为跳转 的目标地址,其计算方法为:使 CPSR 中 T 位等于 Rm 寄存器中最低位的值, 然后将 Rm 寄 存器中值与OxFFFFFFFE 进行与操作,将

9、结果传送到 PC 中。BX 指令主要用于从 ARM 代码区跳转到 Thumb 代码区。 ARM 指令为 32 位, 其指令地 址的最低 2 位为 0, Thumb 指令为 16 位,其指令地址的最低 1 位为 0。显然 Thumb 指令地 址的最低 2位也可以为 0,因此不能单凭指令地址的最低 2 位来区分指令类型。但由于两种 指令的最低位都为 0,因此指令系统允许用户通过人为的设置该位来标记目标地址,规定该 位为 1 表示目标地址处为 Thumb指令,该位为 0 表示目标地址处为 ARM 指令。正如前所 示,如果指令地址的最低位为 1,则为非法地址,因此必须将其与 0 xFFFFFFFE 进

10、行与操作 来恢复其最初的值。 事实上,处理器是根据 CPSR的 T 位来决定是否按 Thumb 代码来执行, 而不是单凭指令地址。当 BX 指令的目标地址不设置最低位时,可实现在 ARM 空间 231范围的绝对跳转。4、举例说明 SWI 指令的功能。答: SWI 指令用于产生软中断, ARM 通过这种机制实现在用户模式对操作系统中特权模式 的程序的调用。SWI 指令执行时,首先将该指令的下一条指令的地址保存在 R14_svc 寄存器中,将 CPSR 保存在SPSR_svc 寄存器中。然后设置处理器模式为特权模式, 并设置运行在 ARM 环境(而 不是 Thumb环境)。接着禁止一般中断,最后将

11、 PC 值设置为 0 x00000008 或 0 xFFFF0008。本指令主要用于用户程序调用操作系统的系统服务。操作系统在SWI 的异常中断处理程序中提供相关的系统服务,并定义了参数传递的方法。通常有以下两种方法:其一, 指令中 24 位立即数指定用户请求的服务类型, 参数通过寄存器传递; 其二, 指令中的 24 位立即 数被忽略,用户请求的服务类型由寄存器 R0 的数值决定,参数通过其它通用寄存器传递。在 ADS1.2 中就采用第一种方法。例如,下面的代码段使程序正常返回系统。MOVR0, #0 x18LDRR1 , =0 x20026SWI0 x1234565、设 x=123 , y=

12、-124,编写 x冷的 ARM 指令代码。MOVR0, #123MVNR1 , #123SMULL R2, R3, R0, R1第八章 ARM 汇编语言程序设计1、简述 ADS1.2 的基本组成。答:( 1)代码生成工具( Code Generation Tools)包括 armcc( ARM C 编译器)、 armcpp( ARM C+ 编译器) 、tcc (Thumb C 编译器)、tcpp ( Thumb C+ 编译器)、armasm (ARM 和 Thumb 汇编语言编译器)、armlink (ARM 目 标代码连接器)和 armsd( ARM 和 Thumb 符号调试器) 。本章只用

13、到 armasm、 armlink 。( 2)集成开发环境( CodeWarrior IDE from Metrowerks )ADS 在 其 Windows 版 本 中 集 成 了 Metrowerks 公 司 比 较 有 名 的 集 成 开 发 环 境CodeWarrior IDE 。 CodeWarrior IDE 包括工程管理器、代码生成接口、语法敏感编辑器、源 文件和类浏览器、源代码版本控制系统接口、文本搜索引擎等。( 3)调试器( Debuggers)包括 ARM 扩展调试器 AXD(ARM eXtended Debugger )和 ARM 符号调试器 arms(d ARMsymb

14、olic debugger )。 AXD 基于图形界面,具有一般意义上调试器的所有功能,包括简单和 复杂断点设置、 栈显示、 寄存器和内存单元显示、 命令行接口等。 armsd 为命令行调试工具。 本章主要用到 AXD 。( 4)指令集模拟器( Instruction Set Simulators )主要是 ARMulator ,使用户无需任何硬件即可完成大部分调试工作。( 5)ARM 开发包( ARM Firmware Suite )包括 fromelf (映像文件转换工具)、armprof (调试器运行时信息统计工具)、armar (库 文件生成工具)和 flash downloader

15、等,其中 fromelf 可以将 elf 格式文件转换成多种二进制 文件格式,同时也可以生成 elf 文件内部的相应信息, flash downloader 可以将可执行映像文 件写入目标版的 flash中。( 6)ARM 应用库( ARM Applications Library ) 包括标准 C 库和 C+ 库例程。2、在 ADS1.2 命令行方式下调试 ARM 汇编程序的主要命令有哪些?其作用是什么?答:(1)、armasm:汇编源代码;(2)、armlink :连接目标代码;(3)、armsd:调试可执行 文件;(4)、examine:检查内存单元;(5)、list :列出程序代码;(

16、6)、register :检查寄存 器等。3、ADS1.2 的窗口调试工具是什么?它有什么特点?答:是 AXD。AXD 调试环境既可以是 ADP (调试代理协议)方式,即通过 JTAG 进行远程 仿真调试;又可以是 ARMUL 方式,即无需任何硬件利用 AXD 嵌入的 ARM 软件模拟器 ARMulator 进行调试。ADS 软件功能非常强大,它既支持 ARM 汇编语言,又支持 C、 C+、 Thumb 汇编以及 它们的混合编程;它既提供模拟环境,又提供远程仿真;嵌入的CodeWarrior 能实现全面的项目管理;调试器支持断点调试和远程下载。4、简述 LTORG 伪操作的作用。答: LTOR

17、G 伪操作用于声明一个数据缓冲区。当程序中使用某些指令时,需要有一个 数据缓冲区, 一般缺省的数据缓冲区被定义在段的末尾, 这可能使得对数据缓冲池的使用产 生越界。 LTORG伪操可以将数据缓冲池的位置定义在当前位置(即 LTORG 伪操作所在的 位置),从而避免数据缓冲区越界。LTORG 伪操作通常放在无条件跳转指令之后,或者子程序返回指令之后,这样处理器 就不会错误地将数据缓冲池中的数据当作指令来执行。5、LDR 机器指令和 LDR 伪指令的区别是什么?答: LDR 机器指令主要用于从内存中将一个 32 位的字数据读取到目标寄存器中,源操作数 一定是某种偏移量的基址寄存器寻址方式。 而 L

18、DR 伪指令则用于将一个 32 位的常数或者一 个地址值读取到寄存器中。一般编译器总是把一个 32 位的常数或者一个地址放到数据缓冲 区中,然后用一条基于 PC的 LDR 机器指令来读取该值,或者将该伪指令转换为一条MOV指令(此时 32 位的常数是一个合法的立即数) 。6、简述 GNU ARM 汇编语言程序的基本结构答: GNU ARM 汇编语言语句的基本格式如下: : comment 和标准的 ARM 汇编语句不同, GNU ARM 汇编语句不需要缩进指令或伪指令,符号通 过其后的冒号“: ”来识别,所有的伪操作前面都加点“ .”注释用符号“ ”标识。下面是 一个基本的 GNU ARM 汇

19、编程序例子:.section.text“ x” 代码段,属性为可执行start:.global _start “_start”是供连接器使用的全局变量.globalmain 全局变量 mainmain:movr1,#74movr2,#0 xab.end 汇编到此结束第九章 C 语言与 ARM 汇编语言的混合编程1、为什么需要 C 语言与 ARM 汇编的混合编程? ARM 如何支持这种混合编程? 答:在 ARM 应用系统开发中,若所有的编程任务均用 ARM 汇编语言来完成,则其工作量 会非常大,并且不利于系统升级和应用软件移植。若所有的编程任务都用 C 语言来完成, 则对于一些系统的初始化以及一

20、些底层硬件设备的驱动实现会很不方便。因此, ARM 系统 需要支持 C 程序和 ARM 汇编语言的混合编程。 在一个完整应用系统的软件实现过程中,除 了初始化部分和一些关键代码用 ARM 汇编语言完成之外,其余大部分的编程任务都可以用 C 语言来实现。ARM 汇编语言与 C 语言的混合编程通常有以下几种技术:使用内嵌汇编器;从汇编代码中访问 C 程序全局变量;ARM 汇编程序和 C 程序间的相互调用。2、什么是 ATPCS ?它包括哪些基本规则?答: ATPCS 是 ARM-Thumb Procedure Call Standard 的缩写,是 ARM 公司制定的在 ARM 系统开发过程中子程

21、序之间相互调用的基本规则。 ATPCS 强制实现的约定是调用者如何传 递参数(即压栈方法,以何种方式存放参数) ,被调用者如何获取参数,以何种方式传递函 数返回值。ATPCS 包括基本 ATPCS 和特定的 ATPCS。基本 ATPCS 规定了子程序相互调用时的一些基本规则,包括下面三个方面的内容:寄存器的使用规则;数据栈的使用规则;参数传递的规则。满足基本 ATPCS 的程序执行速度较快,占用内存较少。但是,它不能提供以下支持:ARM 程序和 Thumb 程序相互调用; 数据以及代码位置无关的支持; 子程序的可重入性;数据栈检查的支持。为适应一些特定的需要,在基本 ATPCS 的基础上再添加

22、其他的规则而形成几种特定的ATPCS。这些特定的 ATPCS 包括:支持数据栈限制检查的 ATPCS; 支持只读段位置无关( ROPI )的 ATPCS; 支持可读写段位置无关(RWPI)的 ATPCS; 支持 ARM 程序和 Thumb 程序混合使用的 ATPCS;处理浮点运算的 ATPCS。3、内迁 ARM 汇编指令与普通 ARM 汇编指令一样吗?主要的区别是什么? 答:内嵌汇编指令包括大部分的 ARM 指令和 Thumb 指令,但由于它嵌入在 C 程序中使用, 因此在用法上和普通汇编指令有所不同。( 1)内嵌汇编指令中作为操作数的寄存器和常量可以是C 表达式(包括单个变量) ,但表达式的结果必须是无符号整数,常量前的符号“#”可以省略。(2)内嵌汇编指令中使用寄存器时需要注意以下几点: 通常编译器在进入内嵌汇编代码时会根据需要自动保存和恢复内嵌代码中用到的 寄存器,用户在内嵌代码中不需要去保存和恢复这些寄存器的值; 编译器可能会使用 R12 或 R13 寄存器存放编译的中间结果,在计算表达式时可能 会将寄存器 R0R3、 R12 以及 R14 用于子程序调用。因此在内嵌汇编指令中,不 要将这些寄存器同时指定为指令中的物理寄存器, 尤其是包含 C 表达式的指令中。 例如:在这段代码中,我们希望计算x 和 x/y 的和,并将结果保存在 y 中。但实际的情况是编译

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论