目录

1、机器码

2、汇编指令

3、汇编指令集

4、架构

5、内核(CPU中的核心)

6、处理器

7、复杂指令集和精简指令集   7.1复杂指令集

7.2精简指令集

7.3修改

8、内核中的寄存器阻值

       8.1溜达存储类型

8.2、AMR处理器(内核)的工作模式

     8.2.1Cortex-M核的工作模式

    8.2.2Cortex-A核的工作模式

8.3寄存器组织​编辑

9、特殊功能寄存器

    9.1R13寄存器(SP寄存器)


1、机器码


        机器码:就是计算器或者机器能够识别以0和1组成二进制编码格式
        gcc分布编译分为:预处理、编译、汇编、链接。汇编:将汇编文件转化为二进制文件

2、汇编指令

汇编指令:就是一条具备特殊功能的指令
  gcc分布编译分为:预处理、编译、汇编、链接。编译:将c语言转化为汇编文件

3、汇编指令集

汇编指令集:就是多条不同功能的汇编指令组成的集合
汇编指令集的分类:
         x86-64汇编指令集
          ARM汇编指令集
          ZEN汇编指令集
           PowerPC汇编指令集
           RISC-V汇编指令集。。。。

4、架构
 

架构:就是汇编指令集的别名,通过不同汇编指令集可以设计出不同的架构
    架构:
        x86-64架构、arm架构、Mips架构、RISC-V架构.....

5、内核(CPU中的核心)

不同的架构可以设计出不同的内核
arm-v1~v6架构:目前已经淘汰
arm-v7架构:支持32位汇编指令集(ARM课程所使用的STM32MP157AAA这款芯片就是通过arm-v7架构设计而来的)
arm-v8架构:支持64位汇编指令集,向下兼容32位汇编指令集
arm-v9架构:最新的架构,主要应用在性能要求比较高的设备上
基于arm-v7架构设计出了Cortex-M4内核
基于arm-v8架构设计出了Cortex-A9内核
基于arm-v9架构设计出了Cortex-X5内核
ARM公司设计的内核分类:
Cortex-M系列内核(M3、M4、M33......) ------ 应用在功能相对简单(低功耗产品) Cortex-A系列内核(A7、A8、A9......) ------ 之前应用在手机、电脑上
Cortex-R系列内核 ------ 应用在对实时性要求比价高的产品上
Cortex-X系列内核 ------ 最新的、性能最高的系列
ARM课程使用的芯片:STM32MP157AAA芯片 = Cortex-A7核 + Cortex-M4核
单片机课程使用的芯片:STM32U575RIT6芯片 = Cortex-M33内核

6、处理器
 

CPU:中央处理器
MCU:微控制单元(微控制器),是指传统意义上的单片机不支持使用操作系统(目前使用小型的实时操作系统),性能比较低(功耗低)
MPU:微处理单元(微处理器),是高性能的处理器支持使用操作系统
SOC:system on-chip(片上系统)
问题(mcu和mpu的区别上面红色字体)
问题,使用过哪些MCU?
STM32F103、STM32F407、STM32MP157A、STM32U575...

STM32MP157AAA的组成:
ST:公司名字
M:MCU(微控制器)
32:支持32位的汇编指令集
MP1XX:芯片型号(MPI系列:MP157、MP158...)
AAA:芯片性能

7、复杂指令集和精简指令集


   7.1复杂指令集

复杂指令集:他的汇编指令的指令长度和指令周长不固定
指令宽度:是每条指令占用内存空间的大小
指令周长:是每条指令被执行需要的时间

X86汇编指令集是复杂指令集
反汇编终端指令:objdump
作用是将二进制编码格式的文件转换为汇编指令格式的文件

7.2精简指令集

精简指令集下的汇编指令的指令周长和指令宽度是固定的
arm汇编指令集Mips汇编指令集RISC-V汇编指令集PowerPC汇编指令集...这些都是精简指令集
 arm汇编指令集存在很多的子集,这些子集中会存在一个Thumb汇编指令集
