嵌入式面试题——ARM面试题(二)

时间:2021-09-06 11:57:14

填空题

1.ARM微处理器在较新的体系结构中支持两种指令集:______、______。

答案:ARM指令集、Thumb指令集

 

2.ARM处理器有9种基本寻址方式,分别是:______、______、______、______、______、______、

______、______、______。

答案:寄存器寻址、立即寻址、寄存器偏移寻址、寄存器间接寻址、基址寻址、多寄存器寻址、堆栈寻址、块拷贝寻址、相对寻址

 

3.ARM指令集可以分为6类,分别是:______、______、______、______、______、______。

答案:跳转指令、数据处理指令、程序状态寄存器(PSR)传输指令、Load/Store指令、协处理器指令、异常中断产生指令

 

4.在ARM的汇编程序中,有如下几种伪指令:_____、______、______、______、______。

答案:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令、其他伪指令

 

5.汇编语言与C/C++的混合编程通常有以下几种方式:_____、______、______。

答案:C/C++代码中嵌入汇编指令;从汇编程序中访问C程序变量;汇编程序、C/C++程序间的相互调用

 

6.ARM C/C++编译器支持和产生以下几种格式的文件:_____、____、____、______、______。

答案:filename.c 源文件、filename.h头文件、filename.o目标文件、filename.s汇编代码文件、filename.lst列表文件

 

问答题:

 

1.一条典型的ARM指令具有什么样的语法格式,并描述各选项意义。

答:一条典型的ARM指令语法格式如下所示:

<opcode>{<cond>}{S}<Rd>,<Rn>,< shifter_operand >

其中:

opcode是指令操作符编码;

cond 是指令执行的条件编码;

S决定指令的操作是否影响CPSR的值;

Rd是目标寄存器编码;

Rn是包含第1个操作数的寄存器编码;

shifter_operand 表示第2个操作数。

 

2.表示递增和递减的满堆栈和空堆栈有哪几种组合,请比较它们的特点。

答:有4种类型的堆栈,表示递增和递减的满堆栈和空堆栈的各种组合。

满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA,STMFA等。

空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空地址。指令如LDMEA,STMEA等。

满递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD,STMFD等。

空递增:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空地址。指令如LDMED,STMED等。

 

3.ARM协处理器指令包括哪3类,请描述它们的功能。

答:ARM协处理器指令包括以下3类:

用于ARM处理器初始化ARM协处理器的数据处理操作。

用于ARM处理器的寄存器和ARM协处理器的寄存器间的数据传送操作。

用于在ARM协处理器的寄存器和内存单元之间传送数据。

 

4.常见的符号定义伪指令,具体有哪几种?

答:常见的符号定义伪指令有如下几种。

用于定义全局变量的GBLA、GBLL和GBLS。

用于定义局部变量的LCLA、LCLL和LCLS。

用于对变量赋值的SETA、SETL、SETS。

为通用寄存器列表定义名称的RLIST。

 

5.汇编语言程序中常用的符号,需要遵循哪些规则?

答:汇编语言程序中常用的符号,必须遵循以下的约定。

符号区分大小写,同名的大、小写符号会被编译器认为是两个不同的符号。

符号在其作用范围内必须唯一。

自定义的符号名不能与系统的保留字相同。

符号名不应与指令或伪指令同名。

 

6.可执行映像文件通常由几部分构成,它们有什么特点?

答:可执行映像文件通常由以下几部分构成。

一个或多个代码段,代码段的属性为只读。

零个或多个包含初始化数据的数据段,数据段的属性为可读写。

零个或多个不包含初始化数据的数据段,数据段的属性为可读写。