You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

47 KiB

翻译前先阅读整体规则的 README 哟~

目录

这里是目录,要有锚点链接。

@翻译人:闪客sun

本卷是讲述 Intel 64 和 IA-32 架构处理器体系结构和编程环境的一部分,其他卷分别是:

卷一描述了处理器的基本架构和编程环境;卷二描述了处理器的指令集和操作码(opcode)结构;卷三描述了处理器的操作系统支持环境,主要针对操作系统和 BIOS 的设计;卷四描述了处理器的 MSR 寄存器。

1.1 支持的处理器型号

本手册包含了最新的 Intel 64 和 IA-32 处理器,如下:

- Pentium® processorsP6 family processors
- Pentium® 4 processors
- Pentium® M processors
- Intel® Xeon® processors
- Pentium® D processors
- Pentium® processor Extreme Editions
- 64-bit Intel® Xeon® processors
- Intel® Core™ Duo processor
- Intel® Core™ Solo processor
- Dual-Core Intel® Xeon® processor LV
- Intel® Core™2 Duo processor
- Intel® Core™2 Quad processor Q6000 series
- Intel® Xeon® processor 3000, 3200 series
- Intel® Xeon® processor 5000 series
- Intel® Xeon® processor 5100, 5300 series
- Intel® Core™2 Extreme processor X7000 and X6800 series
- Intel® Core™2 Extreme processor QX6000 series
- Intel® Xeon® processor 7100 series1-2Vol. 1ABOUT THIS MANUAL
- Intel® Pentium® Dual-Core processor
- Intel® Xeon® processor 7200, 7300 series
- Intel® Xeon® processor 5200, 5400, 7400 series
- Intel® Core™2 Extreme processor QX9000 and X9000 series
- Intel® Core™2 Quad processor Q9000 series
- Intel® Core™2 Duo processor E8000, T9000 series
- Intel® Atom™ processor family
- Intel® Atom™ processors 200, 300, D400, D500, D2000, N200, N400, N2000, E2000, Z500, Z600, Z2000, C1000 series are built from 45 nm and 32 nm processes
- Intel® Core™ i7 processor
- Intel® Core™ i5 processor
- Intel® Xeon® processor E7-8800/4800/2800 product families 
- Intel® Core™ i7-3930K processor
- 2nd generation Intel® Core™ i7-2xxx, Intel® Core™ i5-2xxx, Intel® Core™ i3-2xxx processor series
- Intel® Xeon® processor E3-1200 product family
- Intel® Xeon® processor E5-2400/1400 product family
- Intel® Xeon® processor E5-4600/2600/1600 product family
- 3rd generation Intel® Core™ processors
- Intel® Xeon® processor E3-1200 v2 product family
- Intel® Xeon® processor E5-2400/1400 v2 product families
- Intel® Xeon® processor E5-4600/2600/1600 v2 product families
- Intel® Xeon® processor E7-8800/4800/2800 v2 product families
- 4th generation Intel® Core™ processors
- The Intel® Core™ M processor family 
- Intel® Core™ i7-59xx Processor Extreme Edition
- Intel® Core™ i7-49xx Processor Extreme Edition
- Intel® Xeon® processor E3-1200 v3 product family
- Intel® Xeon® processor E5-2600/1600 v3 product families
- 5th generation Intel® Core™ processors
- Intel® Xeon® processor D-1500 product family
- Intel® Xeon® processor E5 v4 family
- Intel® Atom™ processor X7-Z8000 and X5-Z8000 series
- Intel® Atom™ processor Z3400 series
- Intel® Atom™ processor Z3500 series
- 6th generation Intel® Core™ processors
- Intel® Xeon® processor E3-1500m v5 product family
- 7th generation Intel® Core™ processors
- Intel® Xeon Phi™ Processor 3200, 5200, 7200 Series 
- Intel® Xeon® Processor Scalable Family 
- 8th generation Intel® Core™ processors
- Intel® Xeon Phi™ Processor 7215, 7285, 7295 Series
- Intel® Xeon® E processors
- 9th generation Intel® Core™ processors
- 2nd generation Intel® Xeon® Processor Scalable Family Vol. 11-3ABOUT THIS MANUAL
- 10th generation Intel® Core™ processors
- 11th generation Intel® Core™ processors
- 3rd generation Intel® Xeon® Processor Scalable Family

1.2 概览

@翻译人:xushunke