Thumb汇编指令集是arm汇编指令集的子集,在默认状态时,会选择使用Thumb汇编指令 Thumb汇编指令集大小为16位,也就是Thumb汇编指令集下的汇编指令的指令宽度都是16位(2个字节)
arm汇编指令集大小为32位,也就是arm汇编指令集下的汇编指令的指令宽度都是32位(4个字节)
在使用Cortex-M内核,大多使用Thumb汇编指令集
在使用Cortex-A内核,大多使用ARM汇编指令集

7.3修改


   为什么修改:因为精简指令集的宽度和大小是固定的而上图却有一个是四字节大小的所以要修改
为什么会出现这个四字节的:
1、指令集扩展:为实现复杂功能(如 `ldr.w` 宽加载),需更多编码信息,会出现 4 字节指令;
2、 混合模式:像 ARM 同时支持 32 位(ARM 指令集)和 16 位(Thumb 指令集),复杂操作会调用 4 字节的 ARM 指令
3、架构演进新指令为兼容/优化(如多媒体、内存管理),也可能设计为 4 字节,平衡功能与编码空间。 本质是“固定基础 + 灵活扩展”,满足多样需求~
通过下面的图就修改好了

8、内核中的寄存器阻值

       8.1溜达存储类型

六大存储类型:autostaticconstexternvolatileregister
register(寄存器存储类型): 使用register修饰变量时,变量会被直接存储到核内寄存器中 无法通过内存地址进行访问,只能通过寄存器编号进行访问 访问速度快,寄存器个数有限

volatile: 防止编译器对代码进行优化,直接从内存中取最新的值
应用场景:
1、多线程使用同一资源时
2、单片机开发中
定义变量的流程:
存储类型 + 数据类型 + 变量名
计算机原理中,计算机的组成部分: 输入设备、输出设备、CPU(控制器、运算器、寄存器/存储器)

register(寄存器存储类型):变量会被直接被定义到寄存器中,只能通过寄存器访问

volatile:修饰的变量不使用高速缓存(DCache)去暂存数据,而是直接和内核进行数据交互
为什么加volatile:因为你不加的话存在隐患,a会被数据高速缓存区(DCarche)暂存,而线程1/2/3访问a时,可能会读取缓存区的旧值而非最新值,线程的1/2都改了a,但因为缓存的存在导致线程3的c=a+1中的a可能拿的是旧值,结果会混乱。
而加上volatile:直接跳过缓存直接链接内存,强制每次读写操作都直接操作内存,可以读到最新的数据,无论哪个线程修改 a的值,其他线程能立刻看到内存里的最新值,避免因缓存 “藏着旧数据” 导致计算错误(比如线程 3 能拿到线程 1/2 改过的 a,而非缓存旧值 )。

8.2AMR处理器(内核)的工作模式

     8.2.1Cortex-M核的工作模式

M核的工作模式:
     1、线程模式
      2、异常模式

    8.2.2Cortex-A核的工作模式

