2.ARM_ARM是什么

CPU工作原理

CPU与内存中的内容:

内存中存放了指令,每一个指令存放的地址不一样,所需的内存空间也不一样。

运算器能够进行算数运算和逻辑运算,这些运算在CPU中都是以运算电路的形式存在,一个运算功能对应一种运算电路。程序中有哪种运算,CPU的运算器中就要有相应的运算电路与之对应。

控制器负责代码运行的过程,有指令计数器PC、指令寄存器IR、指令译码器。

  • PC中存放的是想要执行的指令的地址
  • IR中存放从内存中读取到的指令
  • 指令译码器负责将指令翻译为对应的操作并发给运算器。

CPU如何执行程序:

CPU是串行工作方式,即同一时刻只能进行一种运算。执行过程有取指、译码、执行这三步。

  • 取指

取指就是CPU从内存中取出所需要执行的指令。

CPU将PC中存放的地址数据通过地址总线告诉内存,即:告诉内存,我想要执行哪里的指令。内存接收到PC的地址数据后,定位到指定的地址,并将地址的数据通过数据总线发给CPU,这个数据将存放在CPU的指令寄存器IR中。

  • 译码

译码就是将IR中的数据翻译为具体的运算含义。 

CPU将IR中的数据发送给指令译码器,通过译码之后CPU获取到该指令的具体含义。

  • 执行

执行就是将翻译的指令进行真正的运算,得出相应的结果。 

译码器翻译之后,将会把这个译码后的内容给指定的运算电路。比如译码出来是乘法运算,那么数据就会发给乘法运算电路,而不是发给加法运算电路。运算电路运算之后将会把结果放在一个寄存器中。

执行之后,PC的值自动偏移指令所需空间的大小值,以便于下一条指令的执行。

ARM概述

1、ARM产品

ARM、CPU、SOC的关系:

ARM内核不是完整的CPU,而是CPU芯片中的核心部分,它需要与其他组件(如缓存、输入/输出接口等)一起集成到一个芯片上,才能构成一个完整的CPU。

SOC就是系统级芯片,也叫片上系统,它指的是将CPU和该产品所需的外设集成在一个芯片中的技术。

ARM系列产品有哪些:

ARM产品的命名发展为:ARM7->ARM9->ARM11->ARM-Cortex。其中Cortex分为A、R、M,不同的类型应用场景也不同。

  • ARM-Cortex A系列:针对开放式操作系统的高性能处理器,应用于智能手机、数字电视、智能本等高端运用
  • ARM-Cortex R系列:针对实时系统、满足实时性的控制需求,应于汽车制动系统、动力系统等
  • ARM-Cortex M系列:为单片机驱动的系统提供了低成本优化方案,应用于传统的微控制器市场、智能传感器、汽车周边等

2、ARM指令集

2.1 指令集相关概念 

什么是指令:

指令就是CPU能够认识的代码,一个CPU能够执行哪些指令,这与CPU的硬件设计相关。指令与CPU的运算器中的运算电路要一一对应,只有这样CPU在译码指令之后才能真正将指令发给运算器去执行。

指令在内存中是以机器码(二进制)的方式存在的,每一条指令都对应一条汇编语言。注意:高级语言C语言与指令并不是一一对应的关系,比如CPU在只有加法但没有乘法的运算电路时,要执行3*3,C语言中可以直接写入3*3,这时编译器会将3*3编译为3+3+3这就对应3条汇编语句,也就是对应3条指令,即:CPU会执行3遍加运算来实现C语言中的3*3语句。

程序就是指令的有序集合

什么是指令集:

指令集就是处理器能够识别的指令的集合,是处理器对开发者提供的接口,即:作为开发者,并不关心CPU中加法电路是如何实现的,只关心哪一条汇编对应加法运算,调用该汇编即可控制加法电路进行工作。

不同架构的处理器指令集也不同,因为每个CPU的运算器中的运算电路可以不同,这就导致CPU能够识别的指令不同,从而指令集不同。

什么是精简指令集RISC:

ARM属于精简指令集处理器。处理器的内核分为两类,一种是精简指令集RISC,一种是复杂指令集CISC,其中ARM是精简指令集内核中应用最广的一种处理器。

