ARM基础概念 day51
ARM
一:基础概念
ARM采用的是32位架构.
ARM 约定:Byte :8
bitsHalfword :16 bits (2 byte)
Word :32 bits (4 byte)
Doubleword 64-bits (8byte)(Cortex-A处理器)
构成:RAM
:随机存储 访问速率快 掉电数据丢失
ROM
:只读存储 访问速率慢 掉电数据不丢失
RAM类:RAM SRAM(静态,最快,主要是晶体管构成) DRAM(动态,主要是电容构成)
SSRAM SDRAM:都带有同步时钟
ROM类:PROM(可编程) EPROM(可擦除) EEPROM(电)
flash
:结合RAM和ROM的优点
CPU :中央处理单元
ALU:运算单元,实现基本的运算
RO~R12:寄存器,存储数据
PC:程序计数器,指向正在执行的下下条指令,上电后值为0,默认做自加运算
LR:链接寄存器,保存函数的返回地址
SP:栈指针寄存器,指向栈顶
CPSR:当前程序状态寄存器,运算的结果为0、正、负等,运算中产生的进位、借位等;中断使能,工作状态、工作模式。
Cache 位于 CPU 核心与主存(RAM)之间,用于存放近期频繁访问的数据/指令,访问速率高于内存
Cache:缓存原则;1.长时间没有替换,2.用得少替换
I-Cache(指令缓存) 和 D-Cache(数据缓存)。
它们是 L1 Cache 最常见的两种分离方式(Harvard 架构思想在 CPU 内部的延伸),都是独立存储的,是哈佛形式。
哈佛:指令和数据分开存储冯诺伊曼:指令和数据一块存储
MMU:-内存管理单元,做虚拟地址到物理地址的转换
一:关于ALU的运算赋值给sp
指针问题
- ALU 的作用
- 负责对 SP 做加/减运算(+ 宽度 或 - 宽度),运算结果写回 SP 寄存器。
- 加数:出栈(POP),SP 向高地址移动。
- 减数:入栈(PUSH),SP 向低地址移动。
- 栈的地址结构
- 栈底:高地址(stack base)
- 栈顶:低地址(stack top)
- 栈向低地址生长。
- 初始状态
- 空栈时,SP 指向栈底(高地址)。
- 入栈(PUSH)
- ALU 做 SP = SP - 数据宽度(负方向)
- 新 SP 指向栈顶位置 → 数据写入该位置。
- 出栈(POP)
- 从 SP 指向的栈顶位置读取数据
- ALU 做 SP = SP + 数据宽度(正方向)
换句话说:
ALU 改变的是 SP 的值,方向由加减符号决定,SP 的变化方向对应了栈的生长或收缩方向
ARM有37个32-Bits长的寄存器
1 个用作PC( program counter)
1个用作CPSR(current program status register)
5个用作SPSR(saved program status registers)
30个通用寄存器
二:CPSR寄存器 32位
E位:大小端控制位
A位:A=1禁止不精确的数据异常
条件位(状态的记录)
N = Negative result from ALU Z = Zero result from ALU C = ALU operation Carried out or borrow V = ALU operation oVerflowed
Mode位:处理器模式位(7种模式)
`10000 User mode`非权限用户(其他都是特权模式) `10011 SVC mode`//管理模式,复位或软中断指令执行时将会进入这种模式 `10010 IRQ`低优先级中断 `10001 FIQ mode;`高优先级(中断) `10111 Abort mode`//取异常时将会进入这种模式 `1011 Undfined mode` //执行未定义指令时会进入这种模式,读取到不能识别的指令 `11111 System mode;`//系统模式,用和User模式相同寄存器集的特权模式
T位J位
T= 0;J=0
//处理器处于ARM
状态
T= 1;J=0
//处理器处于Thumb
状态
T= 1;J=1
//处理器处于ThumbEE
状态
中断禁止位
I =1: //禁止 IRQ
F= 1: //禁止 FIQ
三:CPSR/SPSR操作指令
mrs r0,CPSR //把CPSR现在的状态读在mrs中
msr CPSR,r0 //把r0的值写入CPSR
.textmov r0,#3 //用常量赋值要符号#
--------------------------------------------------------
cmp r0,#1 //r0和1比较 本质上就是r0 - 1 的值标志位 名称 触发条件(R0 - 1 的结果)N Negative 结果为负数(R0 - 1 < 0)Z Zero 结果为零(R0 == 1)C Carry 无借位(R0 >= 1,即减法未借位)V Overflow 有符号溢出(极少见,通常忽略)
--------------------------------------------------------
add r1,r0,#5 //把5加到r0中,然后把结果放进r1
mov r1,r0
mov r3,#0xD0
mov cpsr,r3 //必须经过中介才能传过去
swi 1 //软件模拟中断,返回之前状态