嵌入式系统开发与应用教程田泽复习题Word文档格式.doc
《嵌入式系统开发与应用教程田泽复习题Word文档格式.doc》由会员分享,可在线阅读,更多相关《嵌入式系统开发与应用教程田泽复习题Word文档格式.doc(6页珍藏版)》请在冰点文库上搜索。
B、32
C、6
D、37
9、若R1=2000H,(2000H)=0x28,(2008H)=0x87,则执行指令LDR
后R0的值为(
0x28
10、和PC机系统相比,下列哪个不是嵌入式系统独具的特点(
)
A、系统内核小
B、专用性强
C、可执行多任务
D、系统精简
11.ARM公司是专门从事(
A、基于RISC技术芯片设计开发
B、ARM芯片生产
C、软件设计
D、ARM芯片销售
12.ARM9系列微处理器是(
A、三级流水线结构
B、四级流水线结构
C、五级流水线结构
D、六级流水线结构
13.所有工作模式下,(
)都指向同一个物理寄存器,即各模式共享
A、R0-R7
B、R0-R12
C、R8-R12
D、R13,R14
14..当异常发生时,寄存器(
)用于保存CPSR的当前值,从异常退出时则可由它来恢复CPSR.
A、SPSR
B、R13
C、R14
D、R15
15.能实现把立即数0X3FF5000保存在R0中的指令是(
A、LDR
R0,
=
0X3FF5000
B、LDR
C、MOV
D、MOV
=0X3FF5000
16.ARM指令LDMIA
RO,{R1,
R2,
R3,R4
}
实现的功能是(
)
A、R1←[R0],R2←[R0+4],R3←[R0+8],R4←[R0+12]
B、R1←[R0],R2←[R0-1],R3←[R0-2],R4←[R0-3]
C、R1←[R0],R2←[R0+1],R3←[R0+2],R4←[R0+3]
D、R1←[R0],R2←[R0-4],R3←[R0-8],R4←[R0-12]
17.(
)伪指令用于定义一个代码段或数据段
A、RLIST
B、DCB
C、MAP
D、AREA
18.在ARM体系结构中,要从主动用户模式(User)切换到超级用户模式(Supervisor),应采用(
)方法。
A、直接修改CPU状态寄存器(CPSR)对应的模式
B、先修改程序状态备份寄存器(SPSR)到对应的模式,再更新CPU状态
C、使用软件中断指令(SWI)
D、让处理器执行未定义指令
三、简答
第一章:
1、什么是嵌入式系统?
与通用计算机系统相比,它有哪些特点?
答:
定义:
以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
特点:
“专用”的计算机系统;
运行环境差异很大;
比通用PC系统资源少得多;
低功耗、体积小、集成度高、成本低;
具有完整的系统测试和可靠性评估体系;
具有较长的生命周期;
需要专用开发工具和方法进行设计;
包含专用调试路;
多科学知识集成系统
2、
嵌入式系统组成结构包括哪几部分?
嵌入式系统组成结构的理解。
嵌入式系统由硬件和软件组成。
嵌入式系统的硬件是以嵌入式微处理器为中心,配置存储器、I/O设备、通信模块以及电源等必要的辅助接口。
嵌入式系统软件包括板级支持包层、实时操作系统层、应用程序接口层和应用程序层四层。
3、
简述嵌入式系统的硬件组成
4、试分析通用操作系统与嵌入式操作系统的异同点,并解释什么是嵌入式实时操作系统。
嵌入式操作系统和嵌入式实时操作系统的概念有哪些不同?
通用操作系统和嵌入式操作系统都对软、硬件资源进行分配和调度以及控制协调等,嵌入式操作系统与通用操作系统的不同之处在于它具有实时性高、可靠性好、可裁剪、体积小等特性。
嵌入式实时操作系统(Real
Time
Embedded
Operating
System)是一种实时的、支持嵌入式系统应用的操作系统,是嵌入式系统的重要组成部分。
嵌入式操作系统只注重平均性能,对整个系统来说,所有任务的平均响应时间是关键,对单个任务的响应时间不关心。
嵌入式实时操作系统最主要的特性是性能上的“实时性”,也就是说系统的正确性不仅依赖于计算的逻辑结果,也依赖于结果产生的时间。
是一个能够
在指定的或者确定的时间内,完成系统功能以及对外部或内部、同步或异步事件作出响应的系统。
5、
嵌入式操作系统具有哪些基本管理功能?
多任务管理,存储管理,外围资源管理和中断管理。
第二章:
6、
试比较CISC体系结构和RISC体系结构的特点。
ARM为何采用RISC结构?
比较:
CISC指令集设计的主要趋势是增加指令集的复杂度。
而复杂指令集的高性能是以宝贵、有限的芯片面积为代价的。
RISC的中心思想是精简指令集的复杂度、简化指令实现的硬件设计,硬件只执行很有限的最常用的那部分指令,大部分复杂的操作则由简单指令合成。
RISC思想大幅度提高了计算机性能价格比。
采用RISC原因:
(1)Load/store体系结构
(2)固定的32位指令
(3)地址指令格式
7、分别以ARM7TDMI和ARM9TDMI为例,介绍3级流水线和5级流水线的执行过程,并进行相应的比较。
3级流水线分为:
取指,译码和执行。
5级流水线分为:
取指、译码、执行、缓冲\数据、回写。
它们的区别在于3级流水执行级中的寄存器读在5级流水的译码级中处理。
3级流水执行级中的寄存器写在5级流水的回写级中处理。
5级流水中的第4级缓冲\数据表示如果需要则访问数据存储器,否则只是简单地缓冲一个时钟周期。
3级流水采用冯诺依曼结构,不能同时访问指令存储器和数据存储器;
5级流水采用哈佛结构,指令存储器与数据存储器分开,可以同时访问。
8、ARM微处理器支持哪几种工作模式?
各个工作模式有什么特点?
共支持7中工作模式:
用户模式,系统模式,快速中断(FIQ)模式,普通中断(IRQ)模式,管理(SVC)模式,中止模式和未定义模式。
用户模式:
ARM处理器正常的程序执行状态。
快速中断模式(FIQ):
用于高速数据传输或通道处理。
普通中断模式(IRQ):
用于通用的中断处理。
管理模式(SVC):
操作系统使用的保护模式。
中止模式:
当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
系统模式:
运行具有特权的操作系统任务。
未定义模式:
处理未定义的指令陷阱,支持硬件协处理器的软件仿真。
9ARM处理器共有多少个寄存器?
这些寄存器在用户编程中的功能是如何划分的?
ARM状态下的通用寄存器可分为哪几类?
ARM处理器共有37个寄存器,其中31个为通用寄存器,其余6个为状态寄存器。
通用寄存器可分为未分组寄存器R0-R7,分组寄存器R8-R14和程序计数器R15。
10简述ARM状态下分组寄存器R13,R14,R15的特殊功能及R15的使用注意事项。
寄存器R13通常用做堆栈指针SP;
寄存器R14用作子程序链接寄存器LR;
寄存器R15被用作程序计数器PC。
R15值的改变将引起程序执行顺序的变化,这有可能引起程序执行中出现一些不可预料的结果,因此,对R15的使用一定要慎重。
ARM处理器采用多级流水线技术,因此保存在R15的地址并不是当前指令的地址。
11、简述ARM处理对异常中断的相应过程。
(1)将CPSR的内容保存到将要执行的异常中断对应的SPSR中
,实现对处理器当前状态、中断屏蔽位、各条件标志位的保存。
(2)设置当前状态寄存器CPSR中的相应位设置工作模式控制位,使处理器进入相应的执行模式
设置中断标志位,禁止IRQ中断
当进入RESET或FIQ模式时,还要禁止FIQ中断
(3)将引起异常指令的下一条指令的地址保存到新的异常工作模式的R14
,使异常处理程序执行完后能正确返回原程序。
(4)给程序计数器(PC)强制赋值,根据中断向量地址跳转
去执行中断处理程序。
12.如果FIQ、IRQ和第3个异常(不是复位)同时发生,ARM应如何处理?
如果第3个异常是数据中止,处理器将在进入数据中止处理程序后立即进入FIQ处理程序。
数据中止将“记”在返回路径中,当FIQ处理程序返回时进行处理。
如果第3个异常不是数据中止,将立即进入FIQ处理程序。
当FIQ和IRQ两者都完成时,程序返回到产生第3个异常的指令并进行相应处理。
14什么是ARM异常中断向量表?
它有何作用?
存储在什么地方?
中断向量表中指定了各异常中断与其处理程序的对应关系。
在ARM体系中,异常中断向量表大小为32字节,每个异常中断占据4个字节。
ARM异常向量表通常以存储器的低端0x0为起始地址,大多数ARM处理器核也支持将异常向量表存放在以0xFFFF0000为起始地址的32字节空间中。
每个异常中断对应的中断向量表的4个字节的空间中存放一个跳转指令或者一个向PC寄存器中赋值的数据访问指令LDR。
通过这两种指令,程序将跳转到相应的异常中断处理程序处执行。
15.简述ARM的存储器层次。
1)寄存器组——存储器层次的顶层,访问时间几个ns
2)片上RAM——具有和片上寄存器组同级的读/写速度
3)片上Cache——访问时间10ns,2级片外Cache访问时间几十ns
4)主存储器——访问时间50ns
5)硬盘——访问时间几十ms
16.大端存储法与小端存储法有什么不同?
对存储数据有什么要求与影响?
小端:
较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址。
大端:
较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。
第三章:
17、
ARM处理器如何进入和退出Thumb指令模式?
用汇编语言实现ARM状态和Thumb状态互相的切换。
进入Thumb模式:
有2种方法。
一种是执行一条交换转移指令BX,将指令中的目标地址寄存器的最低位置1,并将其他位的值放入程序计数器PC,则可以进入Thumb指令。
另一种方法是利用异常返回,也可把微处理器从ARM模式转换为Thumb模式。
退出Thumb模式:
也有2种方法。
一种是执行Thumb指令中的交换转移BX指令可以显式地返回到ARM指令流。
另一种是利用异常进入ARM指令流。
18.如何在汇编语言中定义和使用宏?
答:
宏名
MACRO
宏体
MEND
调用:
宏调用的方式在源程序中需要复制宏体的地方写宏的名字。
宏名单独占一行,当源程序被汇编时,汇编程序将对宏调用进行宏体复制,并取代宏名,这种复制操作称为宏展开。
为了与源程序的其他部分相区分
19、简述ARM汇编语言中伪操作,宏指令和伪指令的含义,伪操作和伪指令都分为哪几类?
伪操作----伪操作只是在汇编过程中起作用,汇编结束,伪操作的使命也就结束。
宏指令----是一段独立的程序代码,可插在源程序中,它通过伪操作来定义。
伪指令----是ARM汇编语言程序里的特殊指令助记符,在汇编时将被合适的机器指令代替成ARM或Thumb指令,从而实现真正的指令操作。
伪操作分类:
①符号定义伪操作②数据定义伪操作③汇编控制伪操作
④信息报告伪操作⑤其他伪操作
伪指令分类:
①小范围的地址读取ADR②中等范围的地址读取ADRL
③大范围的地址读取LDR④空操作伪指令NOP
20.ARM寻址方式有几种?
举例说明ARM如何进行不同方式的寻址。
1).寄存器寻址;
如MOVR1,R2
2).立即寻址;
如MOVR0,#0xFF00
3).寄存器移位寻址;
如MOVR0,R2,LSL#3
4).寄存器间接寻址;
如LDRR1,[R2]
5).基址加偏址寻址;
如LDRR2,[R3,#0x0C]
6).多寄存器寻址;
如LDMIAR1!
{R2-R4,R6}
7).堆栈寻址;
如STMFDSP!
{R1-R7,LR}
8).相对寻址。
如BLSUBR1
第四章:
15、S3C44B0X有多少个通用可编程多功能输入/输出引脚?
可分为几类端口?
71个通用可编程多功能输入/输出引脚,可分为7类端口:
(1)2个9位输入/输出端口(Port
E和Port
F);
(2)2个8位输入/输出端口(Port
D和Port
G);
(3)1个16位输入/输出端口(Port
C);
(4)1个10位输出端口(Port
A);
(5)1个11位的输出端口(PortB)
四、编程:
1、两个矢量的标量积:
MOV
R11,#20
初始化循环次数
R10,#0
初始化总和
LOOP
LDR
R0,[R8],#4
读取第一个分量
LDR
R1,[R9],#4
读取第二个分量
MLA
R10,R0,R1,R10
乘积累加R10=R0*R1+R10
SUBS
R11,R11,#1
减循环计数R11=R11-1
BNE
2、10个数求和:
MOV
R1,#1
R0,#0
ADD
R1,R1,R0
ADD
R0,R0,#1
CMP
R0,#10
3.把0x1000地址开始的五个字求和结果存到0x2000的地址
MOVR0,#0x1000
MOVR11,#0x2000
LDMIAR0,{R1—R5}
ADDR10,R1,R2
ADDCR9,R3,R4
ADDCR8,R10,R9
ADDCR7,R8,R5
STRR7,[R11]
4把0x1000处开始的8个字存到0x2000开始的地址
MOVR0,#0x1000
MOVR1,#0x2000
LDMIAR0,{R1—R8}
STMIAR11,{R1—R8}
3、编写以字节为单位的字符串拷贝子程序,要求从存储器某处拷贝到另一处。
源字符串的起始地址放入R1,长度(以字节为单位)放入R2,目的字符串的起始地址放入R3。
LDRB
[R1],
#1
STRB
[R3],
PC,
LR
3.1计算X*2^8+Y/2^2+Z
LDRR0,X
LDRR1,y
LDRR2,Z
ADDR3,R2,R1ASR#2R3=Z+Y/4
ADDR4,R3,R0ASL#8 R4=R3+X*2^8
4、基于绝对地址的内存表举例。
下面的伪操作序列定义一个基于绝对地址的内存表,其首地址为固定地址8192(0x2000)。
该内存表中包含5个作用域:
consta长度为4字节,constb长度为4字节,x长度为8字节,y长度为8字节,string长度为16字节。
MAP
8192
;
内存表的首地址为8192(0x2000)
c
onsta
FIELD
4
consta长度为4字节,相对位置为0
constb
constb长度为4字节,相对位置为4
x
8
x长度为8字节,相对位置为8
y
y长度为8字节,相对位置为16
string
16
string长度为16字节,相对位置为24
在指令中可以这样引用内存中的数据域:
R0,consta
将consta地址处对应的内容加载到R0
5、.基于相对地址的内存表举例。
下面的伪操作序列定义一个基于相对地址的内存表,其首地址为0与R9寄存器值的和,该内存表包含5个数据域(与例11相同)。
0,R9
内存表的首地址为R9寄存器的值
consta
constb长度为4字节,相对位置为4
x长度为8字节,相对位置为8
可以通过下面的指令访问地址范围超过4KB的数据:
ADR
R9,FIELD
伪指令,将在后面介绍
R5,constb
相当于LDR,R5,[R9,#4]
6、编写一段程序实现在C语言中调用汇编语言程序,实现将1KB大小的内存块以字的形式复制到另一内存地址
#include<
stdio.h>
#define
NUM
1024
int
main()
{
char
strFrom[NUM]
"
helloworld"
};
strTo[NUM];
__asm
mov
ecx,
NUM;
lea
esi,
strFrom;
edi,
strTo;
rep
movsb;
printf("
%s\n"
strTo);
7.ARM处理器如何进入和退出Thumb指令模式?
ARM状态切换到Thumb状态:
CODE32
LDRR0,=Lable+1
BXR0
CODE16
LableMOVR1,#12
Thumb状态切换到ARM状态:
CODE16
LDRR0,=Lable
BXR0
CODE32
LableMOVR1,#10
8.请将下面C语言代码转换成汇编语言。
(1)If(a==0||b==1)
c=d+e
CMPR0,#0
CMPNER1,#1
ADDEQR2,R3,R4
(2)if((a==b)&
&
(c==d))&
(e==f)
g++;
CMPR0,R1
CMPEQR2,R3
CMPEQR4,R5
ADDEQR6,R6,#1
9.编写以字节为单位的字符串拷贝子程序,要求从存储器某处拷贝到另一处。
LOOP
LDRBR0,[R1],#1
STRBR0,[R3],#1
SUBSR2,R2,#1
BNELOOP
MOVPC,LR
10.读懂下面一段程序,程序执行过程中寄存器R0、R1、R2中的内容如何变化?
试分析并给出程序每一步所得的结果。
从执行完loop循环开始,循环结束时R0←0
MOVR1,#y;
R1←76
ADDR2,R0,R1,LSL#1;
R2←152
MOVSP,#0x1000;
SP←0x1000
STRR2,[SP];
mem32[0x1000]←152
MOVR0,#Z;
R0←96
ANDR0,R0,#0XFF;
MOVR1,#y;
ADDR2,R0,R1,LSR#1;
R2←134
LDRR0,[SP];
R0←152
MOVR1,#0x01;
R1←1
ORRR0,R0,R1;
R0←153(0x99)(0b10011001)
MOVR1,R2;
R1←134(0x86)(0b10000110)
R2←220(0xDC)(0b11011100)
11.请使用MRS和MSR指令,通过修改CPSR寄存器,写出将处理器工作模式变为管理模式的子程序。
(注意不能影响其它位,管理模式的二进制编码为10011)
MRSR0,CPSR
ANDR0,R0,#0b11100000
ORRR0,R0,#0b00010011
MSRCPSR_c,R0
MOVPC,LR
1