ARM架构中的重要知识点的详细解释
1. ARM可以工作的模式名字
ARM处理器可以工作在以下几种模式:
- User 模式:正常程序执行模式。
- FIQ 模式(Fast Interrupt Request):快速中断处理模式,优先级最高。
- IRQ 模式(Interrupt Request):普通中断处理模式。
- Supervisor 模式:操作系统的保护模式,通常用于处理系统调用和异常。
- Abort 模式:用于处理内存访问异常。
- Undefined 模式:用于处理未定义指令异常。
- System 模式:特权模式,类似于User模式,但可以访问更多系统资源。
2. ARM核有多少个寄存器?
ARM架构核心有37个寄存器,其中包括:
- 31个通用寄存器(R0-R15,多个模式中可能存在“银行化”寄存器)
- 6个状态寄存器(CPSR和SPSR等)
3. 什么寄存器用于存储PC和LR寄存器?
- PC(Program Counter,程序计数器):用于存储当前执行指令的地址,通常由**R15**寄存器表示。
- LR(Link Register,链接寄存器):用于存储子程序返回地址,通常由**R14**寄存器表示。
4. R13通常用来存储什么?
-R13通常用作SP(Stack Pointer,栈指针),用于指向当前栈的位置,管理函数调用中的局部变量和返回地址。
5. 哪种模式使用的寄存器最少?
- User 模式和System 模式使用的寄存器最少,通常只使用通用的R0-R14寄存器和PC、CPSR,不会涉及银行化寄存器。
6. 在Thumb 指令集中,哪些寄存器处于Low group?
- 在Thumb指令集中,寄存器**R0-R7**被称为**Low group**寄存器,因为它们可以由大多数Thumb指令直接访问。
7. CPSR的哪一位反映了处理器的状态?
- CPSR(Current Program Status Register)**的**第5位**(T位)反映了处理器的状态:
- T=0:表示处理器处于ARM状态。
- T=1:表示处理器处于Thumb状态。
8. 所有的Thumb指令采取什么对齐方式?
- 所有的Thumb指令都采用半字对齐(2字节对齐),即指令地址必须是2的倍数。
9. ARM有哪几个异常类型?
ARM处理器有以下几种异常类型:
1. 复位(Reset):当处理器复位时触发,模式为Supervisor。
2. 未定义指令(Undefined Instruction):执行未定义指令时触发,模式为Undefined。
3. 软件中断(Software Interrupt,SWI):通过SWI指令触发,模式为Supervisor。
4. 预取中止(Prefetch Abort):当指令预取发生异常时触发,模式为Abort。
5. 数据中止(Data Abort):数据访问发生异常时触发,模式为Abort。
6. IRQ(Interrupt Request):外部中断时触发,模式为IRQ。
7. FIQ(Fast Interrupt Request):快速中断时触发,模式为FIQ。
10. 为什么FIQ的服务程序地址要位于0X1C?
- FIQ(Fast Interrupt Request)的服务程序地址位于0x1C,这是为了确保在中断发生时能够以最快的速度跳转到FIQ处理程序。FIQ具有最高优先级,且在银行化寄存器的支持下,切换到FIQ模式不需要保存太多寄存器,可以更快响应中断。
11. 在复位后,ARM处理器处于何种模式、何种状态?
- 在复位后,ARM处理器会进入Supervisor模式,并且处于ARM状态,即32位ARM指令集模式(CPSR的T位为0)。
哪些ARM指令可以有条件地执行?
ARM架构的特点之一是大多数指令可以有条件地执行,具体通过条件代码来控制。这些条件码位于ARM指令的高4位,允许指令仅在某些条件下执行。例如:
- EQ:等于(Zero标志为1)
- NE:不等于(Zero标志为0)
- LT:小于(N标志 != V标志)
- GT:大于(Z标志 = 0 且 N标志 = V标志)
- LE:小于等于(Z标志 = 1 或 N标志 != V标志)
- GE:大于等于(N标志 = V标志)
几乎所有标准ARM指令都可以通过附加条件码来有条件地执行,包括**MOV、ADD、SUB、AND、ORR**等。带有条件码的指令只在特定的条件满足时执行,否则将被忽略。
下面的指令完成什么工作?
`MOVNES r2, r3, ASR #2`
- MOVNES:该指令是MOV(移动)指令的变种,其中NE条件码表示“当不相等时执行”(即当Zero标志为0时)。
- r2:目标寄存器。
- r3:源寄存器。
- ASR #2:表示对源寄存器r3进行算术右移(Arithmetic Shift Right,ASR),移位2位。
解释:
该指令的功能是在条件为NE(不等于,即Z标志为0)时,将寄存器r3的值**算术右移2位**的结果,移动到r2。如果Zero标志(Z)不为0,该指令将不执行。
效果:
- 仅在Z标志为0(上次运算结果不等于0)时执行。
- r2 = r3 >> 2(算术右移两位)。
Thumb代码与ARM代码比较的两大优势?
1. 代码密度更高:
- Thumb指令集的指令长度为16位,而ARM指令集的指令长度为32位。因此,Thumb代码通常能比ARM代码节省更多的存储空间,在内存受限的系统(如嵌入式系统)中具有优势。
2. 更高的效率和低功耗:
- 由于指令更短,Thumb代码可以更高效地利用指令缓存(I-Cache)和存储器带宽,这有助于提升整体性能并降低功耗。特别是在微控制器和嵌入式系统中,Thumb代码有助于减少内存访问和功耗。
AMBA代表是什么?
AMBA代表Advanced Microcontroller Bus Architecture(高级微控制器总线架构)。
- 由ARM公司开发并推广,用于系统级芯片(SoC)的通信协议和设计标准。AMBA定义了多种总线协议,用于连接处理器、内存和外设,保证系统内不同模块之间的高效通信。
- AMBA最常用的总线协议有:
1. AHB(Advanced High-performance Bus,高性能总线)
2. APB(Advanced Peripheral Bus,外设总线)
3. AXI(Advanced eXtensible Interface,可扩展接口)