解释x86遗留指令

解释x86遗留指令,x86,intel,X86,Intel,我正在读一本关于计算机体系结构的书,以提高我对微处理器的理解,这时我遇到了一个作者不屑解释的绊脚石。这本书关注的是从最初的奔腾到现在的英特尔处理器。 作者从未解释过x86在处理器之间的实际含义。我发现这很难理解,因为在讨论原始奔腾时,作者说奔腾的缺点之一是它将超过30%的晶体管分配给x86遗留支持。因此,我认为他的意思是奔腾必须与为80386等老一代处理器编写的程序兼容。后来,在关于奔腾4的另一章中,他说10%的晶体管用于支持x86。我不明白的是他在说哪个x86。此外,我确信英特尔并没有为其发布

我正在读一本关于计算机体系结构的书,以提高我对微处理器的理解,这时我遇到了一个作者不屑解释的绊脚石。这本书关注的是从最初的奔腾到现在的英特尔处理器。 作者从未解释过x86在处理器之间的实际含义。我发现这很难理解,因为在讨论原始奔腾时,作者说奔腾的缺点之一是它将超过30%的晶体管分配给x86遗留支持。因此,我认为他的意思是奔腾必须与为80386等老一代处理器编写的程序兼容。后来,在关于奔腾4的另一章中,他说10%的晶体管用于支持x86。我不明白的是他在说哪个x86。此外,我确信英特尔并没有为其发布的每个新处理器实施不同的指令集。如果有的话,将为新的执行单元添加新指令。我想说的是,如果是这样,那么x86指令已经是新指令集的一个子集了。还是不是这样? 我想我很困惑。如果有人能解释一下x86支持这一点,以及为什么会有人想在10年后运行遗留软件,这会很有帮助?另外,不同的x86实现是否有不同的标签?因为当他们说x86遗留支持时,他们是指80386中的x86还是8086中的x86? 我们将珍视你的答复。 谢谢

为什么会有人想在10年后运行遗留软件

因为他们运行的是10年前编写的软件。或者更多,企业通常严重依赖超过20年或更长时间的软件。软件非常非常昂贵,它需要一个报酬很高的程序员。如果你不能卖出数百个许可证,那么很难分摊开发成本,而LOB软件却从来没有这样做过。硬件非常不同,一旦你有了(非常昂贵的)掩模和芯片工厂,你就可以以非常低的成本制造出数以百万计的芯片


保持新处理器设计与旧处理器兼容是您的机器中安装Intel或AMD处理器的一个非常重要的原因。英特尔试图摆脱这一局面的任何尝试都是彻底失败的。iAPX 432、80960和安腾就是很好的例子。

虽然x86 ISA是CISC ISA,但由于奔腾、英特尔处理器内部使用类似RISC的微操作。x86指令被解码为内部微操作

因此,据估计,奔腾使用了30%的晶体管来支持x86 ISA。由于x86 ISA和支持硬件保持相对稳定,到奔腾4时代,x86支持估计占晶体管数量的10%


Ars Technica的Jon Stokes谈到了x86 RISC解码成本。

当谈到80386及以上的x86处理器时,“x86遗留支持”指运行8086/80186/80286上的所有16位指令并模拟其所有内存寻址模式的能力:8086的20位实模式和80286的24位保护模式

除此之外,80386还引入了v86模式,当处理器继续在32位保护模式下运行时,该模式模拟实模式


这是迄今为止每个80386(及以上)支持的三种截然不同的模式——所有这些模式都支持16位代码,很少有人再运行这些代码了。

“为什么会有人想在(比如)10年后运行遗留软件?”因为他们在它还是新软件时就使用它,他们喜欢它,它从来没有为更新的平台发布过,他们想继续使用它吗?这有两个方面:无人使用(比如)的奇怪指令可以在微码中实现,这占用了芯片空间,但在运行不使用这些指令的代码时不会使CPU变慢。不过,x86遗留行李不仅仅是旧指令。更重要的是,所有指令的变长机器码编码都很难解码,并且常见指令的一些奇怪语义。(例如,
inc
和其他文件中的部分标志要求CPU分别重命名EFLAG的不同部分)。直到奔腾Pro(P6微体系结构)才将x86指令解码为UOP。奔腾(P5微体系结构)是一个双重问题(如那篇非常好的文章的第1页所述),具有复杂的规则,指令可以相互配对。Jon Stoke的文章还讨论了奔腾II/Pentium III(均基于P6,第3页),并表示他将在下一篇文章中讨论奔腾4(现已废弃的netburst微体系结构:完全不同)。论坛上的人们喜欢讨论“x86税”的影响(即必须解码x86指令,而不是像ISA一样的干净ARM)。有人认为这是一个固定的成本,不会随着CPU的大小而增加,现在可以忽略不计。其他人认为,它影响CPU的所有部分,而增加分支预测失误惩罚的较长管道长度是一个乘法因素,而不是一个加法“成本”。Sandybridge系列微体系结构的uop缓存被认为有助于减少预测失误的惩罚,因此Intel可能已经部分克服了这一点。