ARMday01(计算机理论、ARM理论)

计算机理论

计算机组成

输入设备、输出设备、运算器、控制器、存储器

1.输入设备:将编写好的软件代码以及相关的数据输送到计算机中,转换成计算机能够识别、处理和存储的数据形式 键盘、鼠标、手柄、扫描仪、

2.输出设备:将计算机处理好的数据的结果通过输出设备输出到计算机的外部 显示屏、打印机、音响。。

3.存储器:计算机用于存放数据以及指令的部件。也是计算机实现"程序存储控制"的基础 外部存储器、内存、cache、寄存器

4.控制器(CU):计算机的控制中枢,对机器指令进行译码操作,并且按照译码之后的结果进行相关的控制

5.运算器(ALU):算数逻辑运算单元:根据控制器译码之后的指令和数据,进行算数逻辑运算,并且把运算的结果进行输出

 编译原理

程序编译步骤:预处理、编译、汇编、链接

程序编译的原理:

CPU能够识别的唯一的语言是机器语言。一个CPU能够识别哪一些机器语言是由CPU的硬件(运算器的类型)决定的。

不同的机器指令代表不同的运算。相同运算在不同的机器上的机器指令不一定一样,不同的机器的机器指令不通用,不可移植。汇编指令就是特定机器指令的标志。汇编指令也是不通用的。我们可以采用不同的编译工具编译程序生成可以被不同架构的机器识别的机器指令文件

指令和指令集

  • 机器指令(指令的机器码):由二进制的0和1组成的一条机器码。计算机解析这条机器码可以做相应的运算处理
  • 汇编指令:一条汇编指令就是一条机器指令的标志。执行汇编指令也可以让机器进行相关的运算处理
  • 指令集:指令的集合

 RISC(精简指令集)和CISC(复杂指令集)

RISC(精简指令集)的架构主要应用于嵌入式的设备上

精简指令集是选取了一些比较简单、使用频率比较高的指令组成的指令集

精简指令集的特点:

1.指令的长度和指令的执行周期固定 指令的长度:一条机器码在计算机中占用的空间 指令的周期:CPU执行一条指令花费的时间(时钟周期) 时钟周期:CPU主频率

2.基于精简指令集设计的CPU核心成本、功耗、体积更低,但是实现的功能也相对简单

CISC(复杂指令集) 基于复杂指令集设计的CPU核心更加注重功能的完善性,复杂指令集内核会集合各自各样的指令。

特点:

1.指令的长度和执行周期不固定

2.复杂指令集设计的CPU核心实现的功能更为复杂,但是功耗、成本都会更高

 

目前几种主流的RISC内核

ARM内核:主流的嵌入式内核,需要得到ARM的授权

RISC-V:正在快速发展,未来会成为主流

MIPS:完全闭源,中国龙芯科技直接买断,完全垄断,在它的基础上还进行了一些拓展

 ARM

ARM架构

不同版本的指令集就是不同的架构

ARMV1-ARMV6:已经被淘汰 ARMV7架构:

32位架构,支持32位指令集 ARMV8架构:

64位架构,支持64位指令集,并且向下兼容32位指令 ARMV9架构:

64位架构,支持64位指令集

ARM内核

基于不同的ARM架构设计出来的不同的处理器核心叫做不同的ARM内核

SOC(system on chip)

ARM公司只进行技术授权。将自己的IP授权给各个半导体公司。半导体公司根据ARM的授权,在CPU核心外围设计了一些外围电路和设备,集成在一个芯片上,这个芯片就被成为SOC。

SOC由CPU+外设备+总线组成

MCU(微控制器) MPU(微处理器)

公司 SOC名称 内核 架构

ST STM32MP157A cortex-A7 ARMV7

三星 S5P6818 cortex-A53 ARMV8

海思 麒麟9000 cortex-A77 ARMV8

高通 骁龙888 cortex-x1 ARMV8

 ARM的产品分步

Cortex-A系列

Cortex-A系列 的核心是ARM处理器中性能最强的、最完善的处理器。属于高端处理器 在基于Cortex-A处理器为核心的开发板上可以搭载linux/鸿蒙灯标准化操作系统

Cortex-R系列 

Cortex-R系列 处理器追求系统的实时性能。对数阶的实时性要求高的场景下使用Cortex-R系列 处理器 汽车、军工

Cortex-M系列

