LV08-01-ARM体系-01-ARM处理器与指令集简介

本文主要是ARM基础知识——处理器与指令集简介相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows windows11
Ubuntu Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
SecureCRT Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日
开发板 正点原子 i.MX6ULL Linux阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
STM32开发板 正点原子战舰V3(STM32F103ZET6)
Keil(MDK) Keil uVision V4.54.0.0
点击查看本文参考资料
参考方向 参考原文
------
点击查看相关文件下载
--- ---

一、ARM处理器概述

1. ARM产品系列

  • 早期的经典处理器

包括了ARM7ARM9ARM11家族。

  • Cortex-A系列

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

Cortex-A8Cortex-A9Cortex-A15Cortex-A53

  • Cortex-R系列

    针对实时系统、满足实时性的控制需求,主要应于汽车制动系统、动力系统等方面。例如,Cortex-R4Cortex-R5Cortex-R7

  • Cortex-M系列

    这系列的芯片为单片机驱动的系统提供了低成本优化方案,主要应用于传统的微控制器市场、智能传感器、汽车周边等方面。例如,Cortex-M0Cortex-M1Cortex-M3Cortex-M4Cortex-M7

2. RISCCISC

  • RISC处理器

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

  • CISC处理器

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

  • SOC

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

二、ARM指令集概述

1. 指令

能够指示处理器执行某种运算的命令称为指令(如加、减等)。指令在内存中以机器码(二进制)的方式存在,每一条指令都对应一条汇编,我们所写的程序其实就是指令的有序集合。

2. 指令集

处理器能识别的指令的集合称为指令集。不同架构的处理器指令集不同,指令集是处理器对开发者提供的接口。

3. ARM指令集

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

  • ARM指令集

所有指令(机器码)都占用32bit存储空间,它的代码灵活度高、简化了解码复杂度,执行ARM指令集时PC(程序计数器)值每次自增4ARM指令集大概分为六种:

数据处理指令进行数学运算、逻辑运算
跳转指令实现程序的跳转,本质就是修改了PC寄存器
Load/Store指令访问(读写)内存
状态寄存器传送指令用于访问(读写)CPSR寄存器
软中断指令触发软中断
协处理器指令操作协处理器的指令

其中前三种是通用指令,也就是所有的处理器都有的指令,在C语言中都有相应的语句可以被编译成对应的指令,后三种是ARM专用指令,在C语言中没有相应的语句,所以不会有哪条C语言语句会被编译成后边三种指令。

  • Thumb指令集

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

4. 机器码与汇编

4.1 机器码

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

4.2 汇编语言

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

4.3 C语言

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