此手册的概述内容如下:
第一章 - 关于此手册。 给出全五册《Intel® 64 和 IA-32 架构软件开发者手册》的简要描述。同时介绍了在这几卷中会出现的标记习惯,关联的 Intel® 手册以及来自开发者们和硬件设计者们的关联文章。
第二章 - Intel® 64 和 IA-32 架构。 介绍 Intel 64 和 IA-32 架构以及基于此架构的 Intel 处理器家族。同时列出这些处理器的公共特性以及给出 Intel 64 和 IA-32 架构的简要历史介绍。
第三章 - 基本执行环境。 介绍内存组织模型以及介绍被应用所使用的寄存器集合。
第四章 - 数据类型。 描述被处理器所识别的数据模型和关联模型;提供关于实数与浮点格式和浮点异常的概述。
第五章 - 指令集汇总。 列出所有 Intel 64 和 IA-32 指令,根据技术类别分组。
第六章 - 过程调用,中断与异常。 描述过程调用栈的原理以及进行过程调用,产生中断和抛出异常的机制。
第七章 - 使用通用指令编程。 描述基本的加载和写入,程序控制,算数以及作用于基础数据类型的字符串指令和面向通用目的的段寄存器;同时描述了在保护模式可调用的系统指令。
第八章 - 使用 x87 FPU 编程。 描述了 x87 浮点单元(FPU),包括其中的浮点寄存器和数据类型;列出所有浮点指令集以及描述处理器产生浮点异常的条件。
第九章 - 使用 Intel® MMX 技术编程。 描述 Intel MMX 技术,其中包含 MMX 寄存器和数据类型;同时列出所有的 MMX 指令集。
第十章 - 使用 Intel® 流式 SIMD 扩展(Intel® SSR)编程。 描述 SSE 扩展,其中包含 XXM 寄存器,MXCSR 寄存器以及编码的单精度浮点数据类型;列出所有 SSE 指令集以及给出书写访问 SSE 扩展的代码的准则。
第十一章 - 使用 Intel® 流式 SIMD 二代扩展(Intel® SSR2)编程。 描述 SSE2 扩展,其中包含 XXM 寄存器和编码的双精度浮点数据类型;列出所有的 SSE2 指令集以及给出书写访问 SSE2 扩展的代码的准则。 本章同时也描述了 SSE 和 SSE2 指令可能产生的 SIMD 浮点异常。也提供了在操作系统中和应用代码中使用 SSE 和 SSE2 扩展的通常准则。
第十二章 - 使用 Intel® 流式 SIMD 三代扩展(Intel® SSR3),补充 Intel® 流式 SIMD 三代扩展(Intel® SSSR3),Intel® 流式 SIMD 四代扩展(Intel® SSR4)和 Intel® AES 新指令集(Intel® AES-NI)编程。 列出所有 SSE3,补充 SSE3,SSE4,AESNI 指令集以及书写访问这些扩展的代码的准则。
第十三章 - 使用 XSAVE 特性集来管理状态。 描述 XSAVE 特性集指令,介绍了软件是如何开启 XSAVE 特性集以及开启 XSAVE 后的会带来的特性。
第十四章 - 使用 AVX,FMA 和 AVX2 编程。 介绍 Intel® AVX 指令集,FMA 和 AVX2 扩展以及给出书写访问这些扩展的的代码的准则。
第十五章 - 使用 Intel® AVX-512 编程。 介绍 Intel® AVX-512 指令集扩展和给出书写访问这些扩展的代码的准则。
第十六章 - 使用 Intel 事务同步扩展编程。 描述通过销锁技术来提升多线程软件竞争线程锁的性能的指令集扩展。
第十七章 - Intel® 内存保护扩展。 描述 Intel® 内存保护扩展和给出书写访问这些扩展的代码的准则。
第十八章 - 控制流执行技术。 描述控制流执行技术(CET)以及给出访问这些扩展的的代码的准则。
第十九章 - 输入/输出。 描述处理接的 I/O 机制,其中包含 I/O 端口地址,I/O 指令和 I/O 保护机制。
第二十章 - 处理器识别与特性判别。 描述如何判别 CPU 类型和识别处理器中可用的特性的方法。
附录A - EFLAGS 交叉引用。 汇总描述了 IA-32 指令是如何影响 EFLAGS 里面的标记的。
附录B - EFLAGS 条件码。 汇总描述了 条件跳转(condition jump)转移(move) 以及 'byte set on condition code' 指令是如何使用 EFLAGS 寄存器中的条件码标记(OF,CF,ZF,SF和PF)的。
附录C - 浮点异常汇总。 汇总描述了异常是如何被 x87 浮点单元的浮点指令和 SSE/SSE2/SSE3 浮点指令所抛出的。
附录D - 书写 SIMD 浮点异常句柄的准则。 给出了书写由 SSE/SSE2/SSE3 浮点指令所产生的异常处理句柄的代码的准则。

1.3 标记习惯

@翻译人:xushunke

此手册中为数据结构格式,指令的符号,十六进制与二进制的数字做了特定标记。这些标记将在下方说明。

1.3.1 位和字节序

@翻译人:hdszylcd19

在内存中的数据结构图示中,较小的内存地址显示在图的底部;从下往上增加到顶部。Bit positions 从右到左编号。该 Bit 位的值等于 2 的 positions 次方(译者注:原文的表述有点儿晦涩,不好理解。其中,position 从 0 开始,说人话就是,二进制位上 1 所表示的数值,从右往左依次为:2 的 0 次方、2 的 1 次方...)。

Intel 和 IA-32 处理器都是采用“little endian(小端)”方式存储数据;这意味着 word 的字节序是从最低有效字节开始编号(译者注:关于“大端”和“小端”问题,请查看 大端(Big-Endian)和小端(Little-Endian))。请看图1-1。

1.3.2 保留位与软件兼容性

@翻译人:三分月色

在许多寄存器和内存布局描述中会有一些保留位。这些被标记为保留位的比特,是为了与未来的处理器兼容,尽管未来是未知的,软件仍将这些位视为对未来有重要影响。保留位的行为应该被认为是未定义(undefined)且不可预测的。

在处理保留位时,软件应遵循以下准则:

  • 当测试含保留位的寄存器的值时,不依赖保留位的状态。应在测试之前屏蔽掉保留位。
  • 存储到内存或寄存器时,不依赖于保留位的状态。
  • 不依赖保留位保持信息(retain information)的能力。
  • 加载寄存器时,始终使用文档中指示的值加载保留位(如果有的话),或者使用先前从同一寄存器读取的值重新加载保留位。
注意

避免任何软件依赖于 Inter 64和 IA-32 寄存器中的保留位状态。依赖寄存器的保留位,软件会依赖于处理器处理这些位的一种不确定的方式。依赖保留位的程序增加了与未来处理器不兼容的风险。

1.3.2.1 指令操作符(Instruction Operands)

(译者注:这里指令名称与操作数统称为 operands)

当指令用符号表示时,会使用 IA-32 汇编语言的一个子集。在这个子集中,指令具有以下格式:

标签:助记词(参数1),参数2, 参数3

其中:

  • 标签是一个唯一标识符,其后跟着一个冒号。
  • 助记词是一类具有相同功能的指令操作码的保留名称(译者注:即指令名称)。
  • 参数1、参数2、参数3 是可选的。根据操作码的不同,可能有 0~3 个参数。当他们出现的时候,采用数据项的字面意思或者标识符的形式。标识符要么是寄存器的保留名称,要么是假定赋值给程序中另一部分声明的数据项(可能在示例中没有显示)。
  • 当算术或逻辑指令中有两个操作数时,右操作数是源,左操作数是目的。

例如:

​ LOADREG: MOV EAX, SUBTOTAL

在这个例子中,LOADREG 是标签,MOV 是操作码的助记标识符,EAX 是目标操作数,SUBTOTAL 是源操作数。有些汇编语言可能会将源和目标操作数放在相反的顺序。

1.3.3 16 进制与 2 进制数字