属于ARM处理器中比较低端的芯片处理器,工作主频一般在24M-256MHz之间 Cortex-M系列 处理器一般不跑操作系统,主要执行一些裸机程序 Cortex-M系列 处理器可以搭载一些轻量级的实时系统 FreeRtos

SecurCore系列 

用于对安全性能要求比较高的场景

 ARM数据约定

A7采用的是32位架构.

Byte 8 bits.

Halfword 16 bits.

Word 32 bits.

Doubleword 64 bits.

32位指令集:一条指令占据存储空间的大小是32位

32位处理器:处理器一条指令最大能进行32位数据的运算

 大部分ARM core 提供:

ARM 指令集(32-bit)

Thumb 指令集(16-bit )

Cortex-A处理器

16位和32位Thumb-2指令集

16位和32位ThumbEE指令集

 ARM的工作模式

ARM 有7种基本工作模式:

User : 非特权模式,大部分任务执行在这种模式

FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式

IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式

Supervisor :当复位或软中断指令执行时将会进入这种模式

Abort : 当存取异常时将会进入这种模式

Undef : 当执行未定义指令时会进入这种模式

System : 使用和User模式相同寄存器集的特权模式

Cortex-A特有模式: Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式; 也是一种特权模式

HYP:虚拟化模式,当一个硬件上运行两种OS内核时进入这种模式

 

ARM寄存器组织

计算机内部存储模块介绍

寄存器概念

寄存器是集成在CPU内部的存储组织,CPU访问寄存器数据的时候只需要根据寄存器的编号就可以访问到寄存器的数值。访问寄存器的速度块。但是寄存器存在数量限制,保存的数据量也很少

ARM v7架构下的寄存器组织

ARM 有37个32-Bits长的寄存器: 1 个用作PC( program counter)

1个用作CPSR(current program status register)

5个用作SPSR(saved program status registers)

30 个通用寄存器

Cortex体系结构下有40个32-Bits长的寄存器:

Cortex-A多出3个寄存器,

Monitor 模式 r13_mon , r14_mon, spsr_mon

当前处理器的模式决定着哪组寄存器可操作.

任何模式都可以存取:

相应的r0-r12子集

相应的 r13 (the stack pointer, sp) and r14 (the link register, lr)

相应的 r15 ( the program counter, pc)

相应的CPSR(current program status register, cpsr)

特权模式 (除system模式) 还可以存取:

相应的 spsr (saved program status register)

每一个寄存器大小都是32位

ARMV8架构寄存器组织

ARMV7架构下一些具有特定功能的寄存器

R13寄存器(the stack pointer, sp)

R13寄存器又叫SP(栈指针寄存器),这个寄存器内部保存栈顶的地址 一般在内存中分出一部分内存当作栈来使用,SP寄存器时钟保存栈顶空间的地址 栈一般存放一些临时数据,也可以用于保护现场

r15寄存器(the program counter, pc) 

R15寄存器又被称为PC寄存器(程序计数器) 这个寄存器始终保存马上要进行取址的指令的地址,当一条指令执行结束之后PC寄存器的数值会自动向下+4 另外,在特定情况下可以手动修改PC的值进行程序的跳转

 R14寄存器(the link register, lr)

R14寄存器又被称为链接寄存器,当程序在实现跳转的时候,LR寄存器中保存当前跳转指令下一条指令的地址。方便 实现程序的返回 程序的跳转实现: PC-》跳转之后指令的地址 程序的返回: PC=LR

CPSR寄存器(current program status register, cpsr) 

CPSR:程序状态寄存器

这个寄存器中保存当前程序的运行状态,比如工作模式等信息

SPSR:saved program status register

SPSR寄存器可以用于保存程序某一时刻的状态

比如当发生异常之后,处理器的工作模式要切换到对应的异常模式去处理异常,这样CPSR的数值会发生对应的改变 在处理完异常结束后,我们需要将CPSR的值修改为没有发送异常之前的状态,这个时候就可以将SPSR保存的异常发送之前的状态赋值给CPSR

 

1. N[31] : 指令的运行结果为负数时,N位被自动置1,否则为0.

eg : 100 - 200

2. Z[30] : 指令的运行结果为零时,Z位被自动置1,否则为0.

100-100

3. C[29] :

加法:加法运算如果产生进位,C位被自动置1,否则为0.

32位指令:低32位向高32位进位 0XFFFFFFFF+1

减法:减法运算如果产生借位,C位被自动清0,否则位1.

32位指令:低32位向高32位借位 1-0XFFFFFFFE

4. V[28] : 符号位发送变化,V位被自动置1,否则清0.

5. I[7] : IRQ中断屏蔽位 I = 0 : 不屏蔽IRQ中断 I = 1 : 屏蔽IRQ中断

6. F[6] : FIQ中断屏蔽位 F = 0 : 不屏蔽FIQ中断 F = 1 : 屏蔽FIQ中断

7. T[5] : 状态位

T = 0 : 表示ARM状态,执行的是ARM指令集

T = 1 : 表示Thumb状态,执行的是Thumb指令集

ARM指令集 : 一条汇编指令编译生成32位的机器码

thumb指令集:一条汇编指令编译生成16位的机器码

ARM指令集的代码的密度低,而thumb指令记得代码密度高。

ARM指令集的功能性要高于Thumb指令集。

8. M[4:0] : 模式位

10000 User mode;

10001 FIQ mode;

10010 IRQ

10011 SVC mode;

10111 Abort mode;

11011 Undfined mode;

11111 System mode;

10110 Monitor mode;

其他没有使用到的值,保留。 

ARM的流水线工作 

一条指令的执行过程

取址:CPU将PC寄存器中保持的指令地址通过地址总线传输给存储器,存储器将PC对应的指令通过数据总线传输给CPU。CPU将指令保存在IR(指令暂存寄存器)寄存器中

译码:IR寄存器的指令交给译码器,对指令进行译码

执行:译码器对指令译码之后由运算器对译码之后的指令进行运算

ARM三级流水线 

当一条指令在被取址是,译码模块和执行模块处于空闲状态,这样这两个模块相当于没有得到充分利用。为了充分,利用资源,ARM引入了流水线工作,增加了指令的处理速度

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

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

相关文章

解决 github.com 或者 raw.githubusercontent.com 打开慢、打不开问题

系列文章目录 文章目录 系列文章目录前言一、Windows 系统1.1 以管理员身份运行记事本1.2 打开 hosts 文件1.3 写入 IP 地址 二、Linux2.1 hosts 文件位置 三、Android 系统总结 前言 连接手机热点,将流量关闭马上打开,进入的成功率更高 一、Windows 系…

Netty入门指南之NIO 粘包与半包

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言问题产…

深度学习读取txt训练数据绘制参数曲线图的方法

有一些深度学习模型是并不像yolo系列那样最终输出相应的参数图,有很多训练形成了一个训练log文件,于是需要读取log文件中的内容并绘制成曲线图。 如下实例,有一个log文件的部分截图,需要将其读取出来并绘制曲线图 废话不多说&…

前端之Bootstrap框架

目录 【一】Bootstrap介绍 【二】Bootstrap引入 【1】CDN加速链接 【2】注意 【三】布局容器 【四】栅格系统 【五】栅格参数 【六】列偏移 【七】排版 标题 内联文本元素 对齐 改变大小写 引用 列表 【八】表格 基本实例 条纹状表格 带边框的表格 鼠标悬停…

汽车工业生产线数字孪生可视化管理平台,赋予工厂车间数字化智慧化管理

在工业4.0 的时代背景下,随着企业数字化进程的推进,数字孪生可视化技术逐渐在汽车行业得到广泛应用,数字孪生智慧工厂的建设也成为了汽车行业数字化转型的趋势之一。汽车制造业属于典型的离散制造行业,汽车生产包含冲压、焊接、涂…

19.13 Boost Asio 发送TCP流数据

Boost框架中默认就提供了针对TCP流传输的支持,该功能可以用来进行基于文本协议的通信,也可以用来实现自定义的协议。一般tcp::iostream会阻塞当前线程,直到IO操作完成。 首先来看服务端代码,如下所示在代码中首先通过GetFileSize…

C++的Odyssey之旅——STL

W...Y的主页 😊 代码仓库分享💕 🍔前言:我们已经将基本语法了解的差不多了,现在我们就该进入C中最重要也是最富有特点的一部分——STL。在学习C语言中我们想要使用顺序表、链表等一些数据结构进行做题时都需要进行这…

Go invalid memory address or nil pointer dereference错误 空指针问题

Go 指针声明后赋值,出现 panic: runtime error: invalid memory address or nil pointer dereference,这种是内存地址错误。 首先我们要了解指针,指针地址在 Go 中 * 代表取指针地址中存的值,& 代表取一个值的地址对于指针&am…

WordPress主题 JustNews主题6.0.1(亲测首页不空白)

介绍 资源入口 需要用WordPress5.X版本 JustNews介绍:一款专为博客、自媒体、资讯类的网站设计开发的WordPress主题,自v3.0版开始支持自主研发的前端用户中心,不仅支持注册、登录、账户设置、个人中心等常用页面的添加,还可以上传…

【原创】java+jsp+servlet简单图书管理系统设计与实现

摘要: 图书管理系统是一个专门针对图书馆管理而设计的系统,它可以帮助图书管理员有效的对图书进行管理,在图书管理系统的设计中,首先要考虑的是系统的需求分析,该系统的设计与实现涉及多个方面,包括数据库…

【赠书第2期】嵌入式虚拟化技术与应用

文章目录 前言 1 背景概述 2 专家推荐 3 本书适合谁? 4 内容简介 5 书籍目录 6 权威作者团队 7 粉丝福利 前言 随着物联网设备的爆炸式增长和万物互联应用的快速发展,虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式…

Linux 入门

Linux 入门 1:linux 用户 root 用户 :也叫超级用户,UID0,其权限最高。系统用户:也叫虚拟用户,UID 1-999普通用户: UID1000-60000, 可以登录系统,操作自己目录下的文件. 1.1:用户操作命令 切换用户: su …

ts面试题总结

文章目录 前言ts和js的区别?什么是Typescript的方法重载?Typescript中never 和 void 的区别?typescript 中的 is 关键字有什么用?TypeScript支持的访问修饰符有哪些?如何定义一个数组,它的元素可能是字符串…

【Mybatis小白从0到90%精讲】12:Mybatis删除 delete, 推荐使用主键删除!

文章目录 前言XML映射文件方式推荐使用主键删除注解方式工具类前言 在实际开发中,我们经常需要删除数据库中的数据,MyBatis可以使用XML映射文件或注解来编写删除(delete)语句,下面是两种方法的示例。 XML映射文件方式 Mapper: int delete(int id);Mapper.xml:

U-Mail信创邮件系统解决方案

近年来,在国家政策的大力引导和自身数字化转型需求驱动下,国产化成为国内数字化发展道路上的关键词,企业不断加强自主创新能力,进行信创建设,实现软硬件系统国产化替代,已成为大势所趋。邮件系统作为企业管…

YOLO目标检测数据集大全【含voc(xml)、coco(json)和yolo(txt)三种格式标签+划分脚本+训练教程】(持续更新建议收藏)

一、作者介绍:资深图像算法工程师,YOLO算法专业玩家;擅长目标检测、语义分割、OCR等。 二、数据集介绍: 真实场景的高质量图片数据,数据场景丰富,分享的绝大部分数据集已应用于各种实际落地项目。所有数据…

MarkdownPad2, CSDN及有道云笔记对数学公式的支持

MarkdownPad2, CSDN及有道云笔记对数学公式的支持 MarkdownPad2的安装 下载并安装MrakdownPad2软件,下载地址安装awesomium_v1.6.6_sdk_win, 下载地址安装支持公式编辑的插件,注意,在MarkdownPad2的 Tools > Options > Ad…

Linux提权方法总结

1、内核漏洞提权 利用内核漏洞提取一般三个环节:首先对目标系统进行信息收集,获取系统内核信息及版本信息 第二步,根据内核版本获取对应的漏洞以及exp 第三步,使用exp对目标进行攻击,完成提权 注:此处可…

景联文科技提供高质量人像采集服务,助力3D虚拟人提升逼真度

人像采集是一种通过特定设备或技术,对人的相貌、身材等特征信息进行收集和处理的过程,可应用于3D虚拟人领域。通过采集大量的人像数据,可以训练和优化人像识别算法,提高其准确性。 人像采集对于提高3D虚拟人的逼真度、个性化定制以…

flink的带状态的RichFlatMapFunction函数使用

背景 使用RichFlatMapFunction可以带状态来决定如何对数据流进行转换,而且这种用法非常常见,根据之前遇到过的某个key的状态来决定再次遇到同样的key时要如何进行数据转换,本文就来简单举个例子说明下RichFlatMapFunction的使用方法 RichFl…