RISC就是只保留常用的简单指令,如加减乘除。因此与之对应的硬件运算电路也相应减少,具有硬件结构简单的特点。对于不常用的复杂指令,将通过常用的指令组合实现,这使得性能有所降低。RISC的指令长度是固定的,且多为单周期指令。综上:RISC适用于功耗小、体积小、价格低的需求场景,这就是嵌入式领域。

CISC就是保留了全部的指令,因此对应的硬件运算电路也比较庞大。因为有足够多的针对性的运算电路,所有性能也比较高。CISC的指令长度和周期都不固定。综上:CISC适用于高性能的场景,多于PC及服务器领域。

2.2 ARM指令集

大多数的ARM处理器都支持ARM指令集和Thumb指令集。

ARM指令集:

ARM指令集的指令(机器码)占用32bit空间。ARM指令集的空间大、格式统一、译码简单。

使用ARM指令集时,PC值每次自增4(32bit)。PC存放的是地址,一个地址对应的空间为一字节,因此偏移4,就是32bit。

Thumb指令集:

Thumb指令集的指令(机器码)占用16bit空间。Thumb指令集的代码密度高、节省空间。

使用Thumb指令集时,PC值每次自增2(16bit)。

一般不使用Thumb指令集。

3、编译原理

机器码: 

不同的处理器对应的机器码不同,比如上图所示,x86执行加指令对应的机器码是0101,ARM执行加指令对应的机器码是1100,这种情况代表机器码在不同平台上不具有可移植性

汇编语言:

因为机器码是二进制形式,所以对于人来讲识别比较困难,因此出现了汇编语言。汇编语言实际上就是用一些人能看得懂的符号去表示机器码,它与机器码是一一对应的关系。因此不同的处理器对应的汇编语言不同,汇编语言在不同平台上不具有可移植性

编译工具与高级语言:

高级语言C语言能够实现移植性的问题,这时因为编译器将C语言编译为了不同的汇编语言,从而将汇编语言汇编为相应的机器码。即:不同的平台不需要不同类型的C语言代码,但是需要不同类型的编译器

4、ARM存储模型

ARM存储模型指的是ARM如何存储程序和指令。

4.1 数据存储

什么是32位架构:

ARM采用32位架构,代表ARM处理器单次处理数据的能力。32位架构代表CPU可以一次性运算32位的数据。

数据类型:

Byte -- 8位、Halfword -- 16位、Word -- 32位

C语言的char对应Byte,short对应Halfword,int对应Word。ARM并不能处理浮点型数据float、double,对于这些数据ARM一种方法是用已有的运算进行组合,从而实现浮点运算;另一种方法是使用协处理器,让其他处理器去处理浮点运算。

数据存储:

数据本身是多少字节,在内存存储时就应该以多少字节对齐。 

Word型数据在内存的起始地址必须为4的整数倍,比如起始地址0、4、8,但2、6不行。

Halfword型数据在内存的起始地址必须为2的整数倍,比如起始地址0、2、4,但1、3不行。

这就是C语言结构体中的数据需要对齐的原因。

字节序:

字节序指的是对于一个数据多个字节时,数据在内存中的排序方式,字节序分为大端字节序和小端字节序。大端字节序就是低地址放高位,小端字节序就是低地址放低位。

ARM一般使用的是小端字节序

4.2 指令存储

ARM支持ARM指令集和Thumb指令集,这两种指令集对应ARM状态和Thumb状态。

指令本身是多少字节,在内存存储时就应该以多少字节对齐。 

ARM状态:

当ARM处理器处于ARM状态时,所有指令在内存的起始地址必须为4的倍数,这是因为ARM指令集规定一条指令为32位。

当数据为4的整数倍时,转为二进制后最低两位一定为0。CPU中的PC指向要取出的指令的首地址,因此PC值的最低两位也一定为0。因此PC值由[31:2]决定,[1:0]未定义

[1:0]为未定义的含义是该两位的值会被强制设置为0。因为PC值可以由开发者自行更改,假如在ARM状态非法设置了PC=3(正确情况应该是4的整数倍),这时3转为二进制为...0000 0011(共32位),低两位的11会被强制转为00,最终CPU获取到的PC值是PC = 0。

Thumb状态:

