1.ARM属于(A)
[A] RISC架构 [B]CISC架构
2.ARM 指令集是( C )位宽,Thumb 指令集是( B )位宽的。
[A] 8位 [B] 16 位 [C] 32位 [D] 64位
3.ARM 指令集是( D )字节对齐,Thumb 指令集是( B )对齐的
[A] 1 [B] 2 [C] 3 [D] 4
4.复位后,ARM处理器处于( B )模式,( D ) 状态
[A] User [B] SVC [C] System [D] ARM [E] Thumb
5.ARM处理器总共( E )个寄存器,System模式下使用( A )个寄存器,SVC模式下使用 ( B )个寄存器。
[A] 17个 [B] 18个 [C] 32个 [D] 36个 [E] 37个
6.ARM处理器中优先级别最高的异常为( E ),( ACE )异常属于硬件产生的中断
[A] FIQ [B] SWI [C] IRQ [D] SVC [E] RESET
7.ARM数据处理指令中有效的立即数是( ACEFGH )
[A] 0X00AB0000 [B] 0X0000FFFF [C ] 0XF000000F [D ] 0X08000012
[E] 0X00001F80 [F] 0XFFFFFFFF [G] 0 [H] 0XFF000000
8.ATPCS规定中,推荐子函数参数最大为( D ) 个
[A] 1 [B] 2 [C ] 3 [D ] 4
9.哪个是程序状态寄存器( D )
[A]R13 [B]SP [C]SPSR [D]CPSR
10.在用ARM汇编编程是,其寄存器有多个别名,通常PC是指( D ),LR 是指( C ),SP 是指( B )
[A] R12 [B] R13 [C ] R14 [D ] R15
11.CPSR寄存器中反映处理器状态的位是( AD )
[A] J位 [B] I位 [C ] F位 [D ] T位
12.下面属于ARM 子程序调用指令的是( ABCD )
[A] B [B] BX [C ] BL [D ] MOV
13.ARM7属于( A )结构,ARM9属于( B )结构。
[A] 冯.诺依曼 [B] 哈佛
14.ARM7是( B )级流水线,ARM9是( C )级流水线。
[A] 1 [B] 3 [C ] 5 [D ] 7
15.ARM中可以访问状态寄存器的指令是( D ),能够访问内存的指令是( B )
[A] MOV [B] LDR [C ] MCR [D ] MRS
16.异步串口中数据位最常用的是( D )
[A] 5 [B] 6 [C ] 7 [D ] 8
17.exynos4412 异步串口的停止位最常用的是( B )
[A] 0 [B] 1 [C ] 2 [D ] 3
18. LR寄存器有什么用 ( A )
[A] 保存函数返回地址 [B] 正在取指的指令的地址 [] 程序状态寄存
19.exynos4412采用的是( D )核心
[A] ARM7TDMI [B] ARM9TDMI [C ] ARM926EJ-S [D ] Cortex-A9
20.在串行异步通讯中,发送端串口的TxD要和接收端串口的( B )相连接
[A] TxD [B] RxD [C ] nCTS [D ] nRTS
21.在嵌入式系统设计中可以通过( B )来测量电池电压,可以用( C )来驱动喇叭发声
[A] DAC [B] ADC [C ] PWM [D ] Timer [E] RTC
22.FIQ是什么用户模式( D )
[A]用户模式 [B]超级用户模式 [C] 中断模式 [D]快速中断模式
23.以下属于DMA特点的有( BC )
[A] 占用CPU [B] 占用总线 [C ] 不占用CPU [D ] 不占用总线
24.协处理器有什么用( AB )
[A] 配置caches [B]配置MMU [C] 配置时钟 [D]设置堆栈
25.LDR R0, [R1], #4这条指令属于何种索引方式 ( C )
[A] 前索引 [B] 自动索引 [C ] 后索引
1.简述ARM发生异常时,ARM核心会自动做哪些事情?从异常返回时,我们要做哪些事情?
答:ARM发生异常时,ARM核心会:
(1) 拷贝CPSR到SPSR
(2) 设置适当的CPSR位:
改变处理器状态进入aRM状态
改变处理器模式进入相应的异常模式
设置中断禁止位禁止相应中断(如果需要)
(3)保存返回地址 LR
(4)设置PC为相应的异常向量
异常返回时,我们要做
(1)从SPSR
(2)从LR
下图的代码为针对ARM-V7写的中断配置汇编代码,与本简单题相对应。
.global _start
_start:
.text
@0x00地址 偏移量
@b reset @0x00
ldr pc,=reset
@b undef_handler @0x04
ldr pc,=undef_handler
@b swi_handler @0x08
ldr pc,=swi_handler
b pre_abort_handler @0x0c
b data_abort_handler @0x10
nop @0x14
nop @0x18
nop @0x1c
undef_handler:
nop
nop
undef_handler_end:
pre_abort_handler:
nop
nop
pre_abort_handler_end:
data_abort_handler:
nop
nop
data_abort_handler_end:
swi_handler:
@入栈保存现场(r0-r12寄存器的值)
stmfd sp!,{r0-r12, lr}
mov r2, #0xff
@得到软中断号
sub r3, lr, #4 @得到swi指令的地址
@得到该地址处的内容,也就是swi的机器码
ldr r4,[r3]
@得到机器码的0-23位
bic r4, #0xff000000
cmp r4, #2
moveq r5, #0xff @open
cmp r4,#3
moveq r5, #0xee @read
nop
swi_handler_end:
@出栈恢复现场
ldmfd sp!,{r0-r12, pc}^ @^将spsr恢复到cpsr
reset:
@给svc的sp赋值
ldr sp,=svc_stack_top
@切换工作模式为usr模式
@将cpsr的后五位改成b10000
mrs r0, cpsr
bic r0, #0x1f
orr r0, #0x10
msr cpsr, r0
ldr sp,=usr_stack_top
nop
mov r0, #2
mov r1, #3
add r2, r0, r1 @r2 5
nop
swi 2
mov r3,r2 @r3 5
nop
swi 3
nop
nop
.data
svc_stack:
.space 100
svc_stack_top:
usr_stack:
.space 100
usr_stack_top:
.end
2.简述一下MOV指令操作常量,立即数为何要合法?
答:ARM指令只有32位,无法放置任意32位立即数,事实上,MOV指令只有12位用来 表示立即数,所以需要指定一个规则,采取合法的方式。
3.请列举ARM处理器的模式和异常,并说明各个发生异常时ARM处理器所处的模式
答:7种模式 5中异常 7种异常源
4.FIQ的什么特点使得它处理的速度比IRQ快?
(1)FIQ比IRQ优先级高
处理FIQ是IRQ是禁止的
(2)FIQ 向量位于异常向量表的最末
异常处理程序可从异常量处连续执行
(3)FIQ 模式有5个额外的私有寄存器 (r8-r12)
中断处理必须保护其使用的非私有寄存器
5.分析下面程序各语句的功能
SWI_Handler:
STMFD sp!, {r0-r3,r12,lr} @保护现场
MOV r1, sp @将堆栈指针的值存入r1
MRS r0, spsr
STMFD sp!, {r0} @把spsr也保存在堆栈中
TST r0, #0x20 @测试是否ARM状态,bit and
LDRNEH r0, [lr,#-2] @若不是ARM状态,即是thumb状态
BICNE r0, r0, #0xff00 @得到swi中断号,存入r0
LDREQ r0, [lr,#-4] @若是ARM状态
BICEQ r0, r0, #0xff000000 @得到swi中断号,存入r0
BL C_SWI_Handler @执行函数C_SWI_Handler
LDMFD sp!, {r1} @恢复spsr的值
MSR spsr_csxf, r1
LDMFD sp!, {r0-r3,r12,pc}^ @恢复现场