一 ARM V8架构
世界上存在四套主流cpu架构
arm mips ppc 属于risc(精简指令集)
x86 属于cisc(复杂指令集)
a 一般应用于高大上的领域 比如:智能手机 手表 .. cortex-a (涉及到音视频处理)
r real time 实时 一般应用于对实时性要求比较高的领域
m stm32f103rbt6 cortex-m 以单片机的价格实现32b的性能
独占式访问:
只有一个进程可以同时访问某一个设备,其他进程不允许访问
二 ARM体系结构与编程
Advanced Risc machines
2.1 arm的两种工作状态
arm工作状态 32b
thumb工作状态 16b
以上两种工作状态可以相互切换,但是在异常模式下,arm只能处于arm工作状态
2.2 简述cpu内部的构造
processor --- cpu core
浮点运算单元 fpu
内存管理单元 mmu
注意:将来一旦SOC上跑起来操作系统之后,CPU万万不能直接访问物理地址,只能访问由mmu映射之后的虚拟地址
cortex-A53 V7 有序的8级流水线
cortex-A57 V8 乱序的 15+级流水线
2.3 三级流水线
取指 fetch
解码 decode
执行 execute
指令周期数 cpi = 指令周期数/执行的指令的数量
PC:处于cpu内部,永远保存当前正在执行的指令的地址
2.4 ARM寄存器的组织格式
ARM有7种工作模式
fiq 快速中断模式 发生高优先级中断
irq 终端异常模式 发送低优先级中断
undef 未定义异常模式 遇到了不认识的指令
svc 管理模式 系统上电,执行软中断指令 内核态
abort 终止异常模式 非法访问存储器
//注:按字(4字节)访问,0x4/8/c/0是合法的
system 系统模式 与用户模式公用寄存器模式
user 用户模式 用户态
前5种为异常模式 后两种为正常模式
前6种为特权模式 最后一种为非特权模式
中断仅仅是异常的一种
外设中的所有寄存器都是特殊功能寄存器
cpu内部的寄存器是通用寄存器
通用寄存器和特殊功能寄存器的区别:
1.特殊功能寄存器有实际的物理地址
通用寄存器没有物理地址
2.只能通过名字访问通用寄存器
arm寄存器的组织结构
arm中有37个通用寄存器(通用寄存器可以通过名字进行访问, 用C语言很难访问到)
31个通用寄存器 user/system r0~r15 fiq r8~r14
scv undef irq abort r13~r14
r0~r15
r13 --- sp stack pointer 栈指针
r14 --- lr 保存函数的返回地址
r15 --- PC 永远保存的是当前正在执行的指令的地址
6个状态寄存器
1个cpsr 当前程序状态寄存器
5个spsr 程序状态备份寄存器
当异常发生的时候:
cpu硬件上会自动完成四件事:
保护现场
1.spsr_<irq> = cpsr
2.lr = pc + 4
3.跳转到异常向量表中处理中断处理函数
4.恢复现场 cpsr = spsr_<irq>
pc = lr
三 ARM汇编指令
3.0所有的SOC上电初期,执行的一定是汇编指令
上电初期,内存未做初始化,C语言没有运行环境
3.1 arm支持的数据类型
byte B
half-word 2B
word 4B
double word 8B
quad word 16B --aarch64
3.2 ARM的存储格式
小端模式
字节序:
大端模式 小端模式
地址:
0x00 0x12 0x78
0x01 0x34 0x56
0x02 0x56 0x34
0x03 0x78 0x12
如何判断处理器大小端
int val = 0x12345678;
char *p;
3.3 CPSR/SPSR寄存器
N Z C V
N: 负数,和运算结果的最高位相关保持一致
Z: 0,运算结果为0,Z==1,else Z==0
C: 错位或进位标志位
V: 溢出标志位,运算结果有溢出V==1,else V==0
如果结果为零,则设置为1,否则设置为0
设置为结果的执行值,或者设置为以为操作溢出的最后一位的值
溢出,如果发生有符号溢出或下溢,设为1,否则为0
3.32条件码
EQ Z 相等 Z=1
NE 不相等 Z=0
CS/HS C 无符号的大于 C=1
CC &n