翻译前先阅读整体规则的 [README](https://github.com/sunym1993/flash-linux0.11-talk/blob/main/Intel%20%E6%89%8B%E5%86%8C%E4%B8%AD%E6%96%87%E7%89%88/README.md) 哟~ # 目录 这里是目录,要有锚点链接。 [@翻译人:闪客sun](https://github.com/sunym1993/flash-linux0.11-talk) 本卷是讲述 Intel 64 和 IA-32 架构处理器体系结构和编程环境的一部分,其他卷分别是: - [卷二:指令集参考](https://github.com/sunym1993/flash-linux0.11-talk/blob/main/Intel%20手册中文版/卷二:指令集参考.md) - [卷三:系统编程指南](https://github.com/sunym1993/flash-linux0.11-talk/blob/main/Intel%20手册中文版/卷三:系统编程指南.md) - [卷四:特殊模块寄存器(MSR)](https://github.com/sunym1993/flash-linux0.11-talk/blob/main/Intel%20手册中文版/卷四:特殊模块寄存器(MSR).md) 卷一描述了处理器的基本架构和编程环境;卷二描述了处理器的指令集和操作码(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)](https://juejin.cn/post/6930889701507203085/#comment))。请看图1-1。 ### 1.3.2 保留位与软件兼容性 @翻译人:三分月色 在许多寄存器和内存布局描述中会有一些保留位。这些被标记为保留位的比特,是为了与未来的处理器兼容,尽管未来是未知的,软件仍将这些位视为对未来有重要影响。保留位的行为应该被认为是未定义(undefined)且不可预测的。 在处理保留位时,软件应遵循以下准则: * 当测试含保留位的寄存器的值时,不依赖保留位的状态。应在测试之前屏蔽掉保留位。 * 存储到内存或寄存器时,不依赖于保留位的状态。 * 不依赖保留位保持信息(retain information)的能力。 * 加载寄存器时,始终使用文档中指示的值加载保留位(如果有的话),或者使用先前从同一寄存器读取的值重新加载保留位。