16 进制数字以一串 16 进制的数字(译者注:含字母)后跟字母 H 表示,(例如,0F82EH)。十六进制数字可以是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F中的一个字符。

2 进制数字由 1 和 0 组成的字符串表示,有时后面跟着字符 B(例如,1010B)。只有在数字类型可能引起混淆的情况下才使用字符 B。

1.3.4 段寻址(Segmented Addressing)

处理器使用字节寻址。这意味着内存是作为一个字节序列被组织和访问的。无论访问一个或多个字节,字节地址都用于定位单个字节或多个字节内存地址。可寻址的内存范围称为地址空间(address space)。

处理器也支持段寻址。这是一种寻址方式,程序可以有许多独立的地址空间,称为(segments)。例如,一个程序可以将它的代码(指令)和堆栈保存在单独的段中。代码地址总是指向代码空间,堆栈地址总是指向堆栈空间。下面的表示法用于指定段内的字节地址:

​ 段寄存器:字节地址

例如,下面的段地址标识 DS 寄存器所指向的段中地址 FF79H 处的字节:

​ DS:FF79H

下面的段地址标识代码段中的指令地址。CS 寄存器指向代码段,EIP 寄存器包含指令的地址。

​ CS:EIP

1.3.5 用于 CPUID、CR 和 MSR 值的新语法

通过使用 CPUID 指令、检查控制寄存器位和读取特定于模型的寄存器来获取特征标志、状态和系统信息。我们正在研究一种新的语法来表示这些信息。见图1 - 2。

1.3.6 异常

异常通常是指令出错时发生的事件。例如,尝试除以 0 会产生异常。然而,在其他条件下也会出现一些例外情况,例如断点(breakpoints)。某些类型的异常会提供错误码。错误码提供关于错误的附加信息。下面是用来显示异常和错误码的符号示例:

#PF(错误码)

一个错误码定义了一种错误类型,上例是一个页面错误异常(page-fault exception)。在某些情况下,可能无法给到一个准确的错误码。在这种情况下,错误码为零,如下图所示为通用保护异常:

#GP(0)

第二章 Intel 64 and IA-32 Architectures

2.1 INTEL® 64 与 IA-32 架构的简要历史

以下章节提供了从 IA-32 到 Intel 64 架构的主要技术演进的摘要:从 Intel 8086 处理器开始到最新的 Intel®Core®2Duo,Core 2 Quad 和 Intel Xeon 处理器 5300 和 7300 系列。1978 年以前发布的处理器创建的对象代码仍然在 Inter 64 和 IA-32 架构系列中的最新处理器上运行着。

2.1.1 16 位处理器与段(1978)

在 IA-32 体系结构家族之前,有 16 位处理器 8086 和 8088。8086 有 16 位寄存器和 16 位外部数据总线,20 位寻址提供 1-MByte 地址空间。8088 与 8086 相似,但它有一个 8 位的外部数据总线。

8086/8088 向 IA-32 架构引入了段(segmentation)。通过分段, 16 位段寄存器可以指向高达 64 KB 的内存段。同时使用四个段寄存器,8086/8088 处理器能够不在段之间切换的情况下寻址达 256 KB。使用段寄存器和额外的 16 位指针可以形成的 20 位地址提供 1 MB 的总寻址范围。

2.1.2 Intel® 286 处理器(1982)

Intel 286 处理器向 IA-32 架构中引入了保护模式。保护模式使用段寄存器的内容作为选择器(selector)或指针指向描述符表(descriptor table)。描述符(Descriptor)提供 24 位基址,物理内存可达 16 MB,支持基于段交换的虚拟内存管理,以及一些保护机制。这些机制包括:

  • 段限制检查
  • 只读和只执行段选项
  • 四种特权级

2.1.3 Intel 386 处理器(1985)

Intel 386 处理器是 IA-32 体系结构家族中的第一个 32 位处理器。它引入了 32 位寄存器用于保存操作数和寻址。每个 32 位 Intel 386 寄存器的低地址保留了早期 16 位寄存器的内容,允许向后兼容。 386 处理器还提供虚拟化 8086 模式,使得在执行 8086/8088 处理器创建的程序时效率更高。

此外,Intel 386 处理器支持以下功能:

  • 32 位地址总线,支持多达 4 GB 物理内存
  • 段内存模型和一个平面(flat)内存模型
  • 分页,使用固定的 4 KB 页面大小为虚拟内存管理提供了一种方法
  • 支持并行级

2.1.4 Intel 486 处理器(1989)

Intel 486 处理器通过将 Intel 386 处理器的指令解码(decode)和执行(execution)扩展到五个流水线步骤,增加了并行执行能力。在不同的执行阶段,每个阶段与其他阶段并行操作,最多可并行执行 5 条指令。

此外,处理器还增加了:

  • 一个 8 KB 芯片一级缓存,增加了在每个时钟上执行指令的数量
  • 集成 x87 FPU
  • 节能和系统管理能力

2.1.5 The Intel® Pentium® 处理器 (1993)

Intel Pentium processor 的引入增加了第二个执行管道(execution pipeline),以实现超量性能(两个管道,称为 u 和 v,一起可以在每个时钟上执行两条指令)。芯片上的一级缓存增加了一倍,其中 8 KB 用于代码,另外 8 KB 用于数据。除了 Intel 486 处理器使用的透写缓存(write-through cache)外,数据缓存使用 MESI 协议来支持更有效的回写缓存(write-back cache)。为了提高循环结构的性能,增加了带有芯片上分支表的分支预测。

此外,处理器还增加了:

  • 扩展使虚拟 8086 模式更高效,并允许 4MB 和 4KB 页面大小
  • 128 和 256 位的内部数据路径提速到内部数据传输
  • 突破性的外部数据总线增加到 64 位
  • 支持多处理器系统的 APIC
  • 双处理器模式,支持无胶(glueless)双处理器系统

奔腾系列后续引入了 Intel MMX 技术(带 MMX 技术的奔腾处理器)。INTEL MMX 技术使用单指令,多数据(SIMD)执行模型来并行执行 64 位寄存器中的包装(packed)整数数据。

参见 2.2.7 节, “SIMD 指令”。(Todo link)

