跳转到内容
新建笔记

ARM常见面试题目

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

2.ARM核有多少个寄存器?

跳转到“2.ARM核有多少个寄存器?”

ARM有37个32位长的寄存器。(记住就行)

3.什么寄存器用于存储PC和LR寄存器?

跳转到“3.什么寄存器用于存储PC和LR寄存器?”

R15(PC)、R14(LR)。

4. R13通常用来存储什么?

跳转到“4. R13通常用来存储什么?”

SP(栈指向) 栈指针。

5. 哪种模式使用的寄存器最少?

跳转到“5. 哪种模式使用的寄存器最少?”

用户模式/系统模式(不用SPSR)。

6.在Thumb指令集中,哪些寄存器处于low group?

跳转到“6.在Thumb指令集中,哪些寄存器处于low group?”

R0-R7属于低位寄存器。

7.CPSR的哪一个位反映了处理器的状态?

跳转到“7.CPSR的哪一个位反映了处理器的状态?”

第5位(从0开始),T状态位。

8. 所有的Thumb指令采取什么对齐方式?

跳转到“8. 所有的Thumb指令采取什么对齐方式?”

半字对齐(2个字节) 。

9.ARM有哪几个异常类型?

跳转到“9.ARM有哪几个异常类型?”

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

10.为什么FIQ的服务程序地址要位于0X1C?

跳转到“10.为什么FIQ的服务程序地址要位于0X1C?”

尽可能快,省去跳转指令(FIQ的向量地址是异常中断向量表的最高地址,而异常中断向量表后跟的是程序代码,FIQ的中断服务程序紧接中断向量表存放,中断过程可以节省一条跳转指令)

11.ARM核是如何让FIQ快速处理?

跳转到“11.ARM核是如何让FIQ快速处理?”

<1>FIQ模式有私有的r8-r12,如果只是用私有的寄存器,不需要保护通用寄存器 <2>FIQ异常在异常向量表最顶端,可以直接写FIQ异常处理函数,不需要跳转

12.在复位后,ARM处理器处于何种模式、何种状态?

跳转到“12.在复位后,ARM处理器处于何种模式、何种状态?”

管理模式(SVC)、ARM状态

13.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 指令的优势是什么?用来实现什么功能?

跳转到“14. SWP 指令的优势是什么?用来实现什么功能?”

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

15.ARM处理器的执行状态?

跳转到“15.ARM处理器的执行状态?”

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

16.异常产生时,ARM核自动完成的任务?

跳转到“16.异常产生时,ARM核自动完成的任务?”

<1>CPSR拷贝到异常模式的SPSR <2>设置CPSR的相应位 进入ARM状态 设为对应的异常模式 禁止中断[中断产生的时候] <3>将PC保存到异常模式的LR <4>修改PC的值到异常向量表


来源:CSDN 原文,首次发布于 2023-07-09。