ARM接口试题

一、选择题

        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恢复CPSR

                                (2)从LR恢复PC

下图的代码为针对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位用来              表示立即数,所以需要指定一个规则,采取合法的方式。

ARM接口试题_第1张图片

 

        3.请列举ARM处理器的模式和异常,并说明各个发生异常时ARM处理器所处的模式

                答:7种模式        5中异常        7种异常源

             

ARM接口试题_第2张图片

ARM接口试题_第3张图片

         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}^  @恢复现场

你可能感兴趣的:(单片机,arm开发)