第二章 测验题
本章精选 66 道真题,涵盖ARM处理器与指令系统的核心考点。
处理器分类与特点
1. 以下关于ARM处理器内核说法正确的是?
- A)经典ARM处理器包括Cortex-M、Cortex-R和Cortex-A三大类
- B)Cortex-A系列为应用Cortex处理器,主要面向高端应用设计
- C)Cortex-M系列为面向控制领域的实时嵌入式处理器
- D)ARM11性能优于Cortex-A5,但低于Cortex-A15
答案解析
答:B 经典ARM处理器是ARM7/9/11,不包括Cortex系列(A错);Cortex-M面向微控制器而非"实时嵌入式"(C不准确,那是Cortex-R);ARM11性能低于Cortex-A5(D错)。B正确。
2. 以下关于ARM处理器的叙述中,错误的是?
- A)ARM7~ARM11为经典ARM处理器
- B)Cortex-A系列为应用Cortex处理器,主要面向高端应用
- C)Cortex-M系列为面向移动计算领域的嵌入式处理器
- D)Cortex-R系列应用于实时应用的场合
答案解析
答:C Cortex-M系列针对成本和功耗敏感的微控制器和终端应用,而非移动计算领域。
3. 不属于ARM内核主要特点的是?
- A)功耗低
- B)功能强大
- C)采用RISC结构
- D)全部采用哈佛结构
答案解析
答:D 早期ARM7采用冯诺依曼结构,不是全部采用哈佛结构。
4. 关于ARM处理器的特点,以下说法错误的是?
- A)采用指令流水线技术
- B)采用加载/存储指令访问内存
- C)性能强,功耗大
- D)单周期操作
答案解析
答:C ARM处理器的主要特点之一就是低功耗,"性能强,功耗大"说法错误。
5. 关于ARM处理器的命名,以下说法错误的是?
- A)ARM11之前的命名中TDMI中的T的含义是Thumb,即支持高密度16位Thumb指令集
- B)ARM11之后,采用ARM Cortex来命名
- C)ARM Cortex-R为高端应用型Cortex处理器
- D)ARM Cortex-M系列处理器内部没有MMU部件
答案解析
答:C Cortex-R面向实时应用,Cortex-A才是面向高端应用的处理器。
6. 对于ARM系列,最适合高端应用的嵌入式处理器是?
- A)ARM9
- B)ARM Cortex-M
- C)ARM Cortex-A
- D)ARM Cortex-R
答案解析
答:C Cortex-A系列面向尖端的基于虚拟内存的操作系统和用户应用,是高端应用处理器。
7. 关于ARM处理器的指令集说法错误的是?
- A)Thumb指令集是ARM指令集的一个子集
- B)ARM指令集指令宽度为32位,而Thumb指令集指令宽度为16位
- C)Thumb-2指令集既有16位指令宽度又有32位指令宽度
- D)所有ARM处理器均具有Thumb-2指令集
答案解析
答:D Thumb-2指令集是ARMv6/v7版本才具有的,早期的ARM7/9并不支持Thumb-2。
8. 下图是数字信号处理器(DSP)的典型应用方式,其中传感器采集信号后依次经过的①、②和③分别是?
- A)A/D转换器、DSP、D/A转换器
- B)D/A转换器、DSP、A/D转换器
- C)DSP、A/D转换器、D/A转换器
- D)A/D转换器、D/A转换器、DSP
答案解析
答:A 传感器采集模拟信号,先经A/D转换为数字信号,由DSP处理后,再经D/A转换为模拟信号输出。
9. 【填空题】ARM公司把ARM11之后的ARM处理器以ARM Cortex为特征命名,主要用于高端应用的命名为ARM Cortex-_,主要用于实时应用的命名为ARM Cortex-_。
答案
答:A;R Cortex-A面向高端应用,Cortex-R面向实时应用,Cortex-M面向微控制器。
10. 【填空题】在存储结构方面,ARM7采用_结构,而ARM9~ARM11均采用_结构。
答案
答:冯诺依曼(von Neumann);哈佛(Harvard) 早期ARM7采用冯诺依曼结构,ARM9之后均采用哈佛结构,数据总线和指令总线分开。
ARM体系结构
11. 以下关于ARM处理器工作状态说法错误的是?
- A)工作状态包括ARM状态、Thumb及Thumb-2状态和调试状态三种
- B)ARM状态既支持16位指令宽度也支持32位指令宽度
- C)Thumb状态或Thumb-2状态下代码密度大于ARM状态,占用存储空间较小
- D)ARM处理器复位后总处于ARM状态
答案解析
答:B ARM状态只支持32位指令,16位指令是Thumb状态的特点。
12. 关于ARM嵌入式处理器的工作状态,以下说法错误的是?
- A)ARM状态仅支持32位指令编码
- B)Thumb状态仅支持16位指令编码
- C)Thumb-2状态仅支持32位指令编码
- D)ARM状态和Thumb状态是可以相互切换的
答案解析
答:C Thumb-2状态兼容16位和32位指令编码,而非仅支持32位。
13. 以下ARM处理器,只有Thumb-2状态和调试状态的是?
- A)ARM7
- B)ARM9
- C)ARM11
- D)ARM Cortex-M3
答案解析
答:D Cortex-M3只有Thumb-2状态和调试状态,没有传统的ARM状态。
14. 关于ARM处理器的工作模式,以下说法错误的是?
- A)用户模式是程序正常执行的模式
- B)快速中断模式处理高速中断,用于高速数据传输或通道处理
- C)管理模式用于操作系统的保护模式,处理软中断
- D)系统模式用于处理未定义的指令陷阱
答案解析
答:D 系统模式用于运行具有特权的操作系统任务;处理未定义指令的是未定义指令终止模式(UND)。
15. 关于ARM处理器的工作模式,以下说法错误的是?
- A)用户模式是程序正常执行的工作模式
- B)管理模式负责处理存储器故障,实现虚拟存储器和存储器的保护
- C)系统模式运行特权级的操作系统任务
- D)当处理器处于用户模式时,如果没有异常发生是不能改变工作模式的
答案解析
答:B 管理模式(SVC)是操作系统的保护模式,处理软中断。负责处理存储器故障的是数据访问中止模式(ABT)。
16. 如果要选择ARM处理器工作在外部中断模式,允许外部中断IRQ,禁止快速中断FIQ,使用Thumb工作状态,则需要设置的寄存器是?
- A)PSP
- B)MSP
- C)CPSR
- D)SPSR
答案解析
答:C CPSR(当前程序状态寄存器)包含条件标志位、中断禁止位、当前处理器模式标志以及工作状态位,用于控制这些设置。
17. 以下关于ARM程序状态寄存器CPSR说法错误的是?
- A)CPSR记录了ARM运行过程中的标志状态
- B)CPSR决定是否切换到Thumb状态
- C)CPSR决定是否允许快速中断FIQ
- D)CPSR决定堆栈深度
答案解析
答:D CPSR包含条件码标志、中断禁止位和处理器模式位等,但不决定堆栈深度。
18. 以下关于ARM状态寄存器CPSR的说法正确的是?
- A)CPSR决定存储器的数据类型和存储模式
- B)CPSR中I为快速中断禁止控制位
- C)CPSR中的T为陷阱标志
- D)CPSR决定ARM处理器工作模式
答案解析
答:D CPSR低5位决定工作模式。I是外部中断IRQ禁止位(B错),F才是FIQ禁止位;T是ARM/Thumb状态切换位(C错)。
19. 以下关于ARM处理器寄存器说法错误的是?
- A)R0~R7在任何模式下均作为通用寄存器使用
- B)R0~R15寄存器的位数为32位
- C)作为链接寄存器LR的是R14
- D)堆栈指针SP使用的寄存器是R15
答案解析
答:D 堆栈指针SP使用的是R13,R15是程序计数器PC。
20. ARM处理器当前运算操作所产生的标志位记录在以下哪个寄存器中?
- A)PSP
- B)MSP
- C)SPSR
- D)CPSR
答案解析
答:D CPSR(当前程序状态寄存器)用于存储条件码标志,包括N(负数)、Z(零)、C(进位)、V(溢出)。
21. 关于ARM处理器的异常,以下说法错误的是?
- A)复位异常级别最高
- B)FIQ是外部中断异常
- C)每个异常中断向量占据4个字节
- D)不同类型的异常中断其中断服务程序入口地址不同
答案解析
答:B FIQ是快速中断请求异常,IRQ才是外部中断异常。FIQ主要用于高速数据传输或通道处理。
22. 关于ARM处理器异常中断响应过程中,以下说法正确的是?
- A)SPSR的值保存到CPSR中
- B)设置当前状态寄存器CPSR的相应位
- C)断点地址会自动保存在R13中
- D)自动把异常向量地址写入R14中
答案解析
答:B 响应过程:CPSR保存到SPSR(A反了);设置CPSR相应位(B对);断点地址保存在R14/LR中(C错);PC强制赋值为向量地址(D错)。
23. 以下关于ARM处理器从异常中断返回的说法错误的是?
- A)恢复原来被保护的用户寄存器
- B)将SPSR寄存器的值复制到CPSR
- C)将异常向量地址写入PC中
- D)清除I和F标志,允许IRQ和FIQ中断
答案解析
答:C 异常返回时应将断点地址(而非异常向量地址)恢复到PC中,以继续执行原来的程序。
24. 已知内存0x80000000=0x33,0x80000001=0x31,0x80000002=0x30,0x80000003=0x32,则ARM在大端模式下地址0x80000000所指示的一个字为?
- A)0x33303132
- B)0x32303133
- C)0x32303331
- D)0x33313032
答案解析
答:D 大端模式下最低地址存最高字节。字 = 0x33(最高)| 0x31 | 0x30 | 0x32(最低)= 0x33313032。
25. 已知在小端模式下,内存0x98001204存放0x35,0x98001205存放0x36,0x98001206存放0x37,0x98001207存放0x38,R1=0x98001200,执行LDR R0,[R1,#4]后,R0的值为?
- A)0x35363738
- B)0x36353837
- C)0x38373635
- D)0x37383536
答案解析
答:C 小端模式下高位数据存高地址。有效地址为R1+4=0x98001204,读取的字为0x38373635。
26. 已知R1=0x20000000,R0=0x55667788,在大端模式下执行ARM指令STR R0,[R1]之后,0x20000003中的值为?
- A)0x55
- B)0x66
- C)0x77
- D)0x88
答案解析
答:D 大端模式下高字节存低地址。0x55存0x20000000,0x66存0x20000001,0x77存0x20000002,0x88存0x20000003。
27. 【填空题】经典ARM处理器有7种异常,主要包括复位RESET、未定义指令UND、软件中断SWI、指令预取中止PABT、数据访问中止DABT、外部中断请求IRQ及_,其中优先级最高的异常是_。
答案
答:快速中断FIQ;复位RESET 7种异常中,复位的优先级最高。
28. 【填空题】ARM Cortex嵌入式处理器包括主要应用于控制领域的_系列和面向实时应用领域的_系列。
答案
答:Cortex-M;Cortex-R Cortex-M面向微控制器,Cortex-R面向实时应用。
29. 【填空题】在ARM处理器中,R0~R15是通用寄存器,其中作为堆栈指针SP使用的寄存器是_,作为程序链接寄存器LR使用的是_。
答案
答:R13;R14 R13=SP(堆栈指针),R14=LR(链接寄存器),R15=PC(程序计数器)。
30. 【填空题】ARM状态下指令代码长度的位数为_位、Thumb状态下指令代码长度的位数为_位。
答案
答:32;16 ARM状态全部32位指令,Thumb状态全部16位指令。
31. 【填空题】CPSR寄存器中的I和F分别为中断和快速中断禁止控制位,当I=_将禁止外部中断IRQ,当F=_时允许快速中断FIQ。
答案
答:1;0 I=1禁止IRQ,I=0允许IRQ;F=1禁止FIQ,F=0允许FIQ。
32. 【填空题】三星公司基于ARM9内核的S3C2410嵌入式处理器芯片的电源管理模块共有_种工作模式。_模式下不使用PLL时钟,由外部晶体或外部时钟直接提供给其它组件使用。
答案
答:4;慢速 S3C2410的电源管理有正常模式、慢速模式、休眠模式和掉电模式共4种。慢速模式关闭PLL,直接使用外部时钟。
ARM指令系统
33. ARM处理器在指令LDR R2,[R5,#2]!执行后,R5中的值为?
- A)R5不变
- B)R5=R5+2
- C)R5=R2+2
- D)R5=2
答案解析
答:B
[R5,#2]!是前索引带回写。先用地址(R5+2)读数据到R2,然后R5自动更新为R5+2。
34. 将ARM处理器R0中的一个字节的数据,存入由R1+4指示的内存区域,且地址自动更新,则使用的ARM指令是?
- A)STR R0,[R1,#4]
- B)STRH R0,[R1,#4]!
- C)STRH R0,[R1,#4]
- D)STRB R0,[R1,#4]!
答案解析
答:D
字节存储用STRB(B=Byte),地址自动更新用!后缀。
35. ARM处理器将R0中一个字的数据存入由R1指示的内存区域,使用的指令是?
- A)STR R0,[R1]
- B)LDR R0,[R1]
- C)STRH R0,[R1]
- D)STRB R0,[R1]
答案解析
答:A STR是字存储指令,STRH是半字存储,STRB是字节存储,LDR是加载而非存储。
36. 在以下ARM处理器的指令操作码中可让寄存器R1中的指定位"置位"的指令操作码是?
- A)MOV
- B)AND
- C)ADD
- D)ORR
答案解析
答:D ORR是逻辑或运算,任意位OR 1 = 1(置位)。AND与0可清零,ORR与1可置位。
37. 在以下ARM处理器指令中可让寄存器R1中指定位"清零"的指令操作码为?
- A)MOV
- B)AND
- C)ADD
- D)ORR
答案解析
答:B 使用AND指令和0进行按位相与,可以实现指定位清零(0 AND x = 0)。
38. 以下ARM指令中属于寄存器间接寻址的指令是?
- A)TST R1,#0xFE
- B)LDRB R1,[R2]
- C)MOV R1,R0,LSL#3
- D)BIC R0,R0,#0x0B
答案解析
答:B 寄存器间接寻址以寄存器的值作为操作数地址,用[]括起来表示。B中[R2]即为间接寻址。
39. 如果R1=0x00000080,则指令MOV R0,R1,LSL#2执行后,R0的值为?
- A)0x00000200
- B)0x00000320
- C)0x00000020
- D)0x00000040
答案解析
答:A R1=0x80=128,左移2位相当于乘以4,128×4=512=0x200。
40. 以下不能完成将R2中数值的两倍写入R1中的ARM指令是?
- A)ADD R1,R2,R2
- B)ORR R1,R2,R2
- C)MOV R1,R2,LSL#1
- D)MUL R1,R2,#2
答案解析
答:B ORR R1,R2,R2 的结果是R2与自身做或运算,结果仍是R2本身,不是两倍。A是自加,C是左移1位(×2),D是乘法。
41. 某ARM指令完成的功能是"如果相等,则进行带进位的加法",该指令是?
- A)ADCNE R1,R2,R3
- B)ADDEQ R1,R2,R3
- C)ANDEQ R1,R2,R3
- D)ADCEQ R1,R2,R3
答案解析
答:D ADC是带进位加法,EQ表示相等条件,合起来就是ADCEQ。ADDEQ是不带进位的加法(B错)。
42. 需要ARM指令完成的功能是:如果不相等,则进行减法,正确的指令是?
- A)SUBVS R1,R2,R3
- B)SUBEQ R1,R2,R3
- C)SUBLS R1,R2,R3
- D)SUBNE R1,R2,R3
答案解析
答:D NE表示不相等,SUB表示减法,故SUBNE是"不相等时进行减法"。
43. 关于ARM指令中的条件域,以下表述错误的是?
- A)EQ为相等
- B)CS为无符号数大于或等于
- C)VS为未溢出
- D)LS为无符号数小于或等于
答案解析
答:C VS表示溢出(oVerflow Set),VC才表示未溢出。
44. 以下ARM指令中源操作数属于立即寻址的指令是?
- A)SUBCC R1,R2,R3
- B)LDRB R0,[R1]
- C)AND R1,R2,R3
- D)MOV R1,#0x0B
答案解析
答:D 立即寻址即操作数以#开头直接给出。A和C为寄存器寻址,B为寄存器间接寻址。
45. 将R1寄存器中的指定位bit0和bit3清零,以下ARM汇编指令正确的是?
- A)AND R1,R1,#0xFFFFFFF6
- B)BIC R1,R1,#0xFFFFFFF6
- C)EOR R1,R1,#0xFFFFFFF6
- D)ORR R1,R1,#0xFFFFFFF6
答案解析
答:A bit0和bit3对应0x09,清零这两位需要与其反码0xFFFFFFF6做AND运算。和0相与清零,和1相与保持不变。
46. 将寄存器R1中指定的bit7和bit3位清除、其它位保持不变的ARM指令是?
- A)ORR R1,R1,#0x00000088
- B)AND R1,R1,#0x00000088
- C)BIC R1,R1,#0x00000088
- D)TST R1,R1,#0x00000088
答案解析
答:C BIC是位清除指令,BIC R1,R1,#0x88会将R1中bit7和bit3清零,其他位不变。
47. 设R1中为一正整数,将其数值的一半存入R2的ARM指令正确的是?
- A)SUB R2,R1,LSR #1
- B)MOV R2,R1,LSL#1
- C)UDIV R2,R1,#1
- D)MOV R2,R1,LSR#1
答案解析
答:D 数值减半相当于除以2,通过逻辑右移1位(LSR#1)实现。LSL#1是左移即乘2(B错)。
48. 以下ARM指令中不属于数据处理类指令的是?
- A)ADC R1,R2,R3
- B)LDR R1,[R2]
- C)MOV R1,R2,LSL#4
- D)ORR R1,R2,R3
答案解析
答:B LDR属于加载/存储类指令,不是数据处理类。ADC、MOV、ORR都属于数据处理类。
49. 对于ARM处理器以下不属于逻辑运算指令助记符的是?
- A)AND
- B)BIC
- C)EOR
- D)SBC
答案解析
答:D SBC是带借位减法指令,属于算术运算指令。AND(与)、BIC(位清除)、EOR(异或)均为逻辑运算指令。
50. 如果条件为负数,将R1指向的内存单元中8位数据加载到R0寄存器中,正确的ARM指令为?
- A)LDRPL R0,[R1]
- B)LDRMI R0,[R0]
- C)LDRHMI R1,[R0]
- D)LDRBMI R0,[R1]
答案解析
答:D MI表示负数条件,LDRB是字节加载,数据从[R1]加载到R0。
51. 以下对伪指令的解释错误的是?
- A)DCD 0x12;在内存区域分配一个32位字的内存空间并初始化为0x00000012
- B)CODE16;伪指令通知编译器,其后的指令序列为16位的Thumb指令
- C)Test EQU 50;定义一个常量Test值为50,不能定义32位常数
- D)IMPORT Main;该伪指令通知编译器当前文件要引用标号Main,但Main在其他源文件中定义
答案解析
答:C EQU伪指令可以定义32位范围内的常量,并非不能定义32位常数。
52. ARM处理器在比较指令之后,如果要依据是否相等转移到指定地址L1,则以下指令错误的是?
- A)BEQ L1
- B)BNE L1
- C)BXEQ L1
- D)BLAL L1
答案解析
答:D BLAL不是有效的ARM指令。BEQ(相等跳转)、BNE(不等跳转)、BXEQ(相等时带状态切换跳转)均为有效指令。
53. 【填空题】ARM指令集中,写16位数据到存储器的指令助记符为_,从外部设备读取一字节数据的助记符为_。
答案
答:STRH;LDRB STRH存储半字(16位),LDRB加载字节(8位)。
54. 【填空题】已知R1=0x12345678,R2=0xFF008899,执行AND R0,R1,R2后,R0=_,R1=_。
答案
答:0x12000018;0x12345678 AND按位与运算,R0=R1 AND R2=0x12000018;R1作为源操作数不变。
55. 【填空题】已知R1=0xFFFFFFF8,R2=0x7F,则执行指令EOR R0,R1,R2后,寄存器R0=_,R2=_。
答案
答:0xFFFFFF87;0x7F EOR是异或指令,按位比较不相等为1,相等为0。R2值不改变。
56. 【填空题】已知R0=0x10,R1=0x20,R2=0x08,R3=0xFFFFFFF3,则指令LSL R0,R0,R2执行后,R0=_,指令MVN R1,R3执行后R1=_。
答案
答:0x00001000;0x0000000C LSL是逻辑左移,R0=0x10左移8位=0x1000。MVN是数据取反传送,对R3取反得0x0C。
57. 【填空题】若R3=0,R4=0xF912341F,则指令BIC R3,R4,#0x80000001执行后,R3的值为_,R4的值为_。
答案
答:0x7912341E;0xF912341F BIC位清零指令将R4中bit31和bit0清零后存入R3。R4值不改变。
58. 【填空题】若R2=0xFF00000F,则指令ADDS R1,R2,#0x80000001执行后,寄存器R1=_,进位位C=_。
答案
答:0x7F000010;1 0xFF00000F + 0x80000001 = 0x17F000010,超过32位产生进位,R1取低32位为0x7F000010,C=1。
59. 【填空题】Thumb-2指令集提供了专门用于开、关中断的专用指令,关外部中断使用的指令为_,开外部中断的指令为_。
答案
答:CPSID I;CPSIE I CPSID I(Change Processor State, Interrupt Disable)关闭中断;CPSIE I(Interrupt Enable)开启中断。
60. 【填空题】某ARM汇编语言程序要调用子程序MySubroutine,调用指令为_,子程序返回调用程序的指令为_。
答案
答:BL MySubroutine;MOV PC,LR BL是带返回的转移指令,会将返回地址保存在LR中。返回时将LR值写回PC即可。
61. 【填空题】用ARM汇编语言,在内存空间定义一个字(32位)变量的伪指令为_,指示下面为16位代码的伪指令是_。
答案
答:DCD;CODE16 DCD用于分配一片连续的字存储单元并初始化;CODE16通知编译器后续为16位Thumb指令。
ARM汇编与C混合编程
62. 编写uC/OS-II的中断服务子程序主要使用哪种语言?
- A)汇编语言或C语言
- B)Java语言
- C)PASCAL语言
- D)C++语言
答案解析
答:A uC/OS-II的中断服务子程序主要用汇编语言编写。如果编译器支持内嵌汇编,也可以直接放在C语言程序文件中。
63. GCC是针对Linux操作系统环境下应用程序的编译工具,下面叙述中错误的是?
- A)GCC将源文件生成可执行文件的过程是由:编译、汇编、连接等3个阶段组成
- B)GCC能将C语言、C++语言、汇编语言编写的源程序生成执行文件
- C)设计者若要对源程序进行调试,需要在GCC命令中加入-g参数来编译该源程序
- D)用GCC把源文件仅编译成目标文件,那么C语言编写的应用程序中可以不要main函数
答案解析
答:A GCC从源文件生成可执行文件包含4个阶段:预处理、编译、汇编、连接,不是3个。
64. 下列程序中通常不属于板级支持包(BSP)内容的是?
- A)初始化程序
- B)设备驱动程序
- C)引导加载程序
- D)进程管理程序
答案解析
答:D BSP包括初始化程序、设备驱动程序、配置文件和引导加载程序等。进程管理属于操作系统内核功能,不属于BSP。
65. 【填空题】由于Bootloader的实现依赖于CPU的体系结构,大多数Bootloader都分为stage1和stage2两大部分。stage1使用_语言来实现,而stage2通常用C语言来实现,代码具有更好的可读性和_性。
答案
答:汇编;可移植 stage1用汇编语言实现底层硬件初始化,stage2用C语言实现复杂功能,提高可读性和可移植性。
66. 【填空题】GNU开发工具套件中的C语言编译器,其英文简称是_。针对ARM体系结构的目标机,该编译器的带前缀命令是_。
答案
答:GCC;arm-linux-gcc GCC是GNU C Compiler的简称,arm-linux-gcc是针对ARM体系结构交叉编译时使用的命令。