2、ARM处理器概论

一、ARM处理器概述

1、ARM的含义

ARM(Advanced RISC Machines)有三种含义,一个公司的名称、一类处理器的通称、一种技术

ARM公司:

  • 成立于1990年11月,前身为Acorn计算机公司
  • 主要设计ARM系列RISC处理器内核
  • 授权ARM内核给生产和销售半导体的合作伙伴,ARM公司并不生产芯片
  • 提供基于ARM架构的开发设计技术软件工具、评估板、调试工具、应用软件总线架构、外围设备单元等

2、ARM产品系列

在这里插入图片描述

早先经典处理器:

  • 包括ARM7、ARM9、ARM11家族

Cortex-A系列:

  • 针对开放式操作系统的高性能处理器,应用于智能手机、数字电视、智能本等高端运用

Cortex-R系列:

  • 针对实时系统、满足实时性的控制需求,应于汽车制动系统、动力系统等

Cortex-M系列:

  • 为单片机驱动的系统提供了低成本优化方案,应用于传统的微控制器市场、智能传感器、汽车周边等

3、RISC处理器

  • 只保留常用的简单指令,硬件结构简单。复杂操作一般都通过简单指令的组合实现,一般指令长度固定,且多为单周期指令
  • RISC处理器在功耗、体积、价格方面有很大的优势,所以在嵌入式移动终端领域应用极为广泛

4、CISC处理器

  • 不仅包含了常用指令,还包含了许多不常用的特殊指令,硬件结构复杂、指令条数较多,一般指令长度和周期都不固定
  • CISC处理器在性能上有很大优势,多用于PC及服务器等领域

5、SOC(System on Chip)

  • 即片上系统,将一个系统中需要的全部部件集成在一个芯片中,在体积、功耗、价格上有很大的优势

二、ARM指令集概述

1、指令集

  • 指令:
    • 能够指示处理器执行某种运算的命令称为指令(加、减、乘…)
    • 指令在内存中以机器码(二进制)的方式存在
    • 每一条指令都对应一条汇编
    • 程序是指令的有序集合
  • 指令集:
    • 处理器能够识别的指令的集合称为指令集
    • 不同架构的处理器的指令集不同
    • 指令集是处理器对开发者提供的接口
      在这里插入图片描述

2、ARM指令集

大多数ARM都支持两种指令集
ARM指令集:

  • 所有的指令(机器码)都占用32bit的存储空间
  • 代码灵活度高,简化了解码的复杂度
  • 执行ARM指令集时,PC值每次自增4

Thumb指令集:

  • 所有指令(机器码)都占用16bit存储空间
  • 代码密度高、节省存储空间
  • 执行Thumb指令集时,PC值每次自增2

在这里插入图片描述

3、编译原理

  • 1、机器码(二进制)是处理器能够直接识别的语言,不同的机器码代表不同的运算指令,处理器能够识别哪些机器码是由处理器的硬件设计所决定的,不同的处理器机器码不同,所以机器码不可移植

  • 2、汇编语言是机器码的符号化,即汇编就是用一个符号来代替一条机器码,所以不同的处理器汇编也不一样,即汇编语言不可移植

  • 3、C语言在汇编时我们可以使用不同的编译器将C源码编译成不同的架构处理的汇编,所以C语言可以移植

三、ARM存储类型

1、ARM数据类型

ARM采用32位架构,基本数据类型有一下三种:

  • Byte:8bit
  • HalfWord:16bit
  • Word:32bit

数据存储:

  • Word型数据在内存的起始地址必须是4的整数倍
  • Half Word型数据在内存的起始地址必须是2的整数倍

注:即数据本身是多少位在内存存储时就应该多少位对齐
在这里插入图片描述

2、字节序

大端对齐

  • 低地址存放高位,高地址存放低位
  • 如:a = 0x12345678
    在这里插入图片描述
    小端对齐
  • 低地址存放低位,高地址存放高位
  • 如:a = 0x12345678
    在这里插入图片描述
    注:ARM一般使用小端对齐

3、ARM指令存储

处理器处于ARM状态时

  • 所有的指令在内存的起始地址必须是4的整数倍
  • PC值由其[31:2]决定,[1:0]位未定义