2.1.6 P6 系列处理器(1995-1999)

P6 系列处理器基于超标量微架构,该架构开创了新的性能标准;另请参阅第 2.2.1 节“P6 系列微架构”。P6 系列微架构的设计目标之一,就是在使用相同的 0.6 微米、四层金属 BICMOS 制造工艺的情况下,显著超越奔腾处理器的性能。这个系列的成员包括:

  • Intel Pentium Pro 处理器是三向超标量处理器。使用并行处理技术,处理器平均能够在每个时钟周期中解码、分派和完成三个指令的执行。奔腾 Pro 在一个超标量实现中引入了动态执行(微数据流分析、乱序执行、高级分支预测和预测执行)。处理器通过缓存得到了进一步的增强。它拥有两个与奔腾处理器相同的片内集成的 8 KB 一级高速缓存,并且在与处理器相同的封装中具有额外的256KB 二级高速缓存。

  • Intel Pentium II 处理器为 P6 系列处理器添加了 Intel MMX 技术,并提供了新的封装和多项硬件增强功能。处理器核心封装在单边接触盒(SECC)中。一级数据和指令高速缓存分别扩大到 16 KB,并且支持 256 KB、512 KB 和 1 MB 大小的二级高速缓存。半频后端总线将二级高速缓存连接到处理器。支持多种低功耗状态,如 AutoHALT、STOP-GRANT、休眠和深度休眠,以在空闲时减少一些功耗。

  • Pentium II Xeon 处理器结合了前几代 Intel 处理器的卓越特性。包括:4 路、8 路(以及更高)可伸缩性,以及在全频率后端总线上运行的 2 MB 二级高速缓存。

  • Intel Celeron 处理器系列专注于高性价比的 PC 细分市场。它的引入提供了集成的 128 KB 二级高速缓存和一种塑胶针状矩阵封装(P.P.G.A.)外形尺寸,以降低系统设计成本。

  • Intel Pentium III 处理器将单一指令多数据流扩展(SSE)引入 IA-32 架构。此 SSE 扩展通过提供新的 128 位寄存器集以及对压缩单精度浮点值执行 SIMD 操作的能力,扩展了 Intel MMX 技术引入的 SIMD 执行模型。参阅第 2.2.7 节,“SIMD说明”。

  • Pentium III Xeon 处理器通过增强全速、片上的高级传输缓存扩展了IA-32 处理器的性能级别。

2.1.7 The Intel® Pentium® 4 系列处理器(2000-2006)

Intel Pentium 4 系列处理器是基于 Intel NetBrust 微架构;参阅第 2.2.2 节,“Intel NetBrust 微架构”。

Intel Pentium 4 处理器推出了 Streaming SIMD Extensions 2 (SSE2);参阅第 2.2.7 节,“SIMD Instructions.”。Intel Pentium 4 处理器的主频为 3.40GHz,支持超线程技术(Hyper-Threading Technology),引入了 Streaming SIMD Extensions 3 (SSE3);参阅第 2.2.7节,“SIMD说明”。

Intel 64 架构是在支持超线程技术的 Intel Pentium 4 处理器至尊版和 Intel Pentium 4 处理器 6xx 和 5xx 系列中引入的。

Intel® 虚拟化技术 (Intel® VT) 在 Intel Pentium 4 处理器 672 和 662 中引入。

2.1.8 Intel® Xeon® 处理器(2001-2007)

Intel Xeon 处理器(除双核 Intel Xeon 处理器 LV、Intel Xeon 处理器 5100 系列外)均基于 Intel NetBurst 微架构;参阅第 2.2.2 节,“Intel NetBurst®微架构”。作为一个系列,这组 IA-32 处理器(最近的是 Intel 64 位处理器)被设计用于多处理器服务器系统和高性能工作站。

Intel Xeon 处理器 MP 引入了对 Intel 超线程技术(Intel® Hyper-Threading Technology)的支持;参阅第 2.2.8 节,“Intel® Hyper-Threading Technology”。

64 位的 Intel Xeon 处理器 3.60 GHz 主频版本(带有一个 800 MHz 的系统总线)引入了 Intel 64 架构。双核 Intel Xeon 处理器采用双核技术。Intel Xeon 处理器 70xx 系列包含Intel 虚拟化技术。

Intel Xeon 处理器 5100 系列引入了高能效、高性能的 Intel Core 微架构。该处理器基于 Intel 64 架构,包括Intel 虚拟化技术和双核技术。Intel Xeon 处理器 3000 系列也基于 Intel Core 微架构。Intel Xeon 处理器 5300 系列在物理封装中引入了四个处理器内核,它们也基于 Intel Core 微架构。

2.1.9 Intel® Pentium® M 处理器(2003-2006)

Intel Pentium M 系列处理器是一种高性能、低功耗的移动处理器系列,在前几代 IA-32 Intel 移动处理器的基础上增强了微架构。该系列旨在延长电池寿命并与支持新使用模式的平台创新无缝集成(如扩展移动性、超薄的外形和集成无线网络)。

其对于微架构的增强包括:

  • 支持动态执行的 Inte 架构
  • 高性能、低功耗的内核,采用 Intel 先进的铜互连工艺技术制造
  • 片上集成的 32 KB 指令一级高速缓存和 32 KB 回写数据高速缓存
  • 片上集成的二级高速缓存(最高 2 MB),采用高级传输缓存架构
  • 高级分支预测和数据预获取逻辑
  • 支持 MMX 技术、SIMD 流指令和 SSE2 指令集
  • 400 或 533 MHz 源同步处理器系统总线
  • 增强型 Intel SpeedStep® 技术的高级电源管理

2.1.10 Intel® Pentium® 处理器至尊版(2005)

Intel Pentium® 处理器至尊版引入了双核技术。该技术提供先进的硬件多线程支持。该处理器基于 Intel NetBurst 微架构,支持 SSE、SSE2、SSE3、超线程技术和 Intel 64 架构。

另请参阅:

  • 第 2.2.2 节,“Intel NetBurst® 微架构”
  • 第 2.2.3 节,“Intel® Core™ 微架构”
  • 第 2.2.7 节,“SIMD 指令集”
  • 第 2.2.8 节,“Intel® 超线程技术”
  • 第 2.2.9 节,“多核技术”
  • 第 2.2.10 节,“Intel® 64 架构”

2.1.11 Intel® Core™ 双核处理器和 Intel® Core™ 单核处理器(2006-2007)

Intel Core 双核处理器采用可延长电池寿命的低功耗设计,提供高能效的双核性能。该系列和 Intel Core 单核处理器在 Pentium M 处理器系列的基础上提供了微架构增强。

其对于微架构的增强包括:

  • Intel® 智能高速缓存,可实现两个处理器内核之间的高效数据共享
  • 优化解码和 SIMD 的执行
  • Intel® 动态电源协调和增强型 Intel® 深度睡眠,降低功耗
  • Intel® 高级发热管理器,具有数字热传感器接口
  • 支持功率优化的 667 MHz 总线

双核Intel Xeon处理器LV基于与Intel Core Duo处理器相同的微架构,并支持 IA-32 架构。

2.1.12 Intel® Xeon® 处理器 5100、5300 系列和 Intel® Core™2 处理器系列(2006)

Intel Xeon 处理器 3000、3200、5100、5300 和 7300 系列、Intel Pentium 双核、Intel Core 2 至尊、Intel Core 2 四核处理器和 Intel Core 2 双核处理器系列支持 Intel 64 架构;它们基于 65 nm 工艺技术构建的高性能、高能效 Intel® Core 微架构。Intel Core 微架构包括以下创新功能:

  • Intel® 广域动态执行,提高性能和执行吞吐量
  • Intel® 智能电源功能可降低功耗
  • Intel® 高级智能高速缓存,可实现两个处理器内核之间的高效数据共享
  • Intel® 智能内存访问可增加数据带宽并隐藏内存访问延迟
  • Intel® 高级数字媒体增强技术(Advanced Digital Media Boost),使用多代 SIMD 流扩展提高应用程序性能

Intel Xeon 处理器 5300 系列、Intel Core 2 至尊处理器 QX6800 系列和 Intel Core 2 四核处理器支持 Intel 四核技术。

2.1.13 Intel® Xeon® 处理器 5200、5400、7400 系列和 Intel® Core™2 处理器系列(2007)

Intel Xeon 处理器 5200、5400 和 7400 系列、Intel Core 2 四核处理器 Q9000 系列、Intel Core 2 双核处理器 E8000 系列支持 Intel 64 架构;它们基于采用 45 nm 工艺技术的增强型 Intel® Core 微架构。增强型 Intel Core 微架构提供以下改进功能:

  • 16 位除法器、速度更快的操作系统原语进一步提高了 Intel® 广域动态执行的性能
  • 改进了 Intel® 高级智能高速缓存,将二级高速缓存提高了 50%,路组关联性提高了 50%
  • 128 位洗牌器引擎显著提高了 Intel® 高级数字媒体增强技术(Advanced Digital Media Boost)和 SSE4 的性能

Intel Xeon 处理器 5400 系列和 Intel Core 2 四核处理器 Q9000 系列支持 Intel 四核技术。Intel Xeon 处理器 7400 系列提供多达 6 个处理器内核和高达 16 MB 的三级高速缓存。

2.1.14 Intel® Atom™ 处理器系列(2008)

第一代 Intel® Atom™ 处理器基于 45 nm 工艺技术构建。它们基于一种新的微架构———— Intel® Atom™ 微架构,该架构针对超低功耗设备进行了优化。Intel® Atom™ 微架构具有两条有序执行流水线,可将功耗降至最低,延长电池续航时间,并实现超小型化。最初的 Intel Atom 处理器系列和后续几代产品(包括 Intel Atom 处理器 D2000、N2000、E2000、Z2000 和 C1000 系列)提供以下功能:

  • 增强型 Intel® SpeedStep® 技术
  • Intel® 超线程技术
  • 采用动态调整缓存大小的深度掉电技术
  • 支持指令集扩展,最高可达并包括补充 流式 SIMD 扩展3(SSSE3)
  • 支持 Intel® 虚拟化技术
  • 支持 Intel® 64 架构(不包括 Intel 凌动处理器 Z5xx 系列)

2.1.15 基于 Silvermont 微架构的 Intel® Atom™ 处理器系列(2013)

Intel Atom 处理器 C2xxx、E3xxx、S1xxx 系列均基于 Silvermont 微架构。基于 Silvermont 的处理器微架构支持 SSE4.2、AESNI 和 PCLMULQDQ(包括 SSE4.2、AESNI 和 PCLMULQDQ)以下的指令集扩展。

2.1.16 Intel® Core™ i7 处理器系列(2008)

Intel Core i7 处理器 900 系列支持 Intel 64 架构;它们基于代号为 Nehalem 的 Intel® 微架构,采用 45 nm 工艺技术。Intel Core i7 处理器和 Intel Xeon 处理器 5500 系列包括以下创新功能:

  • Intel® 睿频加速技术将热余量转化为更高的性能
  • Intel® 超线程技术与 Quadcore 相结合,提供四核八线程
  • 专用电源控制单元,可降低活动和空闲功耗
  • 处理器上的集成内存控制器支持三通道 DDR3 内存
  • 8 MB(含)Intel® 智能高速缓存
  • Intel® 快速路径互连(QPI)提供到芯片组的点对点链路
  • 支持 SSE4.2 和 SSE4.1 指令集
  • 第二代 Intel 虚拟化技术

2.1.17 Intel® Xeon® 处理器 7500 系列(2010)

Intel Xeon 处理器 7500 和 6500 系列基于代号为 Nehalem 的 Intel 微架构,采用 45 nm 工艺技术。它们支持第 2.1.16 节中描述的相同功能,另外还支持以下创新功能:

  • 每个物理处理器包含最多八个内核
  • 最高支持 24 MB(含)Intel® 智能高速缓存
  • 提供带有 Intel® 7500 可扩展内存缓冲区的 Intel® 可扩展内存互连(Intel® SMI)通道,与系统内存相连
  • 高级RAS,支持软件可恢复性机器检查架构

2.1.18 2010 Intel® Core™ 处理器系列(2010)