当ARM处理器处于Thumb状态时,所有指令在内存的起始地址必须为2的倍数,这是因为Thumb指令集规定一条指令为16位。

当数据为2的整数倍时,转为二进制后最低一位一定为0。CPU中的PC指向要取出的指令的首地址,因此PC值的最低一位也一定为0。因此PC值由[31:1]决定,[0]未定义

[0]为未定义的含义是该位的值会被强制设置为0。具体含义与ARM状态类似。

5、ARM工作模式

ARM的工作模式:

ARM有8种工作模式,分别是User、FIQ、IRQ、SVC、Abort、Undef、System、Monitor。

  • User:用户模式,也叫非特权模式。当执行上层应用程序时,ARM处于该种模式。User模式下的权限是最低的
  • FIQ:快中断模式,当一个高优先级的中断产生时,ARM进入该模式。
  • IRQ:外部中断模式,当一个低优先级的中断产生时,ARM进入该模式。
  • SVC:管理模式,当复位或软中断时,ARM进入该模式。
  • Abort:终止模式,当CPU存取数据时出现异常时(如:野指针),ARM进入该模式。
  • Undef:指令未定义模式,当CPU执行了不认识的指令时,ARM进入该模式。
  • System:系统模式,使用和User模式一样,但比User的权限高。
  • Monitor:监控模式,为了安全而扩展出的用于执行安全监控代码的模式

模式分类:

1、特权/非特权

User为非特权模式,权限最低。除User外的模式都是特权模式。

2、正常/异常

FIQ、IRQ、SVC、Abort、Undef属于异常模式,User、System、Monitor属于正常模式。

异常模式就是CPU正常执行时候被打断了或者不正常执行的状态。

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

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

相关文章

MetaGeneMark:宏转录组转录本基因预测

GeneMark™ download 下载 gunzip gm_key_64.gz tar -xvzf MetaGeneMark_linux_64.tar.gz #查看安装 (完整路径)/gmhmmp #解压文件里面这个比较重要 MetaGeneMark_linux_64/mgm/MetaGeneMark_v1.mod #复制gm_key文件到主路径 mv gm_key_64 .gm_key cp .gm_key /home/zhongpei…

腾讯轻量云服务器docker拉取不到镜像的问题:拉取超时

前言 也是尝试了各种解决方案之后,无果, 后来发现每个服务器提供商都有自己的镜像加速,且只给自家服务器使用,我用的腾讯云 教程 安装docker 直接上链接:云服务器 搭建 Docker-实践教程-文档中心-腾讯云 配置加速镜…

各家AI性格不同,怎样取长补短

你发现了么,每家的AI性格也有区别呢,有些AI比较啰嗦,有些AI回答简洁明了,有些AI条理清晰喜欢列1、2、3。 我们在利用AI的时候,也要学会取长补短,参考各家AI的回答,择优录用。 例如&#xff0c…

Django安装

在终端创建django项目 1.查看自己的python版本 输入对应自己本机python的版本,列如我的是3.11.8 先再全局安装django依赖包 2.在控制窗口输入安装命令: pip3.11 install django 看到Successflully 说明我们就安装成功了 python的Scripts文件用于存…

Socket 和 WebSocket 的应用

