【期末指北】嵌入式系统——选择题(feat. ChatGPT)

嵌入式系统

作者|Rickyの水果摊

时间|2023年2月20日


基本信息 ☘️

本博客摘录了一些 嵌入式系统常见选择题,供有需求的同学们学习使用。

部分答案解析由 ChatGPT 生成,博主进行审核。

使用教材信息:《嵌入式系统设计与应用——基于 ARM Cortex-A8 和 Linux(第二版)》

摊主的个人技术博客:https://rickyxcoder.top/ 🧑🏻‍💻
备用站点:https://rickyxcoder.gitee.io/


题目概览 🧑🏻‍💻

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

【博主解析】

大端/小端模式是重点知识,可以把小端模式按照下图中「倒车入库」的方式理解,就会容易很多了。

image-20230220113631867


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 的流水线由三个阶段组成,分别是取指、译码和执行。如下图所示:

image-20230220114956940

当前指令正在被译码时,下一条指令已经被取指,等待进入译码阶段。这样可以充分利用处理器的性能,提高指令的执行效率。


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】

image-20230217144937357


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


写在最后 🎉

如果各位小伙伴觉得本博客写的不错,可以在左下角 点个赞 👍

这样可以让 更加优质的文章更大的概率 被推送到 搜索界面的榜首,为未来的小伙伴们节约更多搜索、阅读的成本。 🚀

同时,你的支持 也是我 不断创作 的动力。☘️

有想要看更多期末系列的小伙伴,也可以关注我的专栏「期末指北」。

我们 下期再见。👋

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
嵌入式开发环境搭建可以使用eclipse作为IDE。以下是嵌入式eclipse的搭建步骤: 1. 下载eclipse:首先,你需要从eclipse官方网站下载适用于嵌入式开发的eclipse版本。根据你的操作系统选择合适的版本进行下载。 2. 安装eclipse:下载完成后,解压缩文件并将其安装到你的计算机上。根据操作系统的不同,安装步骤可能会有所不同。 3. 安装插件:为了进行嵌入式开发,你需要安装适用于嵌入式开发的插件。常用的插件有CDT(C/C++开发工具)和GNU ARM插件。你可以通过eclipse的插件管理器来安装这些插件。 4. 配置编译器:在eclipse中,你需要配置编译器以便进行编译和调试。根据你使用的嵌入式平台和编译器,配置方法可能会有所不同。通常,你需要指定编译器的路径和相关参数。 5. 创建项目:在eclipse中,你可以创建一个新的嵌入式项目。选择合适的项目模板,并根据你的需求进行配置。 6. 编写代码:在项目中,你可以编写嵌入式代码。使用eclipse的编辑器来编写代码,并利用插件提供的功能进行代码补全、调试等操作。 7. 编译和调试:使用eclipse的编译功能来编译你的代码。如果配置正确,你可以使用eclipse的调试功能来调试你的嵌入式应用程序。 8. 上传和运行:将编译后的代码上传到你的嵌入式设备上,并运行你的应用程序。 以上是嵌入式eclipse的搭建步骤。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值