第六章
1、ARM处理器的特点是什么?
答:ARM处理器立足于嵌入式市场,其设计思想并不单纯地追求处理器速度,而是着眼于系统的整体性能。具体来讲,主要包括以下几个方面。
首先,低功耗是一个主要的考虑方面。其次,高代码密度是嵌入式系统的又一个重要需求。另外,嵌入式系统通常都是价格敏感的。还有一个影响嵌入式系统性能的因素就是处理器内核管芯(die)的面积,对于一个单片方案,处理器内核所占的面积越小,留给外设电路的空间就越大,这可以减少最终产品的外围芯片数目,从而降低设计和制造成本。
在体系结构方面,ARM处理器采用精简指令系统计算机(RISC)结构,但ARM处理器又不是纯粹的RISC。为了能够更好地满足嵌入式应用的需求,ARM处理器还增加了以下特点:
● 一些特定指令的周期数可变,即并不是所有的ARM指令都是单周期的。
● 内嵌桶形移位器产生了更为复杂的指令。
● Thumb 16位指令集。
● 条件执行。这个特性可以减少分支指令的数目,从而改善性能,提高代码密度。
2、ARM处理器系列主要包括几大类?各自的特性是什么?
ARM处理器系列属性的比较
类型 属性 | ARM7 | ARM9 | ARM9E | ARM10E | ARM11 | Cortex |
处理器流 水线深度 | 3 | 5 | 5 | 6 | 8 | 13 |
典型频率(MHz) | 236 | 250 | 470 | 540 | 620 | 1100 |
典型功耗(mw/MHz) | 0.03 | 0.25 (+cache) | 0.235 (+cache) | 0.45 (+cache) | 0.6 (+cache) | 0.45 (+cache) |
性能(MIPS) Dhrystone 2.1 | 130 | 300 | 300 | 400 | 675 | 2000 |
典型的指 令集结构 | ARMv3 | ARMv4T | ARMv5TE | ARMv5TEJ | c语言下载什么ARMv6 | ARMv7 |
3、ARM处理器有哪些处理器模式?各自如何切换?
答:ARM处理器有7种处理器模式,它们分别是:用户模式,快速中断模式,外部中断模式,管理模式,中止模式,未定义模式和系统模式。各模式之间的切换,可以通过软件控制来实现,也可以由外部中断或异常而引起。
处理器复位之后,首先进入管理模式,操作系统内核通常处于这种模式。当运行用户程序时,进入用户模式。在用户模式下,应用程序不能访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换,只允许对CPSR(当前程序状态寄存器)的控制域进行读操作,但允许对CPSR条件标志的读/写访问,用户模式下执行软中断指令(SWI)时也进入管理模式。系统模式是一种特殊的用户模式,它使用和用户模式完全相同的寄存器,但允许对CPSR的完全访问,当操作系统任务需要访问系统资源但又想避免访问与异常模式相关的寄存器时进入该模式。当处理器访问存储器失败时,进入中止模式。当处理器遇到没有定义的指令或处理器不支持该指令时,进入未定义模式。快速中断模式和外部中断模式分别对ARM处理器两种不同级别的中断做出响应。
4、“字节序”是指什么?ARM处理器如何解决这一问题?
答:当把一个多字节的数据存入以字节为单位编址的内存空间时,存在哪个字节定位在哪个地址单元的问题,在存储系统中称为字节序。一般有两种方案,big-endian和little-endian。在big-endian方案中,低字节在高地址单元中;在little-endian方案中,低字节在低地址单元中。
ARM处理器支持两种方案的字节序,可以通过系统设置指定处理器支持那种方案。一般缺省为litter-endian,而且对于指令访问来说,总是little-endian。
第七章
1、试分析ARM处理器指令系统中对立即数进行预处理的好处。
答:一般立即数寻址在指令系统中是必不可少的。ARM指令系统是32位的RISC结构,每条指令的位数都固定为32位。因此在指令中能直接给出的立即数位数就会很少,使得立即数的使用受到很大限制。
ARM对立即数进行预处理的技术,使得在12位的空间内可以表示部分32位的立即数,它突破了指令格式中位数的限制,使得立即数的范围大大扩大。虽然这样做只能表示部分立即
数,但大部分常用的立即数因为小于8位,都能直接表示。而对于不能表示的立即数,又有伪指令LDR来处理。
从计算机系统结构的角度来说,这种设计是非常优秀的。
2、举例说明ARM指令系统中条件执行的好处。
由于条件执行可以有效地减少分支指令的数目,从而减少指令流水线的暂停次数,因此条件执行既可以改善代码执行的性能,又可以提高代码的密度。例如,求最大公约数的C语言代码片断为:
while (a != b) {
if (a > b) a -= b; else b -= a;
}
不采用条件执行的ARM汇编代码为:
gcd
CMP R1,R2
BEQ complete
BLT lessthan
SUB R1,R1,R2
B gcd
lessthan
SUB R2,R2,R1
B gcd
complete
而采用条件执行的ARM汇编代码为:
gcd
CMP R1,R2
SUBGT R1,R1,R2
SUBLT R2,R2,R1
BNE gcd
可见条件执行的优点是非常明显的。
3、举例说明BX指令的功能。
答:BX是一条跳转指令,其目标地址采用寄存器寻址。BX指令用Rm寄存器的最低位影响CPSR中的T标志位,同时将计算后的目标地址保存在寄存器PC中。因此,BX指令既可以实现远距离(±231)的绝对跳转,又可以实现ARM空间到Thumb空间的切换。
指令的语法格式为:
BX{<cond>} <Rm>
其中,<cond>为指令执行的条件码,当<cond>忽略时指令为无条件执行;<Rm>为跳转的目标地址,其计算方法为:使CPSR中T位等于Rm寄存器中最低位的值,然后将Rm寄存器中值与0xFFFFFFFE进行与操作,将结果传送到PC中。
BX指令主要用于从ARM代码区跳转到Thumb代码区。ARM指令为32位,其指令地址的最低2位为0,Thumb指令为16位,其指令地址的最低1位为0。显然Thumb指令地址的最低2位也可以为0,因此不能单凭指令地址的最低2位来区分指令类型。但由于两种指令的最低位都为0,因此指令系统允许用户通过人为的设置该位来标记目标地址,规定该位为1表示目标地址处为Thumb指令,该位为0表示目标地址处为ARM指令。正如前所示,如果指令地址的最低位为1,则为非法地址,因此必须将其与0xFFFFFFFE进行与操作来恢复其最初的值。事实上,处理器是根据CPSR的T位来决定是否按Thumb代码来执行,而不是单凭指令地址。
当BX指令的目标地址不设置最低位时,可实现在ARM空间±231范围的绝对跳转。
4、举例说明SWI指令的功能。
答:SWI指令用于产生软中断,ARM通过这种机制实现在用户模式对操作系统中特权模式的程序的调用。
SWI指令执行时,首先将该指令的下一条指令的地址保存在R14_svc寄存器中,将CPSR保存在SPSR_svc寄存器中。然后设置处理器模式为特权模式,并设置运行在ARM环境(而不是Thumb环境)。接着禁止一般中断,最后将PC值设置为0x00000008或0xFFFF0008。
本指令主要用于用户程序调用操作系统的系统服务。操作系统在SWI的异常中断处理程序中提供相关的系统服务,并定义了参数传递的方法。通常有以下两种方法:其一,指令中24位立即数指定用户请求的服务类型,参数通过寄存器传递;其二,指令中的24位立即数被忽略,用户请求的服务类型由寄存器R0的数值决定,参数通过其它通用寄存器传递。在ADS1.2中就采用第一种方法。
例如,下面的代码段使程序正常返回系统。
MOV R0, #0x18
LDR R1, =0x20026
SWI 0x123456
5、设x=123,y=-124,编写x×y的ARM指令代码。
MOV R0,#123
MVN R1,#123
SMULL 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符号调试器)。本章只用到armasm、armlink。
(2).集成开发环境(CodeWarrior IDE from Metrowerks)
ADS在其Windows版本中集成了Metrowerks公司比较有名的集成开发环境CodeWarrior IDE。CodeWarrior IDE包括工程管理器、代码生成接口、语法敏感编辑器、源文件和类浏览器、源代码版本控制系统接口、文本搜索引擎等。
(3).调试器(Debuggers)
包括ARM扩展调试器AXD(ARM eXtended Debugger)和ARM符号调试器armsd(ARM symbolic debugger)。AXD基于图形界面,具有一般意义上调试器的所有功能,包括简单和复杂断点设置、栈显示、寄存器和内存单元显示、命令行接口等。armsd为命令行调试工具。本章主要用到AXD。
(4).指令集模拟器(Instruction Set Simulators)
主要是ARMulator,使用户无需任何硬件即可完成大部分调试工作。
(5).ARM 开发包(ARM Firmware Suite)
包括fromelf( 映像文件转换工具)、armprof(调试器运行时信息统计工具)、armar(库文件生成工具)和flash downloader等,其中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:列出程序代码;(6)、register:检查寄存器等。
3、ADS1.2的窗口调试工具是什么?它有什么特点?
答:是AXD。AXD调试环境既可以是ADP(调试代理协议)方式,即通过JTAG进行远程仿真调试;又可以是ARMUL方式,即无需任何硬件利用AXD嵌入的ARM软件模拟器ARMulator进行调试。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论