处理器处于Thumb状态时

  • 所有指令在内存的起始地址必须是2的整数倍
  • PC值由其[31:1]决定,[0]位未定义

注:即指令本身是多少位在内存存储时,就应该多少位对齐

四、ARM工作模式

1、ARM有八个基本的工作方式模式

  • User:非特权模式,一般在执行上层的应用程序时ARM处于该模式
  • FIQ: 当一个高优先级中断产生后ARM将进入这种模式
  • IRQ:当一个低优先级中断产生后ARM将进入这种模式
  • SVC:当复位或执行软中断指令后ARM将进入这种模式
  • Abort:当产生存取异常时ARM将进入这种模式
  • Undef:当执行未定义的指令时ARM将进去这种模式
  • System:使用和User模式相同的寄存器集的特权模式
  • Moniter:为了安全而扩展出的用于执行安全监控代码的模式

2、不同模式的理解

  • 不同的模式拥有不同的权限
  • 不同模式执行不同代码
  • 不同模式完成不同功能

3、模式的分类

按照权限分:

  • User为非特权模式(权限较低),其余模式均为特权模式(权限较高)

按照状态分:

  • FIQ、IRQ、SVC、Abort、Undef属于异常模式,即当处理器遇到异常的时候会进入对应的模式

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

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

相关文章

调整参数提高mysql读写速度

要提升MySQL的写入速度,您可以采取一些参数调整和优化措施,这些措施可以根据您的具体应用和环境进行调整。以下是一些常见的参数和优化建议: InnoDB存储引擎: 如果您使用的是InnoDB存储引擎,确保以下参数被设置得合理: innodb_buffer_pool_size:增加内存池大小,以便更多…

idea设置项目启动的JVM运行内存大小

idea设置项目启动的JVM运行内存大小 场景 在开发当中,idea默认服务启动要占用1G内存。其实每个项目本地开发和调试的时候,根本不需要1G内存,200M左右足以 如果在微服务体系下,那效果更明显,相同的内存可以启动更多的…

一代人有一代人的使命

一、前言 今天是9.18,对于全体中国人民来说是一个不应该被遗忘的日子,1931年9月18日,日本发动了9.18事变。 前辈们后来经过了艰苦卓绝的抵抗,经过12年的抗战,最后才取的抗日战争的胜利,可以说,今天的日子来之不易。 博主想说的是一代人有一代人的使命。100年前,先辈们…

人脸修复祛马赛克算法CodeFormer——C++与Python模型部署

一、人脸修复算法 1.算法简介 CodeFormer是一种基于AI技术深度学习的人脸复原模型,由南洋理工大学和商汤科技联合研究中心联合开发,它能够接收模糊或马赛克图像作为输入,并生成更清晰的原始图像。算法源码地址:https://github.c…

Java增强for循环(学习笔记)

Java增强for循环 主要用于数组或者集合的增强型for循环。 格式: for(声明语句:表达式){ 代码句子 } 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元…

java使用selenium自动化WebDriver等待

显式等待和隐式等待是WebDriver中两种常用的等待方式,它们都可以用来等待特定的条件满足后再继续执行代码。 显式等待(Explicit Wait):使用WebDriverWait类来实现,可以根据特定条件等待元素出现、可见、可点击等。 示例…

使用Node构建私人代理池

在进行大规模数据采集时,经常会遇到网站反爬虫机制导致爬虫被封的问题。为了解决这个困扰,本文将向大家介绍如何利用Node.js构建私人代理池,提供稳定的代理,实现高效、可靠的爬虫操作。跟随本文一起学习,拥有解封爬虫的…

sentry安装self-hosted版,前端监控平台

一、下载self-hosted-23.7.2.tar.gz 二、解压 三、cd self-hosted-23.7.2然后执行./install.sh 四、查找python whereis python修改yum配置文件:vim /usr/bin/yum五、修改RUN apt-get update && apt-get install -y --no-install-recommends cron &…

9月15日上课内容 Zookeeper集群 + Kafka集群

Zookeeper 本章结构 Zookeeper 概述 Zookeeper 定义 *(了解) Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制 *****(非常重要,需要掌握) Zookeeper从设计模式…

检索技术核心学习总结

