--- tags: - 嵌入式系统 - 试题 create time: 2026-06-10 10:41 --- # 试题 4 — 武汉科技大学《嵌入式系统》 ## 概述 - **课程**:嵌入式系统 - **学校**:武汉科技大学 - **题型**:单选题、判断题、名词解释、简答题、分析设计题 - **知识点**:ARM 处理器架构、ARM 指令集与寻址模式、智能移动终端应用分析 > [!tip] 学习建议 > 本试题涉及大量 ARM 指令注释和处理器模式分析,建议结合 `[[嵌入式系统/ARM架构与指令集]]` 笔记进行复习,同时关注 ARM 异常中断机制的理解。 ## 正文 ### 一、单选题(每题2分,共30分) 1. 下列不属于嵌入式系统特征的是()。 A. 以应用为中心 B. 以计算机技术为基础 C. 软件可裁剪 D. 数据处理能力强 > [!success]- 答案与解析 > 答案:D 2. 嵌入式系统的特点不包括()。 A. 专用性强 B. 资源受限 C. 实时性要求高 D. 通用性好 > [!success]- 答案与解析 > 答案:D 3. 操作系统的内核是由()统称。 A. 应用程序层 B. 应用程序框架层 C. 系统运行库层 D. Linux内核层 > [!success]- 答案与解析 > 答案:D 4. 以下不是ARM处理器工作模式的是()。 A. 系统模式 B. 用户模式 C. 中断模式 D. 测试模式 > [!success]- 答案与解析 > 答案:D 5. 在ARM状态,一个寄存器为()。 A. 8位 B. 16位 C. 32位 D. 64位 > [!success]- 答案与解析 > 答案:C 6. 在ARM7处理器中,R14的名称是()。 A. 程序计数器 B. 链接寄存器 C. 栈指针寄存器 D. 基址变址寄存器 > [!success]- 答案与解析 > 答案:B 7. ARM汇编语句"ADD R0, R1, R2, LSL#1"的操作结果是()。 A. R0 = R2 + (R1) B. R0 = (R2<<1) + R1 C. R1 = R0 + (R2<<1) D. R0 = R1 + (R2<<1) > [!success]- 答案与解析 > 答案:B 8. 在ARM处理器内部共有()个用户可访问的通用寄存器。 A. 31 B. 6 C. 37 D. 18 > [!success]- 答案与解析 > 答案:A 9. 寄存器间接寻址指令中地址码给出的是()。 A. 一个内存单元地址 B. 一个通用寄存器的编号 C. 一条指令的内存地址 D. 一个智能控制寄存器的名称 > [!success]- 答案与解析 > 答案:B 10. 下面()不属于ARM体系结构支持的七种处理器模式之一。 A. 用户模式 B. 管理模式 C. 系统模式 D. 中断模式 > [!success]- 答案与解析 > 答案:C 11. 采用RISC结构的ARM微处理器是()。 A. 一类公司的名称 B. 一类处理器总线通路 C. 一组处理器内核名称 D. 一款CPU的名称 > [!success]- 答案与解析 > 答案:C 12. 以下关于ARM7的描述正确的是()。 A. 指令集大部分为复杂指令集指令 B. 采用冯·诺依曼体系结构 C. 采用哈佛体系结构 D. RISC架构但不基于精简指令集计算机 > [!success]- 答案与解析 > 答案:B 13. 下列哪个寄存器属于状态寄存器()。 A. CPSR B. SP C. SR D. LR > [!success]- 答案与解析 > 答案:A 14. ARM处理器支持3种运行模式,以下指令()不属于异常模式。 A. 管理模式 B. 快速中断模式 C. 用户模式 D. 定义模式 > [!success]- 答案与解析 > 答案:C 15. ARM指令第2个操作数必须是一个()范围内的常量或寄存器中可以移位的数。 A. 8位 B. 16位 C. 32位 D. 64位 > [!success]- 答案与解析 > 答案:C > [!tip] 答题技巧 > ARM7 处理器有 7 种工作模式:用户模式(USR)、系统模式(SYS)、管理模式(SVC)、中止模式(ABT)、未定义模式(UND)、中断模式(IRQ)、快速中断模式(FIQ)。注意"中断模式"是统称,ARM7 将其细分为 IRQ 和 FIQ 两种模式,因此"中断模式"本身并不作为一个独立的工作模式名称出现。 > [!warning] 易错点 > 第15题中,ARM指令的第二操作数(Operand2)必须是一个8位范围内可以循环右移偶数位的常量,或者一个寄存器(可带移位操作)。答案选C(32位)是因为操作数本身是32位寄存器或移位后的32位值,但立即数受到8位循环右移的限制。请区分"操作数位宽"与"立即数编码范围"的概念。 --- ### 二、判断题(共10题,每题2分,共20分) 1. 嵌入式系统的应用软件可以没有操作系统的直接在芯片上运行。() > [!success]- 答案与解析 > 答案:T 2. 在ARM状态下可以执行ARM的也可以执行Thumb指令。() > [!success]- 答案与解析 > 答案:F 3. Android系统内核是Linux。() > [!success]- 答案与解析 > 答案:T 4. 嵌入式系统开发需要使用交叉编译工具。() > [!success]- 答案与解析 > 答案:T 5. uCOX-II是一个开源的实时操作系统。() > [!success]- 答案与解析 > 答案:F 6. 快速中断具有比一般中断更高的优先级。() > [!success]- 答案与解析 > 答案:T 7. 在嵌入式系统中,不需要考虑系统的功耗问题。() > [!success]- 答案与解析 > 答案:F 8. ARM7采用三级流水线结构。() > [!success]- 答案与解析 > 答案:T 9. 嵌入式系统的存储器只包括RAM。() > [!success]- 答案与解析 > 答案:F 10. 异常发生时,嵌入式系统会自动进入内核态。() > [!success]- 答案与解析 > 答案:T > [!note] 知识点辨析 > 第5题中,uC/OS-II(题目中写作 uCOX-II)确实是一个实时操作系统,但它是**商业软件**,并非开源。开源的 RTOS 代表有 FreeRTOS、RT-Thread 等。第2题中,ARM 状态下只能执行 ARM(32位)指令,Thumb 状态下执行 Thumb(16位)指令,两者不能在同一种状态下混合执行。 --- ### 三、名词解释(共2题,每题5分,共10分) #### 1. 寄存器寻址 > [!success]- 答案与解析 > 操作数的值在寄存器中,指令地址码字段指出的是寄存器编号,指令执行时到寄存器取操作数。 > > ```armasm > ; 寄存器寻址示例 > ADD R0, R1, R2 ; R0 = R1 + R2,操作数 R1、R2 均为寄存器编号 > MOV R3, R4 ; R3 = R4,源操作数和目的操作数均通过寄存器指定 > ``` > [!note] 教学提示 > 寻址方式是理解汇编语言的关键。常见的寻址方式包括:立即数寻址(操作数为常量)、寄存器寻址(操作数在寄存器中)、寄存器间接寻址(寄存器中存放的是内存地址)、基址变址寻址等。区分不同寻址方式有助于理解指令的执行过程。 #### 2. 中断 > [!success]- 答案与解析 > 中断是一种硬件机制,用于通知CPU有异步事件发生了,中断一旦被识别,CPU保存部分(或全部)上下文并跳转到专门的处理程序——中断服务程序(ISR)中执行。 > [!note] 教学提示 > 中断与异常的区别:中断是异步事件(由外部硬件触发),异常是同步事件(由指令执行触发)。ARM 处理器将中断和异常统一在异常向量表中处理。FIQ(快速中断)具有最高的中断优先级,适用于对响应时间要求极高的场景。 --- ### 四、简答题(共3题,8+8+9共25分) #### 1. ARM微处理器支持几种异常中断的工作方式。请简述每种中断方式的基本特点。(8分) > [!success]- 答案与解析 > ARM微处理器支持以下异常中断工作方式: > > | 模式 | 缩写 | 特点 | > |------|------|------| > | 快速中断模式 | FIQ | 用于高速数据传输或通道处理,优先级最高,有自己独立的R8-R14和SPSR | > | 普通中断模式 | IRQ | 用于一般的中断处理,有自己的R13-R14和SPSR | > | 管理模式 | SVC | 操作系统保护模式,系统复位和软件中断响应进入此模式 | > | 中止模式 | ABT | 用于虚拟存储和存储保护 | > | 未定义指令中止模式 | UND | 用于支持硬件协处理器仿真 | > | 系统模式 | SYS | 运行具有特权的操作系统任务 | > | 用户模式 | USR | 正常程序执行状态 | > [!note] 教学提示 > 注意区分"异常模式"和"异常中断方式"的表述。ARM7 的 7 种模式中,FIQ、IRQ、SVC、ABT、UND 属于异常模式(发生异常时进入),而 USR 和 SYS 属于非异常模式。FIQ 和 IRQ 的关键区别在于 FIQ 拥有更多独立寄存器(R8-R14),减少了模式切换时的压栈开销,因此响应速度更快。 ```mermaid flowchart TD Reset["Reset"] --> SVC["SVC Mode"] IRQ_Hardware["IRQ Hardware"] --> IRQ["IRQ Mode"] FIQ_Hardware["FIQ Hardware"] --> FIQ["FIQ Mode"] SWI["Software Interrupt"] --> SVC Abort["Data/Prefetch Abort"] --> ABT["ABT Mode"] Undefined["Undefined Instruction"] --> UND["UND Mode"] ``` #### 2. 简述ARM处理器对异常中断的响应流程。(8分) > [!success]- 答案与解析 > ARM处理器异常中断的响应流程包括以下四个步骤: > > 1. **保存CPSR到SPSR_\**:将当前程序状态寄存器的值保存到对应异常模式的备份状态寄存器中。 > 2. **设置适当的CPSR位**:切换到ARM状态(T位清零),切换到对应异常模式(M[4:0]位设置),禁止中断(根据需要设置I/F位)。 > 3. **设置LR_\**:将返回地址保存到对应异常模式的链接寄存器中(不同异常类型的返回地址计算方式不同)。 > 4. **设置PC为异常向量地址**:将PC跳转到异常向量表中对应的处理程序入口。 > > ```mermaid > flowchart TD > A["Exception/IRQ Detected"] --> B["Save CPSR to SPSR_mode"] > B --> C["Set CPSR: Switch to ARM state, Enter exception mode, Disable interrupts"] > C --> D["Set LR_mode to return address"] > D --> E["Set PC = Exception vector address"] > E --> F["Execute Exception Handler"] > ``` > [!note] 教学提示 > 不同异常类型的返回地址偏移不同:IRQ 返回地址为 `LR_irq = PC + 4`,FIQ 返回地址为 `LR_fiq = PC + 4`,SWI 返回地址为 `LR_svc = PC`,数据中止返回地址为 `LR_abt = PC + 8`。恢复时使用 `SUBS PC, LR, #offset` 指令返回。 #### 3. 请写出以下ARM指令语句的注释。(9分) > [!success]- 答案与解析 > ```armasm > CMP R2, R3 ; 比较R2和R3(做减法但不保存结果),设置条件标志位 > SUBS R0, R1, R2 ; R0 = R1 - R2,并更新条件标志位(S后缀) > MOV R0, R2, LSL#2 ; R0 = R2左移2位,即R0 = R2 × 4 > LDRB R1, [R2, #0x04] ; 将R2+4地址处的字节数据加载到R1(字节操作) > STR R1, [R0, #8] ; 将R1的值存储到R0+8地址处 > STMIA R0, {R1, R3, R4} ; 将R1, R3, R4依次存储到R0指向的递增地址中 > BL LOOP ; 带返回地址的跳转到LOOP子程序,返回地址保存到LR > TEQ R2, R3 ; 按位异或R2和R3,设置条件标志位(不保存结果) > MSR CPSR_f, R3 ; 将R3的值写入CPSR的标志位域(f表示flags) > ``` > [!warning] 易错点 > `SUBS` 中的 `S` 后缀表示更新 CPSR 标志位,而 `SUB` 则不更新。`LDRB` 中的 `B` 后缀表示字节操作(8位),不带 B 则为字操作(32位)。`STMIA` 中的 `IA` 表示 Increment After,即每次存储后地址递增。`TEQ` 是 Test Equivalence,执行按位异或但不保存结果,仅设置标志位,常用于测试两个值是否相等。 --- ### 五、分析设计题(每题15分,共30分) #### 1. ARM指令语句分析 请分析以下相关ARM指令语句,予以说明: ```armasm MOV R0, PC ADD R0, R1, #1 LDR R0, =0x56000010 LDR PC, [PC, #4] MRS R0, CPSR BL LOOP STMFD R13!, {R0-R12} ``` > [!success]- 答案与解析 > | 指令 | 说明 | > |------|------| > | `MOV R0, PC` | 将PC的值传送到R0寄存器,此时PC的值为当前指令地址+8(ARM流水线效应) | > | `ADD R0, R1, #1` | 将R1加上立即数1的值赋给R0寄存器,即 R0 = R1 + 1 | > | `LDR R0, =0x56000010` | 加载伪指令,使用文字池(Literal Pool)技术将常量 0x56000010 加载到R0 | > | `LDR PC, [PC, #4]` | 将当前PC值+4位置处的内存内容加载到PC,实现程序跳转 | > | `MRS R0, CPSR` | 把当前程序状态寄存器CPSR的值传送到R0 | > | `BL LOOP` | 带返回地址跳转:先将下一条指令地址保存到LR,然后跳转到LOOP标签处执行 | > | `STMFD R13!, {R0-R12}` | 压栈操作:将R0到R12寄存器的数据通过R13(SP)指针压入堆栈,FD表示满递减(Full Descending)堆栈方式,`!` 表示回写更新R13的值 | > [!note] 教学提示 > `LDR R0, =0x56000010` 是一条伪指令。由于ARM的MOV指令只能传送8位循环右移的立即数,无法直接加载任意32位常量,因此汇编器会将常量存放在代码池(Literal Pool)中,再通过LDR指令从池中读取。`LDR PC, [PC, #4]` 利用了ARM的三级流水线特性:执行当前指令时 PC 已经指向当前指令地址+8,因此 `[PC, #4]` 实际指向当前指令地址+12处的数据。 #### 2. ARM处理器对智能移动终端的支持分析 宽带移动无线网络已经成为基础设施,接入设备也以智能移动终端为主。随着智能移动终端性能的提高,移动应用的种类越来越丰富。请根据ARM处理器的结构及其指令集设计的主要特点,分析ARM处理器对智能移动终端的支持以及可能存在的不足。 > [!success]- 答案与解析 > **ARM处理器对智能移动终端的支持:** > > 1. **RISC体系结构**:ARM采用精简指令集计算(RISC)架构,具有高效低功耗的特点,非常适合电池供电的移动终端设备。 > 2. **固定长度指令格式**:ARM采用统一的32位指令编码格式,指令执行效率高,解码简单,有利于降低芯片功耗和面积。 > 3. **双指令集支持**:同时支持ARM(32位)和Thumb(16位)双指令集。Thumb指令集具有较高的代码密度(约比ARM指令集节省30%存储空间),适合存储资源受限的移动终端。 > 4. **片上调试支持**:支持JTAG等片上调试接口,方便移动终端的开发和测试。 > > **可能存在的不足:** > > 1. **高性能计算场景受限**:在某些需要大量浮点运算或并行计算的场景下,ARM架构的单核性能可能不如x86架构。 > 2. **软件生态相对有限**:虽然近年来ARM生态发展迅速,但在某些专业领域的软件支持仍然不如x86平台丰富。 > 3. **专用领域支持不足**:对于某些特定专业应用(如工业控制、高性能科学计算),ARM的指令集和外设支持可能不够完善。 > > ```mermaid > flowchart TD > subgraph Support["ARM Support for Mobile Terminals"] > RISC["RISC Architecture - Low Power"] > Fixed["Fixed-length Instructions - High Efficiency"] > Thumb["Thumb ISA - High Code Density"] > Debug["On-chip Debug - Easy Development"] > end > subgraph Limitation["Potential Limitations"] > Compute["Limited High-performance Computing"] > Ecosystem["Relatively Limited Software Ecosystem"] > Domain["Limited Support for Specialized Domains"] > end > Support --> Terminal["Smart Mobile Terminal"] > Terminal --> Limitation > ``` > [!note] 教学提示 > ARM 处理器之所以成为移动终端的主流选择,核心优势在于**功耗与性能的平衡**。在分析类题目中,建议从架构特点(RISC vs CISC)、指令集设计(ARM/Thumb双指令集)、功耗管理(多级功耗模式)、生态系统(软件兼容性)等多个维度展开论述。同时也要客观指出不足之处,体现分析的全面性。 --- ## 关联笔记 - [[嵌入式系统/ARM架构与指令集]] - [[嵌入式系统/异常与中断处理]] - [[嵌入式系统/嵌入式系统设计]]