一、25个知识点(可考选择)
1. ARM属于RISC架构
2. ARM指令集是32位宽,Thumb指令集是16位宽的。
3. ARM指令集是4字节对齐,Thumb指令集是2字节对齐的
4.复位后,ARM处理器处于SVC模式,ARM状态
5. ARM处理器总共37个寄存器,System模式下使用17个寄存器,SVC模式下使用18个寄存器。
6. ARM处理器中优先级别最高的异常为RESET,FIQ、IRQ异常可以用来相应中断
7. ARM数据处理指令中有效的立即数是(ACEGH)
[A] 0X00AB0000 [B] 0X0000FFFF [C ] 0XF000000F [D ] 0X08000012
[E] 0X00001F80 [F] 0XFFFFFFFF [G] 0 [H] 0XFF000000
8. ATPCS规定中,推荐子函数参数最大为4 个
9. ATPCS规定中,栈是满减
10.在用ARM汇编编程是,其寄存器有多个别名,通常PC是指R15,LR是指R14,SP是指R13
11. CPSR寄存器中反映处理器状态的位是T位
12.下面属于ARM子程序调用指令的是BL
13. ARM7属于冯.诺依曼结构,ARM9属于哈佛结构。
14. ARM7是3级流水线,ARM9是5级流水线。
15. ARM中可以访问状态寄存器的指令是MRS,能够访问内存的指令是LDR
16.异步串口中数据位可以是5、6、7、8
17. I2C协议中有两根线
18. I2C协议中设备地址模式有7位、10位地址模式
19. S3C2410采用的是ARM920T核心
20.在串行异步通讯中,发送端串口的TxD要和接收端串口的RxD相连接
21.在嵌入式系统设计中可以通过ADC来测量电池电压,可以用PWM来驱动喇叭发声
22. MMU的作用有内存保护、地址转换
23.以下属于DMA特点的有占用总线,但不占用CPU
24.下面的设备中属于闪存的设备有(AD)
[A] K9F1208U0M [B] MAX3232 [C] HY57V561620 [D] Am29LV160D
25. I2C传输是半双工方式传输
二、简述
•什么是嵌入式操作系统?
答:嵌入式系统是以应用为中心,以计算机技术为基础,软/硬件可裁减,功能。可靠性,成本,体积,功耗要求严格的专用计算机系统。
•与通用计算机相比,嵌入式系统有哪些特点?
答:(1)嵌入式系统通常是面向特定应用的;
(2)嵌入式系统是将计算机技术,半导体技术和电子技术与各行各业的具体应用相结合的后的产物,是一门综合技术学科;
(3)嵌入式系统和具体应用有机的结合在一起,它的升级换代也是和具体产品同步进行的,因此嵌入式产品一旦进入市场,就有较长的生命周期;
(4)为了提高执行速度和可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存储于磁盘等载体中;
(5)嵌入式系统本身不具有自主开发能力,即使设计完成以后用户通常也不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。
•简述ARM发生异常时,ARM核心会自动做哪些事情?从异常返回时,我们要做哪些事情?
当异常产生时, ARM core:
拷贝CPSR到SPSR_
设置适当的CPSR位:
改变处理器状态进入ARM状态
改变处理器模式进入相应的异常模式
设置中断禁止位禁止相应中断(如果需要)
保存返回地址到LR_
设置PC为相应的异常向量
返回时,异常处理需要:
从SPSR_
从LR_
Note:这些操作只能在ARM态执行
•用ARM汇编指令写出实现64位加法和64位减法的代码段,使用的寄存器请自行分配。
假定低32位数存放在r0和r1里面,高32位数存放在r2和r3里面。
加法:
ADDS r0, r0, r1 //加S是因为要让这个操作影响标志位
ADC r2, r2, r3 //ADC是带进位的加法,如果上一条指令产生进位则一起加进来
减法:
SUBS r0, r0, r1 //加S是因为要让这个操作影响标志位
SBC r2, r2, r3 // SBC是带进位的减法指令
•请列举ARM处理器的模式和异常,并说明各个发生异常时ARM处理器所处的模式
异常模式: Reset 、Data Abort、FIQ、IRQ、Prefetch Abort、SWI、Undefined instruction
处理器模式
User :非特权模式,大部分任务执行在这种模式}
FIQ : 当一个高优先级(fast)}中断产生时将会进入这种模式
IRQ : 当一个低优先级(normal)中断产生时将会进入这种模式}
Supervisor}:当复位或软中断指令执行时将会进入这种模式
Abort :当存取异常时将会进入这种模式}
Undef :}当执行未定义指令时会进入这种模式
System :使用和User模式相同寄存器集的特权模式}
•FIQ的什么特点使得它处理的速度比IRQ快?
1)FIQ优先级比IRQ高,不会被中断
2)FIQ有自己的专属寄存器:r8~r12,不用对通用寄存器入栈保护,可以加快速度
3)FIQ位于异常向量表的末尾0x1c,故无需跳转,可以在这里直接放置异常处理函数
•什么指令可以放在中断向量表?
跳转指令,给PC赋值的指令 :B,LDR,MOV
•ARM处理器 中断向量表位于存储器的什么位置?
默认:0x0
也可以配置成:0Xffff0000
•下列ARM指令将做什么?
a) LDRH r0,[r1,#6]
b) LDR r0, =0x999
a:将r1寄存器的值加上6,然后把以这个值为地址的内存单元里的值取半字(低16位)赋给r0
b:将立即数0x999赋给r0,注意这是一个伪指令
•SWP指令的优势是什么?用来实现什么功能?
功能:在寄存器和存储器之间,由一次存储器读和一次存储器写组成的原子操作。完成一个字节或字的交换。
可以用来实现信号量
•S3C2410支持几种引导方式(或者说是内存映射方式)?简述Nand引导方式S3C2410硬件做的事情。
1)nor flash启动方式。
2)nand flash启动方式。
从Nand flash启动时,S3C2410首先会执行固化在片上ROM中的一段小程序,这段程序负责将nand flash前2K的代码搬移到片上RAM,然后将PC指针指向0x0地址(注意这个时候片上RAM被映射到0x0的起始地址)
•简述static和volatile关键字的含义和作用。
C语言中static关键字有两个作用,一是文件作用域,二是函数作用域。
文件作用域关键字static的作用是,以static申明的全局变量、函数不得被其他文件所引用
static另外一个用途是函数内部静态变量,只会被初始化一次,而且变量存储在全局数据段中而不是函数栈中,所以其生命期会一直持续到程序退出
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份
•ARM处理器有几种寻址方式,说明各种寻址的方式。
答:
立即寻址:操作数直接放在指令中。例如:ADD R0,R0,#0x3f ;R0←R0+0x3f
寄存器寻址:操作数放在寄存器中。例如:ADD R0,R1,R2 ;R0←R1+R2
寄存器间接寻址:操作数在内存,以寄存器中的值作为操作数的地址。 例如:LDR R0,[R1] ;R0←[R1]
基址加偏移量寻址(基址变址寻址):基址寄存器的内容与指令中的偏移量相加形成操作数的有效地址
例如:LDR R0,[R1,#4] ;R0←[R1+4] LDR R0,[R1,R2] ;R0←[R1+R2]
多寄存器寻址:一条指令可以完成多个寄存器值的传送。
例如: LDMIA R0,{R1,R2,R3,R4} ;R1←[R0];R2←[R0+4];R3←[R0+8];R4←[R0+12]
堆栈寻址:堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。
例如:STMFD R13!,{R0,R4-R12,LR} LDMFD R13!,{R0,R4-R12,PC}
•举例介绍嵌入式处理器有哪几类?
答:
1.嵌入式微处理器(Embedded Microprocessor Unit,EMPU);
2.嵌入式微控制器;(Embedded Microcontroller Unit,EMCU)
3.嵌入式DSP处理器(Embedded Digital Signal Processor,EDSP);
4.嵌入式片上系统(Embedded System on Chip,EsoC);
•什么是立即数?请简要描述立即数在使用时有什么注意要点。
答:
立即数,主要是指寻址时直接在指令中出现的数,在使用时注意:
(1)立即数前需要加#
(2)ARM指令只有32位长,立即数在指令中占12位存储空间,ARM用这12位空间8位表示有效数字-基数B,4位表示译为的数M,按照把B循环右移M*2位,构造成一个新的32位的数,其它位补0,所以在使用立即数时,要注意其是否合法。
•请问BL指令跳转时LR寄存器保存的是什么内容?并请简述原因。
BL跳转时,LR中保存的是执行BL跳转指令的下一条指令的地址,考虑流水线的情况,即当前的PC-4。LR用来在需要返回程序时从LR中还原程序执行的位置继续执行。
•ARM内核有多少个寄存器,请列举出这些寄存器的名字和数量。
ARM有37个寄存器
(1)未分组寄存器:R0-R7,共8个;
(2)分组寄存器R8-R14,其中FIQ模式下有单独的一组R8-R12共5个,另外6种模式共用一组R8-R12,共5个,USR和SYS模式共用一组R13-R14,共2个,另外5种模式下各有独自的一组R13-R14,共10个;
(3)程序计数器PC即R15寄存器,共1个;(4)状态寄存器CPSR,和5个备份状态寄存器SPSR,共6个;ARM总计37个寄存器。
•ARM通用寄存器中,有3个寄存器有特殊功能和作用,请写出它们的名字和作用。
R13:SP栈指针寄存器,用来保存程序执行时的栈指针位置;
R14:LR返回链接寄存器,用来保存程序执行BL指令或模式切换时的返回原程序继续执行的地址;
R15:PC程序计数器,保存程序执行的当前地址。
•ARM的CPSR寄存器的位定义如图所示,试简述各位的功能。
标志位含义 :
N N=1 表示运算的结果为负数;N=0 表示运算的结果为正数或零
Z Z=1 表示运算的结果为零;Z=0 表示运算的结果为非零
C C=1 表示有进位,C=0 表示没有进位
V V=1 表示符号位溢出,V=0 表示结果没有溢出
Q 在ARM vTE/J 架构支持,指示DSP 指令是否溢出
J 仅ARM 5TE/J 架构支持,J = 1 表示处理器处于Jazelle 状态
I I=1 表示禁止IRQ F F=1 表示禁止FIQ
T 仅ARM xT 架构支持,T = 0 表示处理器处于ARM 状态,T=1 表示处理器处于Thumb 状态
•什么是伪指令和伪操作?在ARM汇编中有哪几种伪 指令?
答:在ARM汇编语言程序中有些特殊助记符,这些助记符与一般指令的助记符的不同之处在于没有相对应的操作码或者机器码,通常称这些特殊指令助记符伪指令,他们多完成的操作成为伪操作;
在ARM汇编中,有如下几种伪指令: (1)符号定义伪指令; (2)数据定义伪指令; (3)汇编控制伪指令; (4)信息报告伪指令; (5)宏指令及其他伪指令。
•如何定义寄存器列表,试举一个使用寄存器列表的例子,要求实现4个字的内存复制。
答:
AREA EXAMPLE1,CODE,READONLY
ENTRY
LDR R0,=0XFF ;把地址0XFF赋给R0
LDR R5,=0X0F ;把地址0X0F赋给R5 START
PBLOCK RLIST {R1-R4} ;把R1-R4定义为PBLOCK
LDMIA R0,PBLOCK ;把R0为首地址的内存4个字单元装载至R1到R4中
STMIA R5,PBLOCK ;把R1到R4的值依次存至R5为首地址的内存字单元
STOP
B STOP ;死循环
END
•如何定义一个宏,宏与子程序的区别是什么?
答:宏的格式为: MARCO和MEND
[$标号] 宏名 [$参数1,$参数2…..] 指令序列 MEND
MARCO表示一个宏定义的开始,MEND表示一个宏的结束,MARCO和MEND前呼后应可以将一段代码定义为一个整体,又称宏,然后在程序中就可以在程序中通过宏的名称及参数调用该段代码。
宏指令可以重复使用,这一点的使用方式与子程序有些相似,子程序可以节省存储空间,提供模块化的程序设计。但使用子程序机构时需要保存/恢复现场,从而增加了系统的开销,因此,在代码传递的参数较多并且比较短时,可以使用宏代替子程序,宏在被调用的地方展开。
来源:
CSDN - ARM 汇编复习题 (25选择 + 10简答)
豆丁 - 嵌入式面试题
百度文库 - ARM练习题
百度文库 - 嵌入式思考题(指令集练习)
百度文库 - ARM知识复习题(带参考答案)
百度文库 - 嵌入式系统课后答案
360文档中心 - arm面试题
chinaunix - arm常见问题