处理器架构 (四) ARM指令集

  • ARM 命名规则——指令架构、CPU的历史回顾
  • arm指令集版本和arm版本
  • arm有多少指令集_官网
arm的指令集有 ARM64指令集 ARM(32)指令集 THUMB指令集 THUMB-2指令集 NEON指令集 VFP指令集 DSP指令集  Jazelle instruction

// 实际上他们都属于 ARM指令集, 也可以说是 ARM指令集 的扩展

自从armv1 开始,ARM指令集一直就在,且跟随版本变化而不断升级.
从armv4中的 ARM7E 系列开始就支持增强型DSP指令集,后续命名只要有符号E,就代表支持增强型DSP指令集.
从armv4中的 ARM7TDMI 开始就支持 thumb指令集(命名中带T就表示支持thumb指令集)
armv5 已经支持vfp
从armv6(ARM11系列) 开始就支持(armv5不支持)SIMD,且支持 vfpv2(不知道哪个版本先支持的vfp,应该命名中带有F,就支持VFP)armv7(cortex-a系列) 开始就支持(armv6不支持)NEON(高级SIMD),且支持vfpv3(a7)vfpv4(a15),不再有SIMD术语,NEON只适用于 ARM Cortex-A 类处理器
从armv6-m 开始就支持(armv6-ar不支持)(之前版本不支持)Thumb-2 , 向后不再有thumb术语

Jazelle instruction 不开放
	For the Jazelle instruction set, contact ARM Limited
  • 下图为 ARM官网文档 中的图,与上述有出入,待验证
    处理器架构 (四) ARM指令集_第1张图片

ARM指令集与armv8


ARM指令具有固定宽度的4字节编码,需要4字节对齐。 

ARMv8指令集分为Aarch64和Aarch32。

Aarch32与ARMv7基本相同,不同处的比较
	多了一些vfp的指令
	armv7的软件模拟实现改为Aarch32的硬件支持,可以说是靠着后者实现对Aarch32的向前兼容。

Aarch64是升级的那一部分,相较于Aarch32比较,总体来说Aarch64更规整了,也更简单。
	指令编码不同(虽然也是32位)
	寄存器多了
	寄存器变宽了(64位)
	功能寄存器和通用寄存器分开(除了x30也是rl)
	没有THUMB
	架构上的变化:如exception level,stack alignment 等。

THUMB指令集 & THUMB-2指令集

  • ARM,Thumb和Thumb 2指令编码有什么区别?
THUMB指令集 2-4 字节
Thumb指令具有可变长度(24字节,现在称为“窄”和“宽”)编码,需要2字节对齐 – 大多数指令具有2字节编码,但bl和blx始终具有4字节编码*

Thumb-2 是Thumb 指令集的增强指令集,并且由ARMv6T2 和ARMv7M体系 结构定义。 
	Thumb-2 提供的功能包含几乎与ARM指令集(32位指令集)所有的功能
	thumb-2 包含thumb(16位指令集)的功能.
	16位指令首次与32位指令并存.
	在Thumb状态下支持thumb-2(arm指令集和thumb指令集的综合版本)无需烦心地把处理器状态在Thumb和ARM之间来回的切换了。

VFP指令集

  • VFP–ARM浮点体系结构机介绍
  • 浮点生成选项
  • 浮点指令
  • ARM架构big.LITTLE、Thumb、Jazelle、TrustZone、VFP、SIMD、NOEN等常用术语解析
  • ARMv8比ARMv7升级在哪?
armv6 是有 VFP的 , 负责  标量浮点运算 , 向量浮点运算  // SIMD 负责 向量整数运算
armv7 有FP , 且 FP  只 负责 标量浮点运算  //  Advanced SIMD(又称NEON) 负责 向量(浮点与整数)运算  // SIMD  升级成了 Advanced SIMD
armv8 有FP , 且 FP  只 负责 标量浮点运算  //  Advanced SIMD(又称NEON) 负责 向量(浮点与整数)运算 
ARMv6-VFP ARMv7-FP ARMv8-FP
寄存器 非ARM寄存器,非SIMD寄存器 非ARM寄存器,SIMD寄存器 非ARM寄存器,SIMD寄存器
单精度浮点向量 Y N N
单精度浮点标量 Y Y Y
双精度浮点标量 Y Y Y

DSP指令集 & SIMD指令集 & NEON指令集

  • DSP & SIMD & NEON
  • ARM DSP & SIMD技术简介
  • NEON-Advanced SIMD vs. SIMD
  • ARM NEON常用函数总结
  • ARM平台NEON指令的编译和优化
  • arm neon 指令集
  • ARM Neon 指令 解释
  • ARM NEON 编程系列2 - 基本指令集
  • ARM NEON 基本指令集介绍
armv6  SIMD 负责 向量整数运算 //  VFP的 , 负责  标量浮点运算 , 向量浮点运算
armv7 Advanced SIMD(又称NEON) 负责 向量(浮点与整数)运算  // SIMD  升级成了 Advanced SIMD // FP  只 负责 标量浮点运算  
armv8 Advanced SIMD(又称NEON) 负责 向量(浮点与整数)运算  // FP  只 负责 标量浮点运算 
ARMv6-SIMD ARMv7-NEON(Advanced SIMD) ARMv8-NEON
寄存器 Operates on 32-bit general purpose ARM registers Separate register bank with arm, 32x64-bit NEON registers(与FP共用寄存器) Separate register bank with arm, 32x128-bit NEON registers(与FP共用寄存器)
整型向量 8-bit/16-bit integer 8/16/32/64-bit integer 8/16/32/64-bit integer
单精度浮点向量 Single precision floating point Single precision floating point
双精度浮点向量 double precision floating point
性能 2x16-bit/4x8-bit operations per instruction 16x8-bit operations per instruction 16x8-bit operations per instruction

armv-8

  • armv8 异常模型
  • armv8 内存管理
  • armv8内存模型
  • armv8指令集架构
  • armv8.x扩展

指令集应该包括什么内容

*指令* 是操作方法
指令处理的数据在 *寄存器**内存* 里面.
指令执行的时候会出现一些非正常情况,叫做 *异常*
	异常发生之后硬件怎么做动作,我们需要知道.
	硬件给我们相应的接口(将要运行的地址(PC寄存器的值)和其他寄存器(包括出错的状态)),然后我们用软件来弥补
执行执行过程中会有一个 译码的过程. 确定操作对象所在位置 会涉及到 *寻址方式*
	1.分解指令操作(确定操作内容) 2.确定操作对象(操作数)所在位置(寄存器,存储器,输出输出设备)
  • 寄存器
  • 指令
  • 异常处理

汇编

  • 汇编有什么用途
许多在应用程序级别编写代码的程序员几乎没有理由使用汇编语言编写代码。
但是,下面的情况下必须要用到汇编
	1. 需要高度优化的代码 , 例如编写编译器时
	2. 需要低层次地使用 C 语言中没有直接可用的特性的情况下
	3. 在引导代码的部分、设备驱动程序或执行操作系统开发时
	4. 在调试 C 程序时能够读取分解的代码是很有用的,特别是理解汇编指令和 C 语句之间的映射


  • 汇编怎么用
可以参考 
	1.ARM 编译器工具链汇编器参考手册(ARM Compiler Toolchain Assembler Reference )
	2.ARM 架构参考手册(ARM Architecture Reference Manual)。

你可能感兴趣的:(处理器架构,架构,arm,arm开发)