2 arm 体系架构、特点、寄存器。
day2.txt
sansumg--exynos4412 armV7--cortex-a9 四核cpu
arm体系结构:
arm是一个低功耗的精简指令集(RISC)cpu架构
arm核心:arm指令/alu/register /流水线
1.arm的特点:
1》比较多的寄存器集合
2》所有数据交互只能通过寄存器实现,不能直接和内存进行交互
3》支持load/store指令实现内存数据加载
4》所有的汇编指令都是32位宽度
5》每一个寄存器都是32位
6》大部分的指令都是单周期
7》所有的指令都支持条件执行
arm支持的数据类型。
Byte 8 bits
Halfword 16 bits
Word 32 bits
Doubleword 64 bits.
2.arm的寻址范围和存储模式
0-4g
arm支持大小端,默认为小端
3.arm的工作状态
支持不同的指令集
arm 支持arm指令 32位指令
ThumbEE 16位指令
Jazelle java字解码
4.arm的工作模式:
cortex-a9 9种
coretx-a8 8种
之前的都是7种
非特权 usr (用户模式)大部分的应用程序运行的模式。(不能主动的进行模式切换)
特权 sys (系统模式)和usr模式使用同一组寄存器的特权模式
svc (管理模式)arm上电复位之后的模式,软件中断的工作模式
异常
内部异常 und (未定义)arm执行指令时发现一条不认识的指令,所处的工作模式
abt (中止模式)加载数据加载失败时所处的工作模式
外部异常
fiq (快速中断)快速中断的工作模式
irq (中断模式)普通中断的工作模式
Monitor (安全模式)
Hyp (支持虚拟化的模式)
每个模式都有一组寄存器集合
5.arm的寄存器说明
通用寄存器:
a9核心有43个寄存器:
r0-r15
r0-r12 存储通用数据
r13 (sp)当异常发生时,通用寄存器的数值会保存在这个地址(sp是专用的)
r14 (lr)当程序发生跳转时,保存返回地址(没有跳转时可以当作普通寄存器使用)
r15 (pc 程序计数器)
写操作:cpu会跳转到写入的地址处执行代码
读操作:读出的数值永远是当前正在执行的指令地址+8(预取指令的地址)
功能寄存器:
cpsr
N(31)符号标志位:1代表结果为负数 0代表结果非负数
Z(30)零标志位:1代表结果为0 0代表结果非0
C(29)进位标志位:1代表结果存在进位(不存在借位)0代表没有进位(存在借位)
V(28)溢出标志位:1代表结果溢出 0代表没有溢出
E(9) 大小端选择:1大端 0小端
I(7) irq--mask 0代表接收irq 1不接收irq
F(6)fiq--mask 0代表接收fiq 1不接收fiq
J(24)T(5) 选择核心的工作状态 00为arm状态 01THRUB 10Jazelle 11ThumbEE
M(0-4)工作模式显示位
usr 10000 (没办法主动改变)
sys 11111
svc 10011
und 11011
abt 10111
fiq 10001
irq 10010
mon 10110
hyp 11010
工作模式改变方式:
异常发生时,cpu自动改变工作模式
手动改变:在svc模式下可以更改cpsr寄存器m域
spsr
当异常进行模式切换时用来保存cpsr的值,
6.arm的异常:
异常处理靠异常向量表,异常向量表就异常事件的处理集合。异常向量表可以出现在两个地方:0x00000000 0xffff0000
异常的发生时硬件会自动跳转到异常向量表,不需要程序干预。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?