2010 Intel Core 处理器系列涵盖 Intel Core i7、i5 和 i3 处理器。它们基于 Intel® 代号 Westmere 的微架构,采用 32 nm 工艺技术。创新功能包括:

  • 使用 Intel 超线程技术和 Intel 睿频加速技术提供智能性能
  • 增强型 Intel 智能高速缓存和集成内存控制器
  • 智能电源门
  • 重新分区平台,芯片内集成 45 nm 集成显卡
  • 最高支持 AESNI、PCLMULQDQ、SSE4.2 和 SSE4.1 的指令集

2.1.19 Intel® Xeon® 处理器 5600 系列(2010)

Intel Xeon 处理器 5600 系列基于 Intel 微架构,代号为 Westmere,采用 32 nm 工艺技术。它们支持第 2.1.16 节中描述的相同功能,另外还支持以下创新功能:

  • 每个物理处理器包最多六个内核
  • 高达 12 MB 增强型 Intel® 智能高速缓存
  • 支持 AESNI、PCLMULQDQ、SSE4.2 和 SSE4.1 指令集
  • 跨处理器和 I/O 的灵活 Intel 虚拟化技术

2.1.20 第二代 Intel® Core™ 处理器系列(2011)

第二代 Intel Core 处理器系列采用基于 Sandy 的 Intel Core i7、i5 和 i3 处理器桥接微架构。它们采用 32 nm 工艺技术制造,具有以下创新功能:

  • 用于 Intel Core i5 和 i7 处理器的 Intel 睿频加速技术
  • Intel 超线程技术
  • 增强型 Intel 智能高速缓存和集成内存控制器
  • 处理器图形和内置视觉功能,如 Intel® 快速同步视频、 Intel® Insider™ 等
  • 最高支持 AVX、AESNI、PCLMULQDQ、SSE4.2 和 SSE4.1 的指令集。

Intel Xeon 处理器 E3-1200 产品系列也基于 Sandy Bridge 微架构。 Intel Xeon 处理器 E5-2400/1400 产品系列基于 Sandy Bridge-EP 微架构。 Intel Xeon 处理器 E5-4600/2600/1600 产品系列基于 Sandy Bridge-EP 微架构,并支持多个插槽。

2.1.21 第三代 Intel® Core™ 处理器系列(2012)

第三代 Intel Core 处理器系列包括基于 Ivy Bridge 微架构的 Intel Core i7、i5 和 i3处理器。Intel Xeon 处理器 E7-8800/4800/2800 v2 产品系列和 Intel Xeon 处理器 E3-1200 v2 产品系列也是基于 Ivy Bridge 微架构。

Intel Xeon 处理器 E5-2400/1400 v2 产品系列基于 Ivy Bridge-EP 微架构。

Intel Xeon 处理器 E5-4600/2600/1600 v2 产品系列基于 Ivy Bridge-EP 微架构实现并提供对多个套接字的支持。

2.1.22 第四代 Intel® Core™ 处理器系列(2013)

第四代 Intel Core 处理器系列采用基于 Haswell 的 Intel Core i7、i5 和 i3 处理器微架构。Intel Xeon 处理器 E3-1200 v3 产品系列也基于 Haswell 微架构。

第三章 Basic Execution Environment

3.1 操作模式

