关于AMD64和arm64、x86和x86_64的介绍
今天水一篇,算法相关的停更一篇
X86
X86架构是微处理器自行的计算机语言指令集,指的是一个Intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令的集合。大家通常称呼它为32位指令集,是因为它从386就开始被这样称呼的,一直沿用至今,是一种cisc指令集,Intel以及amd早期的cpu都支持这种指令集,Intel官方文档里称之为“IA-32”。
1978年6月8日,Intel发布了新款16位微处理器8086,开启了一个新时代。在接下来的40年的发展中,x86家族不断壮大,期间还限制了很多竞争对手的发展,让不少的处理器厂商将其架构技术成为历史名字,比如苹果的PowerPC。
x86_64
指的是x86开始迈向64位,当时有两个方向:1、兼容x86;2、完全重新设计,不兼容x86。
这时候AMD抢跑了,率先制造了商用的兼容x86的CPU,AMD称为AMD64,获得了64位PC的第一桶金,得到了用户的认可。
Intel刚开始设计了一套不兼容x86的全新指令集,但是后来因为是全新的CPU,没有编译器,也不支持windows,后来开始了支持AMD64的指令集,但是换了个名字,叫x86_64,表示是x86指令集的64位扩展,大概是不愿因承认这玩意是AMD设计出来的。
实际上x86_64、x64、AMD64基本上是同一个东西,现在用的intel/amd的桌面级CPU基本上都是x86_64,与之相对的arm、ppc等都不是x86_64。
x86_64和x86的主要区别就是32位和64位的问题,x86中有8个32位通用寄存器,eax、ebx、ecx、edx、ebp、esp、esi、edi。x86_64把这8个通用寄存器扩展成了64位的,并且增加了8个寄存器并且也支持更大的内存。
AMD64/x86-64
x86-64是1999年由AMD设计,AMD首次公开64位集以扩充给IA-32,称为x86-64(后来改名为AMD64)。AMD64架构在IA-32上新增了64位寄存器,并兼容早期的16位和32位软件,因此许多操作系统以及产品,尤其是在Intel开发Intel64之前就引入x86-64支持的,使用AMD64同时指代AMD64和Intel64。Intel64是后续支持了AMD64,不过不愿意叫AMD64,改了名字叫x86_64。
ARM,AMD,x86,aarch64
AMD(中文名:超威半导体),除了英特尔以外最大的x86架构微处理供应商,也是除了英伟达之外仅有的独立图形处理供应商。
x86泛指一系列由Intel公司开发的处理器架构,最早为1978年面世的Intel8086版本的CPU。
ARM(Advanced RISC Machine或Acorn RISC Machine)也是一个架构,非常适合用于移动通信这种低成本高性能低功耗的领域。
AArch64是ARMv8的一种执行状态。为了更广泛地向企业领域推进,需要引入64位架构,同时也需要在ARMv8架构中引入新的AArch64执行状态。它不是一个单纯的32位ARM架构扩展,而是ARMv8的全新架构,完全使用全新的a64指令集,这些都是源自于对现在架构设计的深入研究。更重要的是,AArch64作为一个分离出来的执行状态,意味着一些未来的处理器可能不支持旧的AArch32执行状态。这种设计会使得许多有益的实现得到权衡,如在默认的情况下,使用一个较大的64K的页面,可以使得纯净的64位的ARM服务器不受遗留代码的影响,立即进行这种划分是很重要的,因为可能在未来几年内将出现支持64位的服务器系统,没有必要在新的64位架构中去实现一个完整的32位流水线,这将会提高未来ARM服务器系统的能效。
ARMV8-A将64位架构支持引入ARM架构中,其中包括:
64位通用寄存器、SP(堆栈指针)和PC(程序计数器)
64位数据处理和扩展的虚拟寻址
两种主要执行状态:
AArch64 64位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持
AArch32 32位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持
这些执行状态支持三个主要指令集:
A32(或者ARM32):32位固定长度指令集,通过不同架构变体增强部分32位架构执行环境现在称为AArch32。
T32(Thumb):以16位固定长度指令集的形式引入,随后在引入Thumb-2技术时增强为16位和32位混合长度指令集,部分32位架构执行环境现在称为AArch32。
A64:提供了与ARM和Thumb指令集类似功能的32位固定长度指令集。随ARMv8-A一起引入,它是一种AArch64指令集。
ARM ISA不断改进,以满足前沿应用程序开发人员日益增长的要求,同时保留了必要的向后兼容性,以保护软件开发投资。在ARMv8-A中,对A32和T32进行了一些增补,以保持与A64指令集一致。