ARMv8-A架构基础之ARMv8-A指令集

A64指令集与现有的A32指令集相似。 指令本身仍然是32位宽,并且具有相似的语法。

指令集使用ARMv8-A体系结构中的通用命名约定,所以原始的32位指令集状态现在称作:

A32
当处于AArch32状态时,指令集在很大程度上与ARMv7-A兼容,虽然有些不同。 它还提供了一些新指令,这些指令和A64指令集中引入的一些特性相匹配。

T32
Thumb指令集首次在ARM7TDMI处理器中引入,最初只包含16位指令。 以一些性能为代价,16位指令提供了更小的程序。 ARMv7-A处理器(包括Cortex-A系列中的处理器)支持Thumb-2技术,该技术扩展了Thumb指令集以提供16位和32位指令的混合。 这使得性能与ARM相似,同时保留了较小的代码大小。由于其尺寸和性能优势,所有32位代码利用Thumb-2技术进行编译或汇编以的趋势越来越普遍。

按照命名约定,并反映64位操作,AArch64的指令集称为A64

所有A64指令的长度都是相同的,不同于T32—它是一个可变长度的指令集。 这使的管理和跟踪生成的代码序列更容易,特别是对动态代码生成器的影响。

在指令集之间切换

在单个应用程序中使用来自两个执行状态的代码是不可能的。 在ARMv8-A中A64 和A32/T32指令集之间没有像在A32和T32指令集之间有交互工作。 用A64 给ARMv8-A处理器编写的代码不能在ARMv7-ACortex®-A系列处理器上运行。 但是,为ARMv7-A处理器编写的代码可以在AArch32执行状态下的ARMv8-A处理器上运行。 下图总结了这一点。

ARMv8-A架构基础之ARMv8-A指令集_第1张图片

switching_instruction_sets.png

寻址

当处理器可以将64位值存储在单个寄存器中时,在程序中访问大量内存就变得简单多了。 在32位硬件核上执行的单个线程只能访问4GB的地址空间。 该可寻址空间的大部分被保留供操作系统内核,库代码,外围设备等使用。 因此,地址空间不足意味着程序在执行时可能需要将一些数据映射进或替换出内存。 有一个更大的地址空间—有64位指针,避免了这个问题。 这也使得内存映射文件等技术更具吸引力和更方便使用。 即使物理RAM可能不足以包含整个文件,文件内容也会映射到线程的内存映射中。



作者:赵国开
链接:https://www.jianshu.com/p/fc3e9da91f72
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

你可能感兴趣的:(【armV8】)