当前位置: 首页 > 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.lryc.cn/news/617366.html

相关文章:

  • 环境配置-拉取NVIDIA Docker镜像时出现401Unauthorized错误
  • Redis 01 数据结构
  • 第7节 大模型性能评估与优化方法指南
  • Web 开发前端与后端 API 的交互
  • 101. 孤岛的总面积
  • 区块链技术原理(5)-网络
  • 《深度解构:React与Redux构建复杂表单的底层逻辑与实践》
  • (附源码)基于Spring Boot的4S店信息管理系统 的设计与实现
  • 虚拟财产刑事辩护:跨地域性与匿名性带来的挑战
  • 【C/C++】(struct test*)0->b 讲解
  • 从零开始的ReAct Agent尝试
  • HTTPS应用层协议-中间攻击人
  • SharePlay确保最佳游戏体验
  • 前端SVG图标URL编码与嵌入
  • POI导入时相关的EXCEL校验
  • 【数据库】如何使用一款轻量级数据库SqlSugar进行批量更新,以及查看最终的Sql操作语句
  • Flink TableAPI 按分钟统计数据量
  • MSE ZooKeeper:Flink高可用架构的企业级选择
  • 容器之王--Docker的安全优化详解及演练
  • 【96页PPT】华为IPD流程管理详细版(附下载方式)
  • ARM汇编
  • word格式设置-论文写作,样式,字号等
  • 【大模型】强化学习算法总结
  • 用户管理系统后台管理界面
  • Python面试题及详细答案150道(41-55) -- 面向对象编程篇
  • VBA即用型代码手册:计算选择的单词数Count Words in Selection
  • 5种无需USB线将照片从手机传输到笔记本电脑的方法
  • vue+flask基于规则的求职推荐系统
  • Spring Boot启动事件详解:类型、监听与实战应用
  • 腾讯云Edgeone限时免费