Socket(套接字)是计算机网络中的一个抽象层,它允许应用程序通过网络进行通信。套接字用于跨网络的不同主机上的应用程序之间的数据交换。在互联网中,套接字通常基于 TCP(传输控制协议)或 UDP(用…

Materials Studio 2023安装教程(仅作分享参考)

目录 一、软件下载 二、软件介绍 2.1 软件特点 2.2 功能模块 2.3 应用领域 三、安装步骤 一、软件下载 软件名称:Materials Studio 2023 软件语言:英文 软件大小:2.03G 系统要求:Windows10或更高, 64位操作系…

Spark SQL大数据分析快速上手-DataFrame应用体验

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 本节主要介绍如何使用DataFrame进行编程。 4.1.1 SparkSession 在旧版本中,Spark SQL提供…

SSM中maven

一:maven的分模块开发 maven分模块就是在多人操作一个项目时将maven模块导入依赖,注意仓库里面没有资源坐标,需要使用install操作下载。 二:maven的依赖管理 pom文件中直接写的依赖叫做直接依赖,直接依赖中用到的依…

25中海油笔试测评春招秋招校招暑期实习社招笔试入职测评行测题型微测网题型分享

中海油笔试一般采用线上机考的形式。考试时间为 120 分钟,满分 100 分。笔试内容主要包括思想素质测评和通用能力测评两个科目。以下是具体介绍: 1. 思想素质测评: ✅价值观:考察考生对工作、职业、企业等方面的价值观念和态度&…

【笔记】变压器-热损耗-频响曲线推导 - 04 额定功率处损耗特性

0.最大的问题 - 散热 对变压器这类功率器件,最大的问题是散热的效率。因为传统的电路基板热导率并不高,几乎和良性导热材料有近乎两个数量级的导热差异,所以,会采用特殊的导热技术,把热量尽可能快地传导到散热片。 传…

定高虚拟列表:让大数据渲染变得轻松

定高虚拟列表 基本认识 在数据如潮水般涌来的今天,如何高效地展示和管理这些数据成为了开发者们面临的一大挑战,传统的列表渲染方式在处理大量数据时,往往会导致页面卡顿、滚动不流畅等问题,严重影响用户体验(在页面…

我的博客网站为什么又回归Blazor了

引言 在博客网站的开发征程中,站长可谓是一路披荆斩棘。从最初的构思到实践,先后涉足了多种开发技术,包括 MVC、Razor Pages、Vue、Go、Blazor 等。在这漫长的过程中,网站版本更迭近 10 次,每一个版本都凝聚着站长的心…

Uniapp安装Pinia并持久化(Vue3)

安装pinia 在uni-app的Vue3版本中,Pinia已被内置,无需额外安装即可直接使用(Vue2版本则内置了Vuex)。 HBuilder X项目:直接使用,无需安装。CLI项目:需手动安装,执行yarn add pinia…

<网络> 协议

目录 文章目录 一、认识协议 1. 协议概念 2. 结构化数据传输 3. 序列化和反序列化 二、网络计算器 1. 封装socket类 2. 协议定制 request类的序列化和反序列化 response类的序列化和反序列化 报头的添加与去除 Json序列化工具 Jsoncpp 的主要特点: Jsoncpp 的使用方法: 3. Ser…

群控系统服务端开发模式-应用开发-文件上传功能开发

一、文件上传路由 在根目录下route文件夹中app.php文件中,添加文件上传功能路由,代码如下: Route::post(upload/file,common.Upload/file);// 上传文件接口 二、功能代码开发 在根目录下app文件夹下common文件夹中创建上传控制器并命名为Up…

pycharm小游戏贪吃蛇及pygame模块学习()

由于代码量大,会逐渐发布 一.pycharm学习 在PyCharm中使用Pygame插入音乐和图片时,有以下这些注意事项: 插入音乐: - 文件格式支持:Pygame常用的音乐格式如MP3、OGG等,但MP3可能需额外安装库&#xf…

检索增强和知识冲突学习笔记

检索增强生成任务(Retrieval-Augmented Generation, RAG)是一种自然语言处理技术,它结合了信息检索和生成模型,用于生成高质量的文本输出。具体来说,RAG 模型在生成文本时,会先通过检索模块从外部知识库或文…

从0开始深度学习(25)——多输入多输出通道

之前我们都只研究了一个通道的情况(二值图、灰度图),但实际情况中很多是彩色图像,即有标准的RGB三通道图片,本节将更深入地研究具有多输入和多输出通道的卷积核。 1 多输入通道 当输入包含多个通道时,需要…

网管平台(进阶篇):如何正确的管理网络设备?

网络设备作为构建计算机网络的重要基石,扮演着数据传输、连接和管理的关键角色。从交换机、路由器到防火墙、网关,各类网络设备共同协作,形成了高效、稳定的网络系统。本文将详细介绍网络设备的种类,并探讨如何正确管理这些设备&a…

论文 | Teaching Algorithmic Reasoning via In-context Learning

这篇论文《通过上下文学习教授算法推理》探讨了如何通过上下文学习(In-context Learning, ICL)有效训练大型语言模型(LLMs)以进行算法推理。以下是从多个角度对这项工作的详细解读: 1. 问题陈述与研究动机 算法推理的…