ARM知识点

1、ARM有几种工作模式?
答:有7个基本工作模式:用户模式(user)、系统模式(system)、数据访问中止模式(abort)、未定义指令中止模式(undef)、快速中断模式(FIQ)、外部中断模式(IRQ)、管理模式(SVC)、cortex-A系列特有:M(monitor):安全模式。
记忆方法:USA UFI SM。

2、ARM核有多少个寄存器?
答:有37个32位长的寄存器。

3、什么寄存器用于存储PC 和 LR寄存器?
答:R15(PC)、R14(LR)。

4、R13通常用过来存储什么?
答:SP(栈指向)栈指针。

5、哪种模式使用的寄存器最少?
答:用户模式/系统模式(不用SPSR)。

6、在Thumb指令集中,哪些寄存器处于low group?
答:R0-R7 属于低位寄存器。

7、CPSR 的哪一个位反映了处理器的状态?
答:第 5 位(从 0 开始), T 状态位。

8、 所有的 Thumb 指令采取什么对齐方式?
答:半字对齐 (2 个字节 ) 。

9、ARM 有哪几个异常类型?
答:(1) 复位异常 -> SVC 模式 [开发板复位 ]
(2) 未定义异常 -> UDF 模式 [执行未定义的指令 ]
(2) 软中断异常 -> SVC 模式 [通过 SWI 指令产生 ]
(4) 取数据终止 -> ABT 模式 [没有取到数据 ]
(5) 取指令终止 -> ABT 模式 [没有取指令 ]
(6)IRQ 中断 -> IRQ 模式 [硬件触发的 IRQ 中断 ]
(7)FIQ 中断 -> FIQ 模式 [硬件触发的 FIQ 中断 ]

10、为什么快速请求中断 FIQ( Fast Interrupt Request )的服务程序地址要位于 0X1C ?
答:尽可能快,省去跳转指令 (FIQ 的向量地址是异常中断向量表的最高地址,而异常中断向量表后跟的是程序代码, FIQ 的中断服务程序紧接中断向量表存放, 中断过程可以节省一条跳转指令 )。

11、ARM 核是如何让 FIQ 快速处理 ?
答:(1)FIQ 模式有私有的 r8-r12, 如果只是用私有的寄存器,不需要保护通用寄存器。
(2)FIQ 异常在异常向量表最顶端,可以直接写 FIQ 异常处理函数,不需要跳转。

12、在复位后, ARM 处理器处于何种模式、何种状态?
答:管理模式 (SVC) 、 ARM 状态。

13、ARM 处理器的八种寻址方式?
①.立即数寻址: 要求以 #开头 mov r0 , #9
②.寄存器寻址: add r0,r1,r2 r0 = r1+r2
mov r0,r1 r0 = r1
③.寄存器间接寻址: ldr r0,[r1] r0 = [r1]
④.寄存器移位寻址: add r0,r1,r2,lsl #2
⑤.基址变址寻址: //前索引 ldr r0,[r1,#4] //r0 = *(r1 + 4)
//后索引 ldr r0,[r1],#4 //r0 = *r1,r1 = r1 + 4 ; data = *p ++;
//自动索引 ldr r0,[r1,#4]! //r0 = *(r1 + 4); r1 = r1 + 4
⑥.多寄存器寻址: ldmxx r0!,{r1-r15}
⑦.相对寻址: 以 PC 的当前值为基地址,指令中的地址号为偏移量,两种之和得到操作数的地址。
⑧.堆栈寻址: stmfd sp!,{r0-r12}。

14、SWP 指令的优势是什么 ?用来实现什么功能?
答:功能: 在寄存器和存储器之间, 由一次存储器读和一次存储器写组成的原子操作。 完成一个字节或字的交换。 可以用来实现信号量。
SWP Rd , Rm , [Rn]
第一步:先将 Rn 所指向的内容传给 Rd, Rd = [Rn]
第二步:再将 Rm 的内容传给 Rn 所指向的地址 [Rn] = Rm

15、ARM 处理器的执行状态?
答:①.ARM 状态:
所有指令 32 位宽
所有指令必须 word 对齐
pc 值由 bits 【 31:2 】决定, bits 【 1:0】未定义
②.Thumb 状态:
所有指令宽度 16 位
必须半字 halfword 对齐
pc 值由 bits 【 31:1 】决定

16、异常产生时, ARM 核自动完成的任务?、
答:<1>CPSR 拷贝到异常模式的 SPSR
<2> 设置 CPSR 的相应位
进入 ARM 状态
设为对应的异常模式
禁止中断 (中断产生的时候 )
<3> 将 PC 保存到异常模式的 LR
<4> 修改 PC 的值到异常向量表

你可能感兴趣的:(ARM)