非特权模式:
User模式(用户模式执行用户代码
特权模式:
         非异常模式:Sys模式(系统模式管理员模式
          异常模式:
                    IRQ模式(普通中断异常模式
                    FIQ模式(快速中断异常模式
                    SVC模式(超级管理异常模式
                    ABT模式(访问中止异常模式
                    UDF/UNF模式(未定义异常模式
以上工作模式是使用ARM-v7架构的工作模式
在引入ARM-v8架构之后,又设计出了两种工作模式
                              MON模式(安全监管模式)
                              HYP模式(虚拟化技术模式)

8.3寄存器组织

根据上图可知:
1、每一个格子是一个寄存器,每一个寄存器的大小都是4字节
2、黑色字体的寄存器是实际的寄存器(不是灰色的),灰色字体的是实际不存在的寄存器
3、白色底的寄存器是公用寄存器,蓝色底的寄存器是私有寄存器(只有在特定的模式下才可以使用)
4、实际上可以操作的寄存器只有43个(大小为43*4)可看下图
5、上述的寄存器均为核内寄存器(无法通过内存地址进行访问,只能通过寄存器编号访问R0,R1....)
核外寄存器可以通过内存地址进行访问

9、特殊功能寄存器


    9.1R13寄存器(SP寄存器)
 

R13寄存器-----SP寄存器-------the stack pointer寄存器
SP寄存器的中文名字叫作栈指针寄存器
SP寄存器的作用:用于保存栈区的一片内存空间地址

SP:就是将图片上的r1和r2寄存器中的值保存到SP栈指针寄存器的一片栈空间地址上

LR:R14寄存器-------LR寄存器------特和linkingregister
LR寄存器的中文名是链接寄存器
LR寄存器的作用是:用于保存函数的返回地址
如上图:LR存储了函数的返回地址,func函数的返回地址就是这个函数的下一条命令

R15寄存器----PC寄存器-----特和program counter register
PC寄存器的中文名字是程序计数寄存器
PC寄存器的作用:用于保存下一条需要执行的汇编指令的地址

就是执行一条命令回到0x0f,就是PC=LR

SP寄存器 ---- 用于保存栈空间一片地址----实现c语言中的局部变量
LR寄存器-----用于保存函数返回地址-----用于实现c语言中的函数返回------|------综合使用实现函数之间的跳转
PC寄存器-----用于保存下一条需要执行的汇编指令的地址  ------用于实现c语言语句的一条一条指令
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94763.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94763.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94763.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PPT处理控件Aspose.Slides教程:在 C# 中将 PPTX 转换为 Markdown

将您的PowerPoint幻灯片转换为Markdown格式,使其兼容 AI 技术。在这个人工智能驱动的时代,GPT和Claude等大模型能够读取和生成基于 Markdown 的内容。此外,Markdown 还可用于博客文章和文档。因此,作为一名 .NET 开发人员&#xf…

Python 多进程(multiprocessing)

文章目录1. 多进程概述1.1. 多进程的概念1.2. 多进程注意事项2. 进程调用方式2.1. Process 类2.1.1. 构造方法2.1.2. 实例方法2.1.3. 属性2.2. 面向过程2.3. 面向对象3. 进程间通讯3.1. Queues3.2. Pipes3.3. Managers(进行共享数据)4. 进程同步5. 进程池…

推荐系统王树森(五)重排多样性提升

重排01:物品相似性的度量、提升多样性的方法_哔哩哔哩_bilibili github-PPT 前面的讨论中提到 在链路的最后进行重排,重排要插入广告和运营笔记,还要做规则打散,提高推荐的丰富性,比如说一个人特别爱看足球&#xff…

Axios多实例封装

Axios多实例封装方案 我将为您提供一个完整的Axios多实例封装方案,包含基础封装、多实例管理和使用示例。 设计思路 创建基础axios实例封装,支持请求/响应拦截器实现多实例管理器,支持不同API端点配置提供统一的错误处理机制支持请求取消功…

为量化从业者提供免费稳定的股票数据源:免费股票数据API获取实时数据、历史数据与技术指标(含多语言代码指南)实例代码演示与API文档说明

​ 近年来,股票量化分析因其科学、系统的研究方法,日益成为市场热点。而进入这一领域的首要步骤,正是获取全面、准确的股票数据——无论是实时交易行情、历史走势记录,还是企业财务与基本面信息,都是支撑量化策略的核心…

[Sync_ai_vid] UNet模型 | 音频特征提取器(Whisper)

第2章:LatentSync UNet模型 在第1章:唇形同步推理流程中,我们了解到唇形同步推理流程如同电影导演,协调各"专家模块"生成完美唇形同步视频。 本章将深入解析这个"工作室"中最核心的专家——LatentSync UNet…

工业级TF卡NAND + 北京君正 + Rk瑞芯微的应用

目录前言一:操作CS创世 SD NAND的常用命令1.查看SD设备2.挂载分区3.卸载分区4.分区管理5.格式化分区6.简单读写二:SD底层协议简要介绍三:对CS创世 SD NAND进行读写操作的三大方式1. 使用dd命令2. 使用块设备的标准接口3. 使用ioctl产生系统调…

深入解析Java并发编程与单例模式

目录 一、调度(四) 1.随机调度大环境 二、锁(二) 1.位置 2.无锁阻塞 3.重入锁 4.连续锁 4.1措施 三、线程方法(二) 1.wait 2.notify 3.wait-notify指位后移 3.1可能时再检查 3.1.1join(二) 3.1.1.1可能时再检查死亡 四、单例模式 1.实现 1.1private构造器 1…

java通过redis简单实现分布式锁

目录 一、简介 二、代码实现 1、maven添加依赖 2、核心逻辑代码 3、使用方式 三、总结 一、简介 我们知道在Java中可以通过关键字synchronized来防止并发引起的问题,而分布式中就需要考虑分布式锁了,今天来讲一个比较简单的实现,通过re…

网络编程--TCP/UDP Socket套接字

网络编程 程序员主要操作应用层和传输层来实现网络编程,也就是自己写一个程序,让这个程序可以使用网络来通信,这个程序属于应用层,实现通讯就需要获取到传输层提供的服务 这就需要使用传输层提供的api UDP: 无连接,不可…

claude-code订阅方案

Claude Code 订阅方案对比 编写日期:2025 年 08 月 20 日 🏷️ 专业版 Pro ($20/月,$200/年) 主要特性 可用模型:Claude Sonnet 4(Claude Opus 4成本太高,谨慎选择)适用场景:适合轻度…

146. LRU缓存

题目: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值&#x…

第二十节:3D文本渲染 - 字体几何体生成与特效

第二十节:3D文本渲染 - 字体几何体生成与特效 TextGeometry深度解析与高级文字效果实现1. 核心概念解析 1.1 3D文字渲染技术对比技术原理优点缺点TextGeometry将字体轮廓转换为3D网格真实3D效果,支持材质性能开销大,内存占用高Canvas纹理将文…

zzz‘sJava知识点概括总结

类型转化 字符串&#xff1a;c语言&#xff1a;char Java&#xff1a;string 表达式值的类型由最高类型决定&#xff1a; 取值范围&#xff1a;byte<short<int<long<float<double&#xff08;且运算时byte和short都是转化为int类型进行计算防止数据溢出&…

SONiC 之 Testbed(2)Ansible

Ansible 是一款由 Red Hat 主导开发的 开源自动化工具&#xff0c;专注于 配置管理、应用部署、任务编排和IT自动化。它基于 无代理&#xff08;Agentless&#xff09;架构&#xff0c;通过 SSH&#xff08;默认&#xff09;或 WinRM 协议与目标设备通信&#xff0c;无需在被控…

瑞芯微RK3568与君正X2600e平台Linux系统CS创世SD NAND应用全解析与驱动架构详解

前言 今天就瑞芯微平台和北京君正平台下的linux系统中关于CS创世 SD NAND的使用做一些经验的分享&#xff0c;如有不正&#xff0c;请批评指正&#xff1b; 采用的开发板是RK3568和x2600e&#xff0c;ubuntu版本是20.04&#xff0c;交叉编译工具链是aarch64-linux-gnu-和mips…

深入解析 Flink Function

RichFunctionFunction只是个标记接口public interface Function extends java.io.Serializable {}RichFunction 的核心语义是为用户定义的函数&#xff08;UDF&#xff09;提供生命周期管理和运行时上下文访问的能力。任何一个普通的 Flink Function 接口&#xff08;例如 MapF…

JMeter —— 压力测试

目录 常用的性能指标 一、吞吐量类指标 二、响应时间类指标 三、资源利用率指标 JMeter 一、JMeter 简介 二.下载安装JMeter&#xff1a; 三.如何使用JMeter&#xff1a; 压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统…

Transformer在哪⾥做了权重共享?

1、什么是权值共享权重共享是指在模型的不同层之间复⽤相同的参数。这可以减少模型的总体参数数量&#xff0c;并使得模型在训练时更容易学习。2、在Transformer中的应用常见的做法是共享词嵌入层&#xff08;embedding layer&#xff09;和输出层&#xff08;output layer&…

将 agents 连接到 Elasticsearch 使用模型上下文协议 - docker

我们在之前的文章 “将 agents 连接到 Elasticsearch 使用模型上下文协议” 及 “使用 MCP 将代理连接到 Elasticsearch 并对索引进行查询” 详述了如何使用 Elasticsearch MCP server 来和我们的 Elasticsearch 进行对话。细心的开发者可能已经注意到我们的 Elasticsearch MCP…