ARM基础概念 day51

发布于:2025-08-12 ⋅ 阅读:(17) ⋅ 点赞:(0)

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指针问题

  1. ALU 的作用
    • 负责对 SP 做加/减运算(+ 宽度 或 - 宽度),运算结果写回 SP 寄存器。
    • 加数:出栈(POP),SP 向高地址移动。
    • 减数:入栈(PUSH),SP 向低地址移动。
  2. 栈的地址结构
    • 栈底:高地址(stack base)
    • 栈顶:低地址(stack top)
    • 栈向低地址生长。
  3. 初始状态
    • 空栈时,SP 指向栈底(高地址)。
  4. 入栈(PUSH)
    • ALU 做 SP = SP - 数据宽度(负方向)
    • 新 SP 指向栈顶位置 → 数据写入该位置。
  5. 出栈(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
.text

mov 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	//软件模拟中断,返回之前状态 

网站公告

今日签到

点亮在社区的每一天
去签到