当前位置: 首页 > news >正文

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

  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
.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	//软件模拟中断,返回之前状态 
http://www.dtcms.com/a/326580.html

相关文章:

  • easyExcel嵌套子集合导出Excel
  • 2025第十六届蓝桥杯大赛青少组省赛C++真题(初级组和中级组)
  • MCU的设计原理
  • SNMP入门教程:Windows下编译
  • Linux811 YUM;SHELL:if else fi,for
  • 进程线程切换的区别
  • 【k近邻】 K-Nearest Neighbors算法k值的选择
  • 第4节 大模型推理内存与计算优化
  • 【FreeRTOS】任务间通讯6: 任务通知- Task Notification
  • python+requests+yaml实现接口自动化用例
  • 【软件分享】格式工厂FormatFactory便携版本(解压即用)
  • 介绍一下jQuery的AJAX异步请求
  • Salesforce案例:零售企业会员积分体系
  • 新人如何简化学习Vue3文件
  • LangChain框架之 invoke() 方法
  • 【每日一错】PDB之间数据迁移
  • 7.Java的继承
  • 分享一款基于STC8H8K32U-45I-LQFP48单片机的4路数字量输入输出模块
  • 多重时间聚合算法(MAPA)改进需求预测模型
  • Redis实现排行榜
  • C++11 auto关键字:智能类型推导指南
  • 字符串相关例题(查询子串在主串中的个数)
  • GB17761-2024标准与电动自行车防火安全的技术革新
  • 编译GCC-12.1.0
  • Linux内核网络设备框架及其注册流程分析
  • Cursor 实用技巧与常见难题解析:从入门到进阶的技术实践
  • Pytest项目_day11(fixture、conftest)
  • OSPF IP FRR 理论和实验
  • 当C#遇上Notepad++:实现GCode可视化编辑的跨界实践
  • 3.数据类型和类型装换