当前位置: 首页 > 工具软件 > EMT > 使用案例 >

系统指令集x86,x64,x86-64,amd64,IA-32e,EMT64,IA-64,arm64的区别

丁淇
2023-12-01

在软件包的选择上常常会遇到一些容易让人产生混淆的指令集名称,下面对这些名称做一点解释:

1)x64是对原有32-bit x86指令集的64位扩展的一个总称,包括:

AMD公司的x86-64(x86-64后来更名为AMD64)

Intel公司的 IA-32e(后来又称为EMT64)

AMD64和EMT64在绝大多数情况是兼容的,大多数代码可以同时在两种指令集上正常运行。

2)Intel还有一种64位指令集IA-64,这个是基于Explicitly Parallel Instruction Computing (EPIC)的 ,是独立的,与x86,x64没有关系

3)ARM64,这个是Advanced RISC Machines (ARM)公司开发的64位指令集。

 

在软件安装包的命名上 x86-64,x64, amd64基本可以认为是等价的。 arm64这个也比较常见。

下面是Go语言在unix上判断系统指令集的一段C代码,在执行uname命令后,通过字段machine里包含字符串来判断指令集,

  1. 含有x86_64或者amd64的判定为amd64
  2. 不符合条件1,但包含86的判断为386
  3. 包含arm的,判定为arm
  4. 否则为未知指令集,报错
                if(uname(&u) < 0)
                        fatal("uname: %s", strerror(errno));
                if(contains(u.machine, "x86_64") || contains(u.machine, "amd64"))
                        gohostarch = "amd64";
                else if(hassuffix(u.machine, "86"))
                        gohostarch = "386";
                else if(contains(u.machine, "arm"))
                        gohostarch = "arm";
                else
                        fatal("unknown architecture: %s", u.machine);

 

参考文章:

《Introduction to x64 Assembly》

 类似资料: