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.

193 lines
14 KiB

翻译前先阅读整体规则的 [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 次方...)。
3 years ago
Intel 和 IA-32 处理器都是采用“little endian(小端)”方式存储数据;这意味着 word 的字节序是从最低有效字节开始编号(译者注:关于“大端”和“小端”问题,请查看 [大端(Big-Endian)和小端(Little-Endian)](https://juejin.cn/post/6930889701507203085/#comment))。请看图1-1。
# 第二章 Intel 64 and IA-32 Architectures
# 第三章 Basic Execution Environment
## 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
# 第五章 Instruction Set Summary
# 第六章 Procedure Calls, Interrupts, and Exceptions
# 第七章 Programming With General-Purpose Instructions
# 第八章 ~ 第十八章
二期再译
# 第十九章 Input/Output
# 第二十章 Processor Identification and Feature Determination
# 附录 A ~ 附录 D
二期再译