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正常执行时候被打断了或者不正常执行的状态。
相关文章:

2.ARM_ARM是什么
CPU工作原理 CPU与内存中的内容: 内存中存放了指令,每一个指令存放的地址不一样,所需的内存空间也不一样。 运算器能够进行算数运算和逻辑运算,这些运算在CPU中都是以运算电路的形式存在,一个运算功能对应一种运算电…...

深入学习指针(5)!!!!!!!!!!!!!!!
文章目录 1.回调函数是什么?2.qsort使用举例2.1使用qsort函数排序整形数据2.2使用sqort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么? 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递…...
离散无记忆信道
目录 离散无记忆信道输入概率输出概率联合分布概率信道逆向概率一些记号示例1示例2 离散无记忆信道 离散:输入输出字母表都是有限的 无记忆:输出字符 d i d_i di 被接收到的概率只依赖于当前的输入 c i c_i ci, 而与前面的输入无关。 一个离散无记…...

【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
本篇文章分享关于如何使用STM32单片机对彩色摄像头(OV7725/OV2604)采集的图像数据进行分析处理,最后实现颜色的识别和检测。 目录 一、什么是颜色识别 1、图像采集识别的一些基本概念 1. 像素(Pixel) 2. 分辨率&am…...

《AI产品经理手册》——解锁AI时代的商业密钥
在当今这个日新月异的AI时代,每一位产品经理都面临着前所未有的挑战与机遇,唯有紧跟时代潮流,深入掌握AI技术的精髓,才能在激烈的市场竞争中独占鳌头。《AI产品经理手册》正是这样一部为AI产品经理量身定制的实战宝典,…...

ArcGIS 地理信息系统 任意文件读取漏洞复现
0x01 产品简介 ArcGIS是由美国Esri公司研发的地理信息系统(GIS)软件,它整合了数据库、软件工程、人工智能、网络技术、云计算等主流的IT技术,旨在为用户提供一套完整的、开放的企业级GIS解决方案,它包含了一套带有用户界面组件的Windows桌面应用。可以实现从简单到复杂的…...
11.07学习
一、三中代码解决鸡兔同笼问题 1.直接解方程 #include <stdio.h> int main() { int heads, feet, chickens, rabbits; printf("请输入总头数:"); scanf("%d", &heads); printf("请输入总脚数:"); scanf(…...
【JavaEE】常见锁策略、CAS
目录 常见的锁策略 乐观锁 vs 悲观锁 重量级锁 vs 轻量级锁 自锁锁和挂起等待锁 读写锁 可重入锁 vs 不可重入锁 公平锁 vs 非公平锁 CAS ABA问题 synchronized几个重要的机制 1、锁升级 2、锁消除 3、锁粗化 常见的锁策略 乐观锁 vs 悲观锁 乐观锁和悲观锁是锁的…...

Logstash 安装与部署(无坑版)
下载 版本对照关系:ElasticSearch 7.9.2 和 Logstash 7.9.2 ; 官方下载地址 选择ElasticSearch版本一致的Logstash版本 https://www.elastic.co/cn/downloads/logstash 下载链接:https://artifacts.elastic.co/downloads/logstash/logst…...

鸿蒙开发:ArkUI Toggle 组件
ArkUI提供了一套完整的UI开发工具集,帮助开发者高效完成页面的开发。它融合了语言、编译器、图形构建等关键的应用UI开发底座,为应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能以及实时界面预览工具等,可以支持…...

使用Matlab神经网络工具箱
综述 在大数据和人工智能时代,神经网络是一种最为常见的数据分析和拟合工具。本报告以常用分析软件Matlab为例,介绍其中神经网络工具箱使用方法。 Step 1: 打开matlab 安装matlab 2018以上版本后,双击图标打开。 Step 2: 打开神经网络拟合…...
【面试题】Hive 查询:如何查找用户连续三天登录的记录
1. 需求概述 在分析用户行为时,查询用户的连续登录数据是一个常见需求。例如,我们需要找出每个用户连续三天登录的记录。给定一个包含用户登录记录的表,我们需要对这些数据进行处理,提取出用户连续三天登录的日期。 2. 问题说明…...

高活跃社区 Doge 与零知识证明的强强联手,QED 重塑可扩展性
在 Web3 的广阔生态中,Doge 无疑是最具标志性和趣味性的项目之一。作为一种起源于网络文化的符号,Doge 从最初的互联网玩笑发展为如今备受全球关注的去中心化资产,依靠其独特的魅力和广泛的用户基础,构建了一个充满活力的社区。 …...

qt QAbstractTableModel详解
1、概述 QAbstractTableModel 是 Qt 框架中的一个类,用于在 Qt 应用程序中实现自定义的表格数据模型。它是 Qt 中的一个抽象基类,提供了创建和操作表格数据所需的接口。QAbstractTableModel 为模型提供了一个标准接口,这些模型将其数据表示为…...
掌握 Navicat 数据库结构设计 | 提升工作效率的秘诀
近期,我们介绍了 Navicat 17 的一系列的新特性,包括:兼容更多数据库、全新的模型设计、可视化 BI、智能数据分析、可视化查询解释、高质量数据字典、增强用户体验、扩展 MongoDB 功能、轻松固定查询结果、便捷 URI、支持更多平台等。今天&…...

Ollama AI 框架缺陷可能导致 DoS、模型盗窃和中毒
近日,东方联盟网络安全研究人员披露了 Ollama 人工智能 (AI) 框架中的六个安全漏洞,恶意行为者可能会利用这些漏洞执行各种操作,包括拒绝服务、模型中毒和模型盗窃。 知名网络安全专家、东方联盟创始人郭盛华表示:“总的来说&…...

vue 3:监听器
目录 1. 基本概念 2. 侦听数据源类型 1. 监听getter函数 2. 监听 ref 或 reactive 的引用 3. 多个来源组成的数组 4. 避免直接传递值!!! 3. 深层侦听器 4. 立即回调的侦听器 5. 一次性侦听器 6. watchEffect() 7. 暂停、恢复和停止…...

Java学习路线:Maven(四)Maven常用命令
在IDEA的Maven模块中,可以看到每个项目都有一个生命周期 这些生命周期实际上是Maven的一些插件,每个插件都有各自的功能,而双击这些插件就可以执行命令 这些命令的功能如下: clean:清除整个 target文件夹,…...

服务器数据恢复—分区结构被破坏的reiserfs文件系统数据恢复案例
服务器数据恢复环境: 一台服务器中有一组由4块SAS硬盘组建的RAID5阵列,上层安装linux操作系统统。分区结构:boot分区LVM卷swap分区(按照顺序),LVM卷中划分了一个reiserfs文件系统作为根分区。 服务器故障…...
lua入门教程:type函数
在Lua中,type 函数是一个内置函数,用于返回给定值的类型。Lua 支持多种数据类型,包括 nil(空值)、boolean(布尔值)、number(数字)、string(字符串)…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...

篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...