omap5912 OSK无线模块扩充套件。 (5)Portable Data Terminal Reference Design
基于omap5912的便携式数据终端(PDT)参考设计,一个完整的多媒体智能手机设计案例。相关应用包括导航、游戏、学习辅助、通话、娱乐等等。 ??
第4章 ARM微处理器的编程模型与指令系统
1、ARM微处理器有哪几种运行模式?其中哪些是特权模式,哪些又是异常模式?(P64)
答:ARM微处理器支持7种运行模式,分别为:用户模式;快速中断模式;外部中断模式;管理模式;数据访问终止模式;系统模式;未定义指令中止模式。除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(Privileged Modes);而除去用户模式和系统模式以外的5种又称为异常模式(Exception Modes),常用于处理中断或异常。
2、ARM体系结构的存储器格式有哪几种?(P64~65)
答:ARM体系结构可以用两种方法存储字数据,称之为大端格式(big-endian)和小端格式(little-endian)。大端格式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中;小端格
式:低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。
3、ARM状态下和Thumb状态下寄存器的组织有何不同?(P69~70) 答:Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,程序可以直接访问8个通用寄存器(R7~R0)、程序计数器(PC)、堆栈指针(SP)、连接寄存器(LR)和CPSR。同时,在每一种特权模式下都有一组SP、LR和SPSR。在Thumb状态下,高位寄存器R8~R15并不是标准寄存器集的一部分,但可使用汇编语言程序受限制的访问这些寄存器,将其用作快速的暂存器。
4、简述CPSR各状态位的作用,并说明如何对其进行操作,以改变各状态位。(P67~68)
答:CPSR可在任何运行模式下被访问,它包含条件码标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。
条件码标志位:
? N(Negative)当用两个补码表示的带符号数进行运算时,N=1表示运算的结果为负数;N=0 表示运算的结果为正数或零; ? Z(Zero)Z=1 表示运算的结果为零;Z=0表示运算的结果为非零;
? C(Carry)可以有4种方法设置C的值:① 加法运算(包括
比较指令CMN):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。② 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。③ 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。④ 对于其他的非加/减运算指令,C的值通常不改变。
? V(OVerflow)可以有2种方法设置V的值:① 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。② 对于其他的非加/减运算指令,V的值通常不改变。
CPSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器运行特权模式,这些位也可以由程序修改。
状态寄存器(PSR)中的其余位为保留位,当改变PSR中的条件码标志位或者控制位时,保留位不要被改变,在程序中也不要使用保留位来存储数据。保留位将用于ARM版本的扩展。
5、ARM体系结构所支持的异常类型有哪些?具体描述各类异常,在应用程序中应该如何处理?(P70~71)
答:ARM体系结构所支持的异常类型有复位、未定义指令、软件中断、指令预取中止、数据中止、外部中断请求、快速中断请求。具体地:
? 当处理器的复位电平有效时,产生复位异常,程序跳转到复位
异常处理程序处执行;
? 当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真;
? 软件中断异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用; ? 若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常;
? 若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常;
? 当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务; ? 当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。
6、ARM指令有哪几种寻址方式?试分别叙述其各自的特点并举例说明。(P77)
答:ARM指令系统支持的基本寻址方式有7种:立即数寻址、寄存器寻址、寄存器间接寻址、基址变址寻址、多寄存器寻址、堆栈寻址、相对寻址。他们的特点分别是:
? 立即数寻址:操作数本身就在指令中给出。如:ADD R0,R0,#0x3f
? 寄存器寻址:指令中地址码给出的是寄存器编号。如:ADD R0,R1,R2
? 寄存器间接寻址:寄存器中的值作为操作数的地址,操作数本身存放在存储器中。如:ADD R0,R1,[R2]
? 基址变址寻址:将寄存器的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址,用于访问基址附近的存储器单元。如:LDR R0,[R1,#4]
? 多寄存器寻址:块拷贝寻址。如:LDMIA R0,{R1,R2,R3,R4}
? 堆栈寻址:用堆栈作为地址。如:STMFD SP! {R1-R7,LR}
? 相对寻址:以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。如:BL NEXT
7、简述ARM指令集的分类。(P81)
答:ARM指令集总体分为六大类:数据处理指令、程序状态寄存器访问指令、Load/Store指令、跳转指令(转移指令)、异常中断指令、协处理器指令。
8、假设R0的内容为0x8000,寄存器R1、R2内容分别为0x01和0x10,存储器内容为空。执行下述指令后,说明PC如何变化?存储器及寄
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库嵌入式系统设计大学教程 - 习题与解答(4)在线全文阅读。
相关推荐: