《ARM嵌入式系统构造与编程》习题答案 - 1章 绪论 1.国内嵌入式系统行业对“嵌入式系统”的定义是什么?如何理解? 答:见教材1.1节 2.嵌入式系统是从何时产生的,简述其开展历程 答:见教材1.1节 3.当前最常见的码开放的嵌入式操作系统有哪些,请举出两例,并分析^p 其特点 答:见教材1.2.1节的嵌入式Linux和嵌入式实时操作内核UC /OS-I 4.举例说明嵌入式设备在工控设备中的应用 答:见教材1.3节的“工业控制领域” 5.将来嵌入式技术的开展趋势有哪些? 答:见教材1.4节的嵌入式技术的开展趋势 2章 ARM技术与ARM体系构造 1.简述ARM处理器内核调试构造原理 答:对教材1.2节的图2-1进展描绘 2.分析^p ARM7TDMI-S 各字母所代表的含义 答:参考教材 2.1.2 ARM核版本命名规那么说明 3.ARM处理器的工作形式有哪几种,其中哪些为特权形式,哪些为异常形式,并指出处理器在什么情况下进入相应的形式 ARM处理器共有7种工作形式: 用户形式:非特权形式,也就是正常程序执行的形式,大局部任务在这种形式 下执行。
在用户形式下,假如没异常发生,不允许应用程序自行改变处理器的工作形式,假如有异常发生,处理器会自动切换工作形式 FIQ形式:也称为快速中断形式,支持高速数据传输和通道处理,当一个高优(fast)中断产生时将会进入这种形式 IRQ形式:也称为普通中断形式,:当一个低优先级中断产生时将会进入这种形式在这形式下按中断的处理器方式又分为向量中断和非向量中断两种通常的中断处理都在IRQ 形式下进展 SVC形式:称之为管理形式,它是一种操作系统保护形式当复位或软中断指令执行时处理器将进入这种形式 中止形式:当存取异常时将会进入这种形式,用来处理存储器故障、实现虚拟存储或存储保护 未定义指令异常形式:当执行未定义指令时会进入这种形式,主要是用来处理 未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协处理器的操作上 系统形式:使用和User形式一样存放器组的特权形式,用来运行特权级的操作系统任务 在这7种工作形式中,除了用户形式以外,其他6种处理器形式可以称为特权形式,在这些形式下,程序可以访问所有的系统资,也可以任意地进展处理器形式的切换在这 6种特权形式中,除了系统形式外的其他5种特权形式又称为异常形式 4.分析^p 程序状态存放器〔PSR〕各位的功能描绘,并说明C、Z、N、V 在什么情况下进展置位和清零。
PSR的详细格式为 V—溢出标志位 对于加/减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=1表示符号位溢出,其他的指令通常不影响V位 例如:两个正数〔最高位为0〕相加,运算结果为一个负数〔最高位为1〕,那么符号位溢出,相应V=1 C—进位或借位标志位 对于加法指令〔包括比拟指令CMN〕,结果产生进位,那么C=1,表示无符号数运算发生上溢出,其他情况下C=0; 在减法指令中〔包括比拟指令CMP〕,结果产生借位,那么C=0,表示无符号数运算发生下溢出,其他情况下C=1; 对于包含移位操作的非加/减法运算指令,C中包含最后一次溢出位的数值; 对于其他非加/减法运算指令,C位的值通常不受影响 Z—结果为0标志位 Z=1表示运算结果是0,Z=0表示运算结果不是零; 对于CMP指令,Z=1表示进展比拟的两个数大小相等 N—T符号标志位 本位设置成当前指令运算结果的bit[31]的值当两个补码表示有符号整数运算时,N=1表示运算的结果为负数,N=0 表示结果为正数或零 5.简述ARM处理器异常处理和程序返回的过程 答:ARM在异常产生时会进展以下操作: 〔1〕 将引起异常指令的下一条指令地址保存到新的异常形式的LR中,使异 常处理程序执行完后能根据LR中的值正确返回; 〔2〕 将CPSR的内容复制到新的异常形式下的SPSR中; 〔3〕 根据异常类型将CPSR形式控制位强迫设定为发生异常所对应的形式值; 〔4〕 强迫PC指向相应的异常向量地址。
ARM在异常返回时 〔1〕 从 SPSR_恢复CPSR; (2〕 从LR_恢复PC 6.ARM处理器字数据的存储格式有哪两种?并指出这两种格式的区别 答: 在大端存储格式中,对于地址为A的字单元,其中字节单元由高位到低位字节地址顺序为A,A+1,A+2,A+3;对于地址为A的半字单元,其中字节单元由高位到低位字节地址顺序为A,A+1 7. 分析^p 带有存储器访问指令〔LDR〕的流水线运行情况,并用图示说明其流水线的运行机制 答:在ARM三级流水线下: 对存储器的访问指令LDR就是非单周期指令这类指令在“执行”阶段后,还要进展“存储器访问”和“存放器回写”操作,每一步占用1个时钟周期在指令执行时空图中,处于时钟周期T5时,LDR 指令要进展数据的存储器操作〔访存〕,在时钟周期 T6 要进展存放器的回写操作,这两步还要占用执行单元,因此其下指令 1条指令的“执行”就被阻断了,其下数第2 条指令的译码被阻断,要等待 LDR 操作完毕后,流水线的正常运行才能被恢复 在图中,处理器用6个时钟周期执行了4条指令,指令平均周期数(CPI) = 1.5 时钟周期。
8.简述ARM9的5级流水线每一级所完成的功能和实现的操作 答:在ARM9在指令操作上采用 5 级流水线 1〕 取指:从指令Cache中读取指令 2〕 译码:对指令进展译码,识别出是对哪个存放器进展操作并从通用存放器中读取操作数 3〕 执行:进展ALU运算和移位操作,假如是对存储器操作的指令,那么在ALU中计算出要访问的存储器地址 4〕 存储器访问:假如是对存储器访问的指令,用来实现数据缓冲功能〔通过数据Cache〕;假如不是对存储器访问的指令,本级流水线为一个空的时钟周期 存放器回写:将指令运算或操作结果写回到目的存放器中 9. 什么叫做流水线互锁?应如何来解决,举例说明 答: 在流水线运行过程中可能会出现这种情况:当前指令的执行可能需要前面指令的执行结果,但这时前面的指令没有执行完毕,从而会导致当前指令的执行无法获得合法的操作数,这时就会引起流水线的等待,这种现象在流水线机制里称为互锁 举例:参见教材第29页: 当互锁发生时,硬件会停顿这个指令的执行,直到数据准备好为止如下图,LDR指令进展完执行阶段, 还需要两个时钟周期来完成存储器访问和存放器写操作,但这时指令MOV中用到的 R9正是LDR中需要进展 存放器加载操作后的存放器, 因此MOV要进展等待,直到LDR指令的存放器写操作完成。
3章 ARM 指令集寻址方式 1.在指令编码中,条件码占有几位,最多有多少个条件,各个条件是如何形成的?答:见教材3.1节的描绘 2.指令条件码中,V标志位在什么情况下才能等于1? 答:当指令的算术运算发生异常时,V标志位置1例如,两个正数相加,其结果为一负数;或者是两个负数相加,其结果为一正数,都会置V标志位 3.在ARM指令中,什么是合法的立即数?判断下面各立即数是否合法,假如合法那么写出在指令中的编码格式〔也就是8位常数和4位的移位数〕 0x5430 0x108 0x304 0x501 0xFB10000 0x334000 0x3FC000 0x1FE0000 0x5580000 0x7F800 0x39C000 0x1FE80000 答:每个立即数由一个8位的常数进展 32位循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示即: =immed_进展32位循环右移〔2*rotate_4〕位 符合这一条件的都为合法的立即数 0x5430 0B 0 0100 0011 0000 不合法 0x108 0B 0001 0000 1000 1111 01000010(30/2) 0x304 0B 0011 0000 0100 1111 11000001(30/2) 0x501 0B 0 0000 0001 不合法 0xFB10000 0B 1111 1 0001 0000 0000 0000 不合法 0x334000 0B 0011 0011 0100 0000 0000 0000 1001 11001(18/2) 0x3FC000 0B 0011 1111 0000 0000 0000 0 00111111(18/2) 0x1FE0000 0B 0001 1111 1110 (0000)[4] 不合法 0x5580000 0B 0 0 1000 (0000)[4] 不合法 0x7F80000 0B 0111 1000 0001 (0000)[4] 不合法 0x39C000 0B 0011 1001 1100 0000 0000 0000 1001 11100111(18/2) 0x1FE80000 0B 0001 1111 1110 (0000)[4] 不合法 4. 分析^p 逻辑右移、算术右移、循环右移、带扩展的循环右移它们间的差异。
答:见教材3.2节的图3-1移位操作功能描绘 5. ARM数据处理指令详细的寻址方式有哪些,假如程序计数器PC作为目的存放器,会产生什么结果? ARM数据处理指令详细的寻址方式有5种,见教材3.2节的详细说明假如程序计数器PC作为目的存放器,会产生程序发生跳转 6. 在Load/Store指令寻址中,字、无符号字节的Load/Store指令寻址和半字、有符号字节寻址,试分析^p 它们之间的差异 答:在Load/Store指令寻址中,字、无符号字节的Load/Store指令寻址有三种,详细见教材 3.3.2 节; Load/Store指令寻址中,半字、有符号字节寻址有两种,详细见教材3.3.3节; 它们之间的差异:在半字、有符号字节寻址中,没有Addressing_mode中的偏移量通过存放器移位得到的形式 7. 块拷贝Load/Store 指令在实现存放器组和连续的内存单元中数据传递时,地址的变化方式有哪几种类型,并分析^p 它们的地址变化情况 答: Load/Store指令在实现存放器组和连续的内存单元中数据传递时,地址的变化方式〔addr_mode〕有以下 4 种类型: 后增IA (Increment After) :每次数据传送后地址加 4; IB (Increment Before) :每次数据传送前地址加 4 ; 后减DA (Decrement After) :每次数据传送后地址减4 ; DB (Decrement Before) :每次数据传送前地址减4 。
8.栈操作指令地址的变化方式有哪几种类型,并分析^p 它们的地址变化情况,从而得出栈操作指令寻址和块拷贝Load/Store 指令之间的对应关系 答: (1) 四种类型的堆栈工作方式,即: (2) 栈操作指令寻址和块拷贝Load/Store指令之间的对应关系见表3-10 9. 分析^p 协处理器加载/存储指令的寻址方式中的内存地址索引格式中不同的汇编语 法格式下内存地址的计算方法 答:详细见教材3.3.2节 10.写出以下指令的机器码,并分析^p 指令操作功能 MOV R0 ,R1 MOV R1 ,#0x198 ADDEQS R1 ,R2,#0xAB CMP R2 ,#0Xab LDR R0 ,[R1,#4] STR R0 ,[R1,R1,LSL #2] ! LDRH R0 ,[R1,#4] LDRSB R0 ,[R2,#-2]! STRB R1 ,[R2,#0xA0] LDMIA R0 ,{R1,R2,R8} STMDB R0 !, {R1-R5,R10,R11} STMED SP !, {R0-R3,LR} 答:现对以下三条指令进展编码,其余的参照本章的编码说明。
4章 ARM指令集系统 1. ARM指令可分为哪几类?说出哪几条指令是无条件执行的 ARM指令可分为: 数据处理指令 程序状态存放器与通用存放器之间的传送指令 Load/Store指令 转移指令 异常中断指令 协处理器指令 无条件执行指令:BLX,BKPT 2.如何实现两个64位数的加法操作,如何实现两个64位数的减法操作,如何求一个64 位数的负数? 答:〔1〕见教材例 4-4: 实现 64 位数据加法运算:假设 R0和R1存放了一个64位数据〔作为被加数〕,R0存放数据的低32位;R2和R3中存放了另一个64位数据〔作为加数〕,R2中存放低 32 位数据运算结果送回到[R1:R0]中〔R0中存放低 32 位〕 ADDS R0,R0,R2 ;低落32位相加并影响标志位 ADC R1,R1,R3 ;高32位相加再加上 C 标志位 〔进位值〕 2〕见教材例4-6: SBC指令和SUBS指令结合使用可以实现两个64位的操作数相减假如存放器R0和R1中放置一个64位的被减第 12 页 共 12 页。