Hardwarei386x86和x64的故事

Posted lijianming180

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hardwarei386x86和x64的故事相关的知识,希望对你有一定的参考价值。

(1)x86的由来

x86架构首度出现在1978年推出的Intel 8086中央处理器,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的。在8086之后,Intel又推出了包括80186、80286、80386以及80486。

在设计上,这些后续的处理器使用的指令集都是在8086的基础上添加新支持的指令进行改进的,因此可以说都是向下兼容(backward compatibility)的,即能在8086上运行的程序在80486上也一定能运行。

向下兼容(Downward Compatibility),又称作向后兼容(Backward Compatibility),指在一个程序或者类库更新到较新的版本后,用旧的版本程序创建的文档或系统仍能被正常操作或使用,或在旧版本的类库的基础上开发的程序仍能正常编译运行的情况。例如较高档的计算机或较高版本的软件平台可以运行较为低档计算机或早期的软件平台所开发的程序

由于都是以86结尾(不过8088也是x86),所以把这一系列的指令集,称之为x86指令集(架构)。准确的来讲,x86这一术语并不是指的某一个(具体CPU使用的)具体的指令集,而是在8086(的指令集)基础上发展而来的所有指令集的泛称

x86与CPU的位数无关,包括16位、32位、64位的CPU。

实际上,在80486以后Intel推出的绝大多数CPU都是x86的,包括Pentium 、Pentium Pro 、Pentium MMX ,Pentium 2 ,还有后面的Pentium 3、Pentium 4 、Pentium D 、Core 全系列,(x86系列的) Xeon。另外,使用x86架构的处理器制造商远非Intel一家,最著名的就是AMD,其他的还有VIA、Cyrix。

(2)x86-32(x86、i386、IA-32)

从1985年80386开始,intel通过对x86架构进行32位的扩展,实现了32位CPU,而之前的都是16位。Intel把支持32位的 x86指令集架构命名为ia-32(Intel Architecture 32bit)。实际上由于32位x86处理器的统治性,术语“x86”几乎等于IA-32,即32位的x86x86-32,例如 Windows 和 Linux发行版的32位版本命名都是x86(而不是x86-32或IA-32)。后来的“x86-64”名称也继续强化了这种约定方式。

这里还是要强调, x86是一系列架构的泛称,支持16位、32位和64位的指令都有。

(3)x86-64(x64、AMD64)

该来的还是会来,在1999年,AMD宣布了x86-64架构。其实现方式与之前的80386思路一致,继续对IA-32扩展,增加64位通用寄存器、证书预算单元和逻辑操作,支持64位虚地址,向前兼容ia-32。< 大专栏  【Hardware】i386、x86和x64的故事/p>

2003年第一款x86-64处理器发布,AMD Operon。同时AMD也将x86-64正式命名为AMD64。这下Intel彻底2B了,以前都是AMD小弟追随者Intel大哥的脚步,如今AMD先实现了64位民用桌面级CPU。

其实Intel也有其64位计划,在2004年的IDF上,Intel承认其64 位计划,命名为ia-32e,即ia-32 extension,之后又改成EM64T,Extended Memory 64 Technology,最终命名为Intel64。 实际上EM64T与AMD64几乎相同。早期EM64T不兼容AMD64的少量指令,但是由于AMD在64位技术中的领先地位,Intel2005年不得不宣布将完全兼容AMD64。

所以现在装的64位版本操作系统从没有说是面向Intel还是AMD的。不过在称谓上,大多数厂商还是使用x86-64x86_64x64,或者AMD64)来称呼此架构,从而保持中立。

2.关于32和64的说明

(1)操作系统

  • 32位的操作系统:32位的操作系统可以运行在32位 or 64位的CPU上。
  • 64位的操作系统:只有64位的 CPU 才能运行64位的操作系统,当然现在市面上几乎所有消费级CPU都已经是64位的了。

32位的操作系统只能支持最大4GB的内存。这意味着,如果你安装多于4GB的内存条,那么超过4GB的那部分并不会被操作系统所使用。

(2)应用程序

  • 32位的应用程序:32位的应用程序可以运行在32位 or 64位的操作系统上。
  • 64位的应用程序:64位的应用程序只能运行在64位的操作系统上。

3.参考

以上是关于Hardwarei386x86和x64的故事的主要内容,如果未能解决你的问题,请参考以下文章

使用来自 x64 注入器的 x86 dll 注入 x86 目标

实现 x86 到 x64 汇编代码切换

如何导入两个同名的 DLL(x86 和 x64)?

x86和x64之间的浮点算术的差异

LNK2019 错误:在 x64 机器上使用 x86 库 [重复]

Loadbitmap 在 x86 上编译和运行良好,但在编译为 x64 时无法正常工作