一、学习检索技术的必要性分析 (一)关键原因分析 学习检索技术(Information Retrieval,IR)具有多种重要的原因,特别是在今天信息爆炸的数字化时代。 总的来说,学习检索技术有助于提高信息处理…

x86平台运行arm64平台docker 镜像

本文介绍在x86服务器上安装qemu-aarch64-statick仿真器,以实现x86服务器可以运行docker或docker-compose镜像。 报错信息: x86服务器默认不能运行ARM平台镜像,会提示如下错误: WARNING: The requested images platform (linux/ar…

1400*C. No Prime Differences(找规律数学)

解析&#xff1a; 由于 1 不是质数&#xff0c;所以我们令每一行的数都相差 1 对于行间&#xff0c;分为 n、m之中有存在偶数和都为奇数两种情况。 如果n、m存在偶数&#xff0c;假设m为偶数。 如果都为奇数&#xff0c;则&#xff1a; #include<bits/stdc.h> using name…

(压缩PDF)Adobe Acrobat DC

需求 压缩PDF大小到2MB以下 方法 工具&#xff1a;Adobe Acrobat DC 1、简单方法&#xff1a;压缩 PDF&#xff0c;缩小 PDF 大小&#xff0c;使用 Adobe Acrobat DC 压缩 PDF。 - 卖五金的小贩的文章 - 知乎 意外的好用&#xff0c;不会压缩到太狠&#xff08;选了兼容Ac…

【Qt】QGroundControl入门2:下载、编译、错误处理、运行

1、源码下载 git clone https://github.com/mavlink/qgroundcontrol.git 2、下载依赖库 2.1 查看依赖库的github路径 cat .gitmodules[submodule "src/GPS/Drivers"]path = src/GPS/Driversurl = https://github.com/PX4/GpsDrivers.git [submodule "libs/m…

Google Guava精讲(一)-Guava是什么?能做什么?

https://mvnrepository.com/artifact/com.google.guava/guava 作为Java栈的测试工程师&#xff0c;在写代码时候会频繁遇到字符串处理、缓存、反射等问题&#xff0c;我们最常规的做法就是&#xff0c;为了使原生的JDK方法好用&#xff0c;通常是做了一层又一层封装&#xff0…

RK3588修改eth0和eth1,对调这两个网卡设备的名称

1、以太网卡的名称一般是ethX&#xff08;X可以是0&#xff0c;1&#xff0c;2&#xff0c;3…&#xff09;&#xff0c;一般我们的设备只有一个网卡&#xff0c;并且一般也不会改变它的网卡名称&#xff0c;所以不需要关注此问题&#xff0c;但是有一些设备有两三个网卡&#…

new/delete, malloc/free 内存泄漏如何检测

区别&#xff1a; 首先new/delete是运算符&#xff0c;malloc/free是库函数。malloc/free只开辟内存不初始化&#xff1b;new/delete及开辟内存也初始化。抛出异常的方式&#xff1a;new/delete开辟失败使用抛出bad_alloc&#xff1b;malloc/free通过返回值判断。malloc和new区…

el-table 翻页记住上页选项,包含回显选中的数据

需求为翻页记住上页选项,包含回显选中的数据,然后还能进行新增和取消勾选 首先element管网有提供及住翻页功能 所以可以根据官网提供的方法来改造 一定要做的操作就是清空一下选中的数据,否则不生效,this.$refs.selectTable.clearSelection(); 然后就是处理选中的数据,和原…

强强/视频SDK:VisioForge SDKs .Net 15.6.8 Crack

VisioForge 为软件开发人员提供视频捕获、编辑和播放解决方案 使用我们的开发人员软件&#xff0c;您可以开发用于从多种来源&#xff08;例如网络摄像头、IP 摄像机、摄像机或 PC 屏幕&#xff09;捕获视频的应用程序。视频可以保存为所有最流行格式的视频文件&#xff0c;例如…

前端笔面编程收录【按公司】

目录 虚拟DOM【腾讯音乐笔试】 连字转驼峰【美团一面】 1.split(-) 2.toUpperCase() 3.slice(1) 用友sp 一面【二选一】 数组相邻和最大的对应两个元素 千位分割【无负数&#xff0c;含小数】 二面 华容道&#xff1a;BFS k / 3, y k % 3; //一维数组下标转化到二…