嵌入式学习day45-硬件—汇编
1、ARM 内核工作模式有哪些,分别是在什么情况下被切换?
ARM 内核有 7 种基本工作模式:
User 模式:正常的用户程序运行模式。
FIQ 模式:快速中断模式(Fast Interrupt),响应高速数据传输或通道处理。
IRQ 模式:普通中断模式(Interrupt Request)。
Supervisor 模式:管理模式,通常在复位(Reset)或执行系统调用(SVC 指令)时进入。
Abort 模式:存储器访问出错(如地址无效)时进入。
Undefined 模式:遇到未定义指令时进入。
System 模式:特权级模式,和 User 模式寄存器相同,但拥有管理权限。
模式切换通常发生在 异常/中断/系统调用 时,由硬件自动完成。
2、异常向量表是什么?
异常向量表(Exception Vector Table)是存放 异常入口地址 的一段内存区域。
当发生 复位、中断或异常 时,CPU 会根据异常类型跳转到对应的入口地址执行。
ARM 默认异常向量表基地址为
0x00000000
(有些芯片可重映射到0xFFFF0000
)。
3、什么是立即数?如何判断某数是非法是12位立即数?
立即数(Immediate Number):直接写在指令里的常数,而不是存放在寄存器或内存中的数据。
在 ARM 指令集中,立即数通常是 12 位编码,由 8 位有效数(imm8)和 4 位旋转值(rot)组成。把某个数展开成2进制,该数必须存在一种循环右移(偶数位),使得移位后高24位全0,低8位即为有效imm8;
4、b,bl,bx指令的区别是什么?
B label
无条件跳转到 label 地址。
PC ← label
。
BL label
带返回地址的跳转(函数调用)。
LR ← 下一条指令地址
,PC ← label
。
BX reg
跳转到寄存器 reg 的地址,同时可切换 ARM/Thumb 状态(根据地址最低位)。
常用于函数返回或混合 ARM/Thumb 程序跳转。
5、ARM内核采用的栈是哪种栈?
ARM 支持 全递减栈/满减栈(Full Descending Stack, FD):
栈向低地址增长(SP 递减)。
Push:先减 SP,再存数据。
Pop:先取数据,再加 SP。