作者|Rickyの水果摊
时间|2023年2月20日
本博客摘录了一些 嵌入式系统 的 常见选择题,供有需求的同学们学习使用。
部分答案解析由 ChatGPT 生成,博主进行审核。
使用教材信息:《嵌入式系统设计与应用——基于 ARM Cortex-A8 和 Linux(第二版)》
1、下面关于哈佛结构描述正确的是( )
A、程序存储空间与数据存储空间分离
B、存储空间与 IO 空间分离
C、程序存储空间与数据存储空间合并
D、存储空间与 IO 空间合并
2、关于ARM处理器的工作模式,以下说法错误的是()
A、用户模式是程序正常执行的工作模式
B、管理模式负责处理存储器故障,实现虚拟存储器和存储器的保护
C、系统模式运行特权级的操作系统任务
D、当处理器处于用户模式时,如果没有异常发生是不能改 变工作模式的
3、存储一个32位数0x2168465到2000H~2003H四个字 节单元中,若以小端模式存储,则2000H存储单元内容 为( )
A、 0x21 B、 0x68 C、0x65 D、0x02
4、下面关于ARM处理器的体系结构描述哪一个是错误的: ( )
A、三地址指令格式
B、所有的指令都是单周期执行
C、指令长度固定
D、Load-Store结构
5、ARM 指令集和Thumb 指令集分别是( )位的。
A、8 位,16 位
B、16 位,32 位
C、16 位,16 位
D、32 位,16 位
6、ARM Cortex A8的工作状态包括( )。
A、测试状态和运行状态
B、挂起状态和就绪状态
C、就绪状态和运行状态
D、ARM状态和Thumb状态
7、对于ARM7三级流水线,当一条指令被译码时,下一条指令正被( )
A、取指
B、译码
C、PC值递增
D、执行
8、复位后,ARM处理器处于()模式
A. USER
B. SVC
C. SYSTEM
D. ARM
9、寄存器R13除可做通用寄存器外,还可以做( )
A、程序计数器 B、链接寄存器 C、栈指针寄存器 D、基址寄存器
10、在下列ARM处理器的各种模式中,只有( )模式不可以自由地改变处理器的工作模式
A、用户模式(User)
B、系统模式(System)
C、终止模式(Abort)
D、中断模式
11、0x17&0x1A的运算结果是()
A. 0x01
B. 0x11
C. 0x17
D. 0x12
12、对寄存器R1的内容乘以4的正确指令是()
A. LSR R1,#2
B. LSL R1,#2
C. MOV R1,R1, LSL #2
D. MOV R1,R1, LSR #2
13、MOV R1,#0x1000 LDR R0,[R1],#4 执行上述指令序列后,R1寄存器的值是()
A. 0x1000
B. 0x1004
C. 0x0FFC
D. 0x4
14、R0=0x05, 执行BIC R0,R0,#3的运算后,R0结果是( )
A. 0x02
B. 0x03
C. 0x04
D. 0x05
15、GET伪指令的含义是( )
A. 包含一个外部文件
B. 定义程序的入口
C. 定义一个宏
D. 声明一个变量
16、若R1=2000H,(2000H)=0x86,(2008H)=0x39 ,则执行指令LDR R0,[R1,#8]!后R0的值为( )
A. 0x2000
B. 0x86
C. 0x2008
D. 0x39
17、将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]!
1、下面关于哈佛结构描述正确的是( )。
A、程序存储空间与数据存储空间分离
B、存储空间与IO空间分离
C、程序存储空间与数据存储空间合并
D、存储空间与IO空间合并
【ChatGPT 解析】
哈佛结构 是指在计算机体系结构中,将 「指令存储器(程序存储空间)与数据存储器」 分离的结构。在哈佛结构中,指令和数据存储器使用不同的总线和不同的物理存储器,这种结构可以提高数据存取的效率,因为指令和数据可以并行地访问。
而存储空间与IO空间分离,是指在计算机体系结构中,将存储器和IO接口分离的结构。在这种结构中,存储器和IO设备使用不同的总线和不同的物理接口,以实现相互独立的访问。这种结构可以提高计算机系统的稳定性和可靠性,同时也方便了硬件和软件的设计和维护。
和哈佛结构类似,存储空间与IO空间分离的结构也可以提高访问效率,因为存储器和IO设备可以并行地访问。但是这两者的分离方式不同,哈佛结构分离的是指令存储器和数据存储器,而存储空间与IO空间分离的结构分离的是存储器和IO接口。
因此,选项A描述的是哈佛结构的特点,程序存储空间和数据存储空间是分离的,选项B、C、D均不符合哈佛结构的定义。
2、关于ARM处理器的工作模式,以下说法错误的是:
A、用户模式是程序正常执行的工作模式
B、管理模式负责处理存储器故障,实现虚拟存储器和存储器的保护
C、系统模式运行特权级的操作系统任务
D、当处理器处于用户模式时,如果没有异常发生是不能改变工作模式的
【ChatGPT 解析】
管理模式 也称为特权模式,用于处理特殊的系统操作,如中断、异常、操作系统的内核代码等。
但是 管理模式并不负责处理存储器故障 ,这是由 数据访问中止模式 负责的。
A、用户模式是程序正常执行的工作模式,ARM处理器在用户模式下执行应用程序,访问受限的系统资源和寄存器,并且无法直接执行特权指令。如果应用程序试图执行特权指令或访问受限的资源,会导致异常发生,处理器会切换到异常模式。
C、系统模式也是一种特权模式,用于运行特权级别的操作系统任务。在系统模式下,操作系统可以执行特权指令,访问所有资源和寄存器,并且可以进行特权级别的操作,如任务切换、内存管理等。
D、该选项略有争议,但是按照教材P27、P28的内容,并且对比 B 选项,该选项也算正确,
3、存储一个 32 位数 0x2168465 到 2000H~2003H 四个字节单元中,若以小端模式存储,则2000H存储单元内容 为( )
A、 0x21
B、 0x68
C、0x65
D、0x02
【博主解析】
大端/小端模式是重点知识,可以把小端模式按照下图中「倒车入库」的方式理解,就会容易很多了。
4、下面关于ARM处理器的体系结构描述哪一个是错误的: ( )
A、三地址指令格式
B、所有的指令都是单周期执行
C、指令长度固定
D、Load-Store结构
【ChatGPT 解析】
ARM处理器的指令集体系结构(ISA)采用的是RISC(Reduced Instruction Set Computing)架构,以精简的指令集为基础,支持高效的指令流水线执行。
B、并非所有的ARM指令都是单周期执行的。由于指令的复杂度不同,一些指令需要多个时钟周期才能完成执行。ARM处理器为了保持高效性,采用了流水线执行的方式,可以在一个时钟周期内执行多个指令的不同阶段。但是,在某些情况下,由于数据相关性或控制相关性等因素,可能需要中断流水线执行,从而导致指令执行的延迟。
A、ARM 指令集采用三地址指令格式,即一个指令可以同时操作三个操作数(源操作数1、源操作数2和目的操作数)。
C、该选项略有争议,指令长度方面,ARM处理器采用变长指令长度的方式,指令长度可以是2字节或4字节,以满足不同的应用需求。这里的固定可能是指 指令长度要么是 2 字节或 4 字节。(本题在一些搜题软件上的答案也是B)
D、Load-Store 结构则是 ARM 处理器的一种常见的指令执行方式,即只有Load和Store指令才能访问存储器中的数据,其他指令只能通过寄存器来操作数据,这样可以提高存储器的访问效率。
5、ARM 指令集和Thumb 指令集分别是( )位的。
A、8 位,16 位
B、16 位,32 位
C、16 位,16 位
D、32 位,16 位
【ChatGPT解析】
ARM 指令集和 Thumb 指令集分别是 32 位和 16 位的。
ARM指令集具有更强的功能和灵活性,而Thumb指令集则具有更小的指令长度和更高的代码密度,可以在节省存储空间和提高执行速度之间做出平衡。
在 ARMv7 指令集中,还有一种指令集,称为 Thumb-2,它既支持 16 位指令,又支持 32 位指令,可以在需要时灵活地切换使用。
6、ARM Cortex A8的工作状态包括( )。
A、测试状态和运行状态
B、挂起状态和就绪状态
C、就绪状态和运行状态
D、ARM 状态和 Thumb 状态
【ChatGPT解析】
ARM Cortex A8是一款基于 ARMv7 架构的处理器,支持 ARM 状态和 Thumb 状态两种工作状态。
在ARM状态下,处理器执行32位的ARM指令,提供较高的性能和复杂度;在Thumb状态下,处理器执行16位的Thumb指令,提供较高的代码密度和低功耗。处理器可以在ARM状态和Thumb状态之间切换,以根据应用程序的需求来平衡性能和功耗。
除了ARM状态和Thumb状态,处理器还支持一些特殊状态,如 Jazelle 状态和 ThumbEE 状态。在Jazelle状态下,处理器执行Java字节码,用于支持Java虚拟机(JVM)和Just-In-Time(JIT)编译器。在ThumbEE状态下,处理器执行基于Thumb指令的执行环境(TEE),用于安全应用程序的运行。
7、对于 ARM7 三级流水线,当一条指令被译码时,下一条指令正被( )
A、取指。
B、译码。
C、PC值递增。
D、执行
【博主解析】
理想的 ARM7 的流水线由三个阶段组成,分别是取指、译码和执行。如下图所示:
当前指令正在被译码时,下一条指令已经被取指,等待进入译码阶段。这样可以充分利用处理器的性能,提高指令的执行效率。
8、复位后,ARM处理器处于()模式。
A. USER
B. SVC
C. SYSTEM
D. ARM
【博主解析】
根据教材 P27 页表格,复位后,ARM 处理器位于 管理模式(Supervisor,SVC)
9、寄存器R13除可做通用寄存器外,还可以做( )
A、程序计数器
B、链接寄存器
C、栈指针寄存器
D、基址寄存器
【ChatGPT解析】
在ARM体系结构中,R13 是栈指针寄存器(Stack Pointer),通常简称SP。它的作用是存储当前栈的地址,以及在函数调用时分配和回收栈空间。
10、在下列ARM处理器的各种模式中,只有( )模式不可以自由地改变处理器的工作模式( )。
A、用户模式(User)
B、系统模式(System)
C、终止模式(Abort)
D、中断模式
【博主解析】
根据教材 P27、28 页内容,只有用户模式(User)模式不可以自由地改变处理器的工作模式。
用户模式是 ARM 处理器最基本的工作模式,用于一般的应用程序的执行。在用户模式下,处理器只能访问受保护的寄存器和内存区域,不能执行特权指令,也不能改变处理器的工作模式。
其他模式,如系统模式、中断模式和终止模式,都具有更高的特权级别,可以执行更多的指令和操作,并且可以改变处理器的工作模式。例如,系统模式用于操作系统内核的执行,中断模式用于响应外部中断事件,终止模式用于处理严重的错误情况。
因此,只有用户模式不可以自由地改变处理器的工作模式。
11、0x17 & 0x1A的运算结果是()
A. 0x01
B. 0x11
C. 0x17
D. 0x12
【ChatGPT解析】
进行位运算时,按位与运算符(&)会将两个操作数的对应位上的值进行「与」运算,只有当两个操作数的对应位上的值都为1时,结果位上的值才为1,否则为0。
对于0x17 & 0x1A,按位进行与运算:
0001 0111
& 0001 1010
-----------
0001 0010
因此,0x17 & 0x1A的运算结果是 0x12(十六进制),或者 18(十进制),所以选项D是正确的答案。
12、对寄存器R1的内容乘以4的正确指令是()
A. LSR R1,#2
B. LSL R1,#2
C. MOV R1,R1, LSL #2
D. MOV R1,R1, LSR #2
【ChatGPT解析】
要将寄存器 R1 中的内容乘以 4,可以使用逻辑左移指令(LSL)或移位后的移动指令(MOV)。
逻辑左移指令将操作数的二进制位向左移动指定的位数,并在右侧插入 0。移位后的移动指令将操作数左移指定的位数,并将结果移回到目标寄存器。
在选项A和D中,都使用了移位指令,但是是逻辑右移(LSR),而不是逻辑左移(LSL),这样不会得到正确的乘法结果。因此,选项A和D都是错误的。
在选项B中,使用了逻辑左移指令,但是没有将结果移回到目标寄存器,因此也是错误的。
正确的选项是C,使用移位后的移动指令将 R1 左移两位,然后将结果移回到 R1 中,从而得到 R1 的内容乘以4 的结果。
因此,正确的指令是:
MOV R1, R1, LSL #2
13、执行下面指令序列后,R1寄存器的值是( )。
MOV R1,#0x1000
LDR R0,[R1],#4
A. 0x1000
B. 0x1004
C. 0x0FFC
D. 0x4
【ChatGPT解析】
执行上述指令序列后,R1寄存器的值是 0x1004。
该指令首先将 0x1000 赋值给 R1,然后从地址 R1 开始,读取 4 个字节的数据到 R0,同时 R1 值加上 4。
因此,执行完指令序列后,R1 的值应该是 0x1004。
14、R0=0x05, 执行 BIC R0,R0,#3 的运算后,R0结果是( )
A. 0x02
B. 0x03
C. 0x04
D. 0x05
【ChatGPT解析1】
BIC R0, R0, #3
其中,「BIC」是指位清零指令(Bit Clear),将目标寄存器的指定位清零。
R0 是 ARM 处理器的寄存器名,这里表示目标寄存器。
#3 是一个立即数,表示要清零的位所在的位偏移量。因为 3 的二进制是 00000011,所以这个指令会将 R0 的二进制表示的低两位清零。
【ChatGPT解析2】
15、GET伪指令的含义是( )
A. 包含一个外部文件
B. 定义程序的入口
C. 定义一个宏
D. 声明一个变量
【ChatGPT解析】
GET 是 ARM 汇编语言中的一个伪指令,用于将一个外部文件的内容包含到当前汇编文件中。可以将GET指令看作是「复制粘贴」操作,它会将外部文件的内容复制到指令所在的位置,从而使程序能够使用外部文件中的变量、常量、函数等信息。
16、若 R1=2000H,(2000H)=0x86,(2008H)=0x39 ,则执行指令LDR R0,[R1,#8]!后 R0 的值为( )。
A. 0x2000
B. 0x86
C. 0x2008
D. 0x39
【博主解析】
该指令的含义是:将地址为 R1+8 的内存数据读取到 R0 寄存器中,并将R1的值加上8(! 表示自动修改基地址R1的值)。
在本题中,R1=2000H,(2008H)=0x39,所以将 0x39 读入 R0 中,同时R1的值变为2008H。因此,R0的值为0x39。
17.将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]!
【ChatGPT解析】
STRB
指令是将 R0 寄存器中的 一个字节的数据 存储到存储器中,存储器的地址为R1+4,即[ R1 , #4 ]。而且在存储数据后,R1自动加上1,指向下一个字节。因此,STRB指令是将一个字节的数据从寄存器存储到内存中,并且自动更新目标地址。
STR
指令是将 R0 寄存器中的 一个字的数据 存储到存储器中,存储器的地址为R1+4,即[ R1 , #4 ]。和STRB指令不同,STR指令存储的是一个字的数据,而不是一个字节,因此存储后R1自动加上4,指向下一个字的地址。
STRH
指令是将R0寄存器中的 一个半字的数据 存储到存储器中,存储器的地址为 R1+4,即[ R1 , #4 ]。和STRB指令类似,STRH指令存储的是一个半字的数据,存储后R1自动加上2,指向下一个半字的地址。
本题需要存储一个字节的数据,所以选择 D
如果各位小伙伴觉得本博客写的不错,可以在左下角 点个赞
这样可以让 更加优质的文章 有 更大的概率 被推送到 搜索界面的榜首,为未来的小伙伴们节约更多搜索、阅读的成本。
同时,你的支持 也是我 不断创作 的动力。☘️
有想要看更多期末系列的小伙伴,也可以关注我的专栏「期末指北」。
我们 下期再见。