IA-32 架构支持三种基本的运行模式:保护模式、实地址模式和系统管理模式。操作模式决定了哪些指令和架构特性是可用的。

  • 保护模式(Protected mode)--该模式是处理器的本机状态(native state)。保护模式是指能够在受保护的多任务环境中直接执行实地址模式 8086 软件。这个特性被称为虚拟-8086 模式,尽管它实际上不是处理器模式。虚拟-8086 模式实际上是保护模式的一个属性,可以被任何任务开启。

  • 实地址模式(Real-address mode)-- 该模式实现了 Intel 8086 处理器的编程环境,具有扩展功能(例如切换到保护模式或系统管理模式的能力)。处理器在通电或复位后被置于实地址模式。

  • 系统管理模式 (System management mode,SMM)--该模式为操作系统或执行程序提供透明的机制,实现平台相关特有的功能,如电源管理、系统安全等。当外部 SMM 中断引脚(SMI#--SMM interrupt)被激活或从高级可编程中断控制器(APIC)接收到 SMI 时,处理器进入 SMM。

在 SMM 中,当保存当前运行的程序或任务的基本上下文时,处理器切换到一个单独的地址空间。然后可以透明地执行特定于 SMM 的代码。当从 SMM 返回时,处理器被放置回系统管理中断之前的状态。SMM 是在 Intel386 SL 和 Intel486 SL 处理器中引入的,并成为奔腾处理器家族的标准 IA-32 特性。

3.1.1 Intel® 64 架构

Intel 64 架构增加了 IA-32E 模式。IA-32E 模式有两个子模式。他们是:

  • 兼容模式(IA-32E 模式的子模式) - 兼容模式允许大多数传统的 16 位和 32 位应用程序在无需重新编译情况下运行在 64 位操作系统。兼容性子模式在 IA-32 架构中简称为兼容模式。兼容模式的执行环境与 3.2 节描述相同。兼容模式还支持 64 位和保护模式支持的所有特权级。以虚拟 8086 模式或使用硬件任务管理的遗留应用程序不能在此模式下工作。

    兼容模式是操作系统在代码段的基础上启用的。这意味着单个 64 位操作系统可以支持以 64 位的应用程序以 64 位模式运行,并支持以兼容模式运行的传统的 32 位应用程序(未重新编译为 64 位)。

    兼容性模式类似于 32 位保护模式。应用程序只访问线性地址空间的前 4 G。兼容模式使用 16 位和 32 位地址和操作数大小。与保护模式一样,这种模式允许应用程序使用 PAE(Physical Address Extensions)访问大于 4 G 的物理内存。

  • 64 位模式(IA 32e 模式的子模式)- 这种模式使 64 位操作系统能够运行访问 64 位地址空间的应用。64 位子模式在 IA-32 架构中简称为 64 位模式。

    64 位模式将通用寄存器和 SIMD 扩展寄存器的数量从 8 升到了 16。并且通用寄存器扩展到 64 位。该模式还引入了一个新的操作码前缀(rex)以访问寄存器的扩展位。有关详细说明,请参见第 3.2.1 节。

    操作系统以代码段为基础启用 64 位模式。其默认地址大小为 64 位,其默认操作数大小为 32 位。可以使用 REX 操作码前缀和操作数大小覆盖前缀在逐条指令的基础上覆盖默认操作数大小。

    REX 前缀允许在 64 位模式下指定 64 位操作数。通过此机制,许多现有指令允许使用 64位寄存器和 64 位地址。

3.4 BASIC PROGRAM EXECUTION REGISTERS

3.4.2 段寄存器

@翻译人:墨

段寄存器控制(代码段寄存器,数据段寄存器,堆栈段寄存器,扩展段寄存器,标志段寄存器,全局段寄存器)16 位的段选择子。段选择子是一种特殊的指针,用来标识内存中的段。为了访问内存中特定的段,该段的段选择子必须存在于适当的段寄存器中。

在编写应用代码的时候,程序员通常用汇编指令和标识符创建段选择子。汇编器和其他工具通过这些汇编指令和标识符创建实际的段选择子的值。如果编写系统代码,程序员需要直接创建段选择子。可以参考 Intel® 64 and IA-32 软件架构开发手册卷三的第三章:保护模式下的内存管理。

如何使用段寄存器取决于操作系统或执行器使用的内存管理模型。在平坦模型(未进行分段)下,段寄存器加载指向重叠段的段选择子,每个段都从线性地址空间的0地址处开始(见图 3-6 )。这些重叠 的段构成了程序的线性地址空间。通常定义两个重叠段:一个用于代码,另一个用于数据和堆栈。 CS 段寄存器指向代码段,其他所有段寄存器指向数据和堆栈段。 图3-6

使用分段内存模型时,每个段寄存器通常加载不同的段选择子,以便每个段选择子指向线性地址空间内的不同段(见图 3-7 )。因此在任何时候,程序最多可以访问线性地址空间中的六个段。要访问一个没有被任何段寄存器指向的段,程序必须先加载一个段选择子用来访问段寄存器。 图3-7

每个段寄存器都与以下三种存储类型相关联:代码,数据或堆栈。比如,CS寄存器包含代码段的段选择子,存储正在执行的指令。处理器从代码段中获取指令,使用的逻辑地址由CS寄存器中的段选择子和 EIP 寄存器的内容组成。 EIP 寄存器包含了代码段中下一条被执行的指令的偏移量。 CS 寄存器不能由应用程序显式加载。而是通过改变程序控制的指令或内部处理器操作隐式加载(比如过程调用,中断处理或任务切换)。

DS , ES , FS 和 GS 寄存器指向四个数据段。四个数据段可以安全有效的的访问不同类型的数据结构。比如创建四个独立的数据段:第一个用于当前模块的数据结构,第二个用于从高级模块导出的数据,第三个用于动态创建的结构体,第四个用于和其他程序的共享数据。为了访问额外的数据段,应用程序必须根据需要将这些段的段选择子加载到 DS , ES , FS 和 GS 寄存器中。

SS 寄存器包含了堆栈段的段选择子,当前正在执行的程序,任务或处理程序的过程堆栈都存储在这里。所有的堆栈操作都使用 SS 寄存器来查找堆栈。不像 CS 寄存器, SS 寄存器可以被显式加载,这允许应用程序建立多个堆栈并在它们之间切换。

参考 3.3 ,"内存组织",了解段寄存器如何在实模式下使用。

CS , DS , SS 和 ES 这四个段寄存器与 Intel 8086 and Intel 286 处理器中的段寄存器相同,而 FS 和 GS 寄存器通过 Intel386™ 系列处理器引入到 IA-32 结构中的。

3.4.2.1 64位模式下的段寄存器

@翻译人:墨

在 64 位模式下:CS , DA , ES , SS 每个段基址被视为 0 ,而不管相关段描述符基址的值。这为代码,数据和堆栈创建了一个平坦地址空间。FS 和 GS 是例外。这两个段寄存器在计算线性地址时都可以作为附加基址寄存器(在本地数据和某些操作系统的数据结构中寻址)。

即使分段通常被禁用,段寄存器加载也可能会导致处理器执行段访问辅助。这些活动进行期间,处理器仍然可以对加载值进行大多数传统检查(即使这些检查不适用于64位模式)。需要这些检查是因为 在 64 位模式下加载的段寄存器可能会被兼容模式下运行的应用程序所使用。

在 64 位模式下禁用 CS , DA , ES , SS , FS 和 GS 的限制检查。

第四章 Data Types

4.1 FUNDAMENTAL DATA TYPES

4.1.1 Alignment of Words, Doublewords, Quadwords, and Double Quadwords

@翻译人:符宇舟Alex

4.2 NUMERIC DATA TYPES

4.2.1 Integers

4.2.1.1 Unsigned Integers

@翻译人:符宇舟Alex

4.2.1.2 Signed Integers

@翻译人:符宇舟Alex

4.3 POINTER DATA TYPES

@翻译人:Colinxu2020

指针是指向内存中一个位置的地址。

在非64位模式下,该架构定义了两种类型的指针:近指针和远指针。一个近指针是一个段内的32位(或16位)偏移(也称为有效地址)。

近指针用于平坦的内存模型中的所有内存引用,或者用于分段内存模型中的引用,其中被访问段的基址是隐含的。

远指针是一个逻辑地址,由一个16位段选择器和一个32位(或16位)偏移量组成。远指针用于分段内存模型中的内存引用,其中被访问段的身份必须明确指定。

带有32位偏移量的近指针和远指针如图4-4所示

图4-4

4.3.1 Pointer Data Types in 64-Bit Mode

在64位模式(IA-32e 模式的一个子模式)中,一个近指针是64位。这等同于一个有效的地址。

64位模式下的远指针可以是三种形式之一。

  • 16位段选择器,16位偏移,如果操作数是32位的话
  • 16位段选择器,32位偏移,如果操作数是32位的话
  • 如果操作数为64位,16位段选择器,64位偏移量

见图4-5

图4-5

4.4 BIT FIELD DATA TYPE

@翻译人:Hola39e

位域数据类型(见图4-6)是一个连续的比特序列。它可以从内存中任何字节的任何位开始,最多可以包含32位。

Figure 4-6 here

4.5 STRING DATA TYPES

@翻译人:Hola39e

字符串数据类型是比特、字节、字或双字的连续序列。一个比特串可以从任何字节的任何比特位置开始,并且可以包含最多$2^{32}-1$个比特。一个字节串可以包含字节、字或双字,并且长度范围可以包含从0到$2^{32}-1$个字节(4GB)。

4.6 PACKED SIMD DATA TYPES

@翻译人:Hola39e

Intel64和IA-32架构定义与操作一组64位和128位包装(Packed)数据类型,中文又称数据向量,用于单指令多数据流(SIMD)操作。这些打包数据类型的由基本的数据类型(打包对齐的字节、字、双字和四字组成),以及用于进行矢量运算(Packed)指令操作的整数,浮点数基本类型的数值说明。

4.6.1 64-Bit SIMD Packed Data Types

@翻译人:Hola39e

64位包装(Packed)SIMD数据结构是在Intel MXX指令集中加入到IA-32中去的。它们在MXX寄存器中被操作。基本的64位包装数据类型是打包对齐起来的字节、字以及双字(见图4-7)。当执行SIMD操作时,这些数据结构会被解释成 进行矢量运算(Packed)指令操作的字节、字、双字长度的整数值。

Figure 4-7 here

4.6.2 128-Bit Packed SIMD Data Types

@翻译人:Hola39e

128位包装(Packed)SIMD数据结构是在SSE扩展指令集中被引入到IA-32中去的,在SSE2,SSE3,SSSE3扩展指令集中被使用。它们主要在128位的XMM寄存器和内存中进行操作,基本的128位包装数据类型是打包对齐起来的字节、字、双字、四字组成的(见图4-8)。当对在XMM寄存器中保存的包装(Packed)数据类型执行SIMD操作时,这些数据类型会被解释进行矢量运算(Packed)指令操作或标量运算(Scalar)指令操作的单精度浮点数或双精度浮点数,或者进行矢量运算(Packed)的长度为字节、字、双字、四字的整数值。

Figure 4-8 here

第五章 Instruction Set Summary

第六章 Procedure Calls, Interrupts, and Exceptions

6.3 CALLING PROCEDURES USING CALL AND RET

6.3.1 Near CALL and RET Operation

@翻译人:si

6.3.2 Far CALL and RET Operation

@翻译人:si

6.4 INTERRUPTS AND EXCEPTIONS

6.4.1 Call and Return Operation for Interrupt or Exception Handling Procedures

@翻译人:si 6.4 使用CALL和RET指令调用程序 (CALLING PROCEDURES USING CALL AND RET)

注:procedures译为代码,program译为程序

  CALL 指令允许代码控制跳转到当前代码段(近调用 near call)和不同程序代码段(远调用 far call)。近调用通常在当前运行程序或任务中提供代码访问。远调用通常访问操作系统代码或不同任务中的代码。参见第三章的 ”CALL-Call Procedure“ 。在 Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2A的“Instruction Set Reference, A-L” 中有对CALL指令更深层次的描述。

  RET 指令也允许近或远的返回以匹配进或远版本的 CALL 指令。另外,RET 指令允许程序在返回时递增栈指针来释放栈上的参数。具体要在栈上释放多少字节决定于 RET 指令上的可选参数(n)。在 Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2B 的 ”Instruction Set Reference, M-U“ 中有对 RET 指令更详细的介绍。

6.4.1 Near CALL and RET Operation

  当执行近调用时,处理器会做以下这些事情(参见图 6-2 )

  1. 将 EIP 寄存器的当前值压到栈中。 如果影子栈(shadow stack)被启用而且置换值为非零,将 EIP 寄存器的当前值压入影子栈中。
  2. 在 EIP 寄存器中加载被调用代码的偏移量。
  3. 开始执行被调用的代码

当执行的近返回(near return)时,处理器会执行这些动作:

  1. 弹出栈顶的值(返回指令指针)到 EIP 寄存器中。 如果影子栈被启用,从影子栈弹出栈顶值(返回指令指针)如果与从栈中弹出的指令指针不同,处理器会报一个控制保护异常,错误码为NEAR-RET(#CP(NEAR-RET))。
  2. 如果 RET 指令有一个可选的 n 参数,按 n 操作数指定的字节数递增栈指针以从栈中释放参数 。
  3. 恢复调用代码的运行。

6.4.2 Far CALL and RET Operation

  当执行远调用时,处理器会执行这些动作(见图6-2):

  1. 将 CS 寄存器的当前值压入栈中。

    如果影子栈被启用:

    a. 临时内部保存 SPP 寄存器的当前值,将SPP与下一个8字节边界对齐。

    b. 将 CS 寄存器的当前值压入影子栈。

    c. 将 LIP(CS.base + EIP)的当前值压入影子栈。

    d. 将 SSP 寄存器内部保存值压入影子栈。

  2. 将 EIP 寄存器的当前值压入栈中。

  3. 加载包含调用代码的段的段选择子到 CS 寄存器中。

  4. 加载调用代码的偏移值到 EIP 寄存器中。

  5. 开始执行调用代码的运行。

当执行远返回时,处理器会做下面这些事情:

  1. 弹出栈顶值(返回指令指针)到 EIP 寄存器中。
  2. 弹出栈顶值(返回代码段的段选择子)到CS寄存器中。 如果启用了影子寄存器 a. 产生控制保护异常(#CP(FAR-RET/IRET))如果 SSP 没有对齐8字节。 b. 将影子栈在 SSP+8(LIP)地址的值 和SSP + 16(CS)的值与 从栈中弹出的 CS 和(CS.base + EIP)相比较。如果没有匹配,产生控制保护异常(#CP(FAR-RET/IRET)) c. 弹出栈顶值(返回代码的SSP)从影子栈到 SSP 寄存器中。
  3. 如果返回指令有可选参数n,按 n 操作数递增栈指针 n 个数量的字节以从栈上释放参数。
  4. 恢复调用代码的运行。

第七章 Programming With General-Purpose Instructions

第八章 ~ 第十八章

二期再译

第十九章 Input/Output

第二十章 Processor Identification and Feature Determination

附录 A ~ 附录 D

二期再译