欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[翻译]斗胆翻译《Intel?64 and IA-32体系结构: 软件开发人员手册》 卷1: 系统编程指南,第4部分

[翻译]斗胆翻译《Intel?64 and IA-32体系结构: 软件开发人员手册》 卷1: 系统编程指南,第4部分

正在学习汇编,正好就自己找这个来看,一楼一章慢慢翻译,中间要是有什么翻译错误希望能够得到大神的指点,原文目录就不上了,第一章敬上。

翻译 by:山有木

原文全文见附件

 

CHAPTER 1

手册相关


英特尔?4IA-32架构软件开发人员手册,第1卷:基本架构(订单号253665)是描述英特尔?4IA-32架构处理器的体系结构和编程环境的集合的一部分。此集合中的其他卷是:

"“英特尔?4IA-32架构软件开发人员手册2A2B2C2D:指令集参考(订货号253666,253667,326018334569)。

"“英特尔?4IA-32体系结构软件开发人员手册3A3B3C3D:系统编程指南(订货号253668,253669,326019332831)。

"英特尔?4IA-32架构软件开发人员手册卷1介绍了英特尔64IA-32处理器的基本架构和编程环境。英特尔?4IA-32体系结构软件开发人员手册卷2A2B2C2D描述了处理器和操作码结构的指令集。这些卷适用于应用程序员和编写操作系统或高管的程序员。英特尔?4IA-32架构软件开发人员手册,第3A卷,3B3C3D卷描述了英特尔64IA-32处理器的操作系统支持环境。这些卷面向操作系统和BIOS设计人员。此外,英特尔?4IA-32架构软件开发人员手册第3B卷解决了托管操作系统的各类软件的编程环境。

1.1手册包含Intel?4IA-32处理器

本手册包括主要针对最新Intel 64IA-32处理器的信息,其中包括:

"奔腾?/span>处理器

"P6系列处理器

"Pentium?处理器

"Pentium甅处理器

"英特尔?/span>至强?/span>处理器

"奔腾处理器

"Pentium?/span>处理器极限版

"64位英特尔?/span>至强?/span>处理器

"Intel瓹ore!"Duo处理器

"Intel瓹ore!"Solo处理器

"双核英特尔?/span>至强?/span>处理器LV

"Intel瓹ore!"2 Duo处理器

"英特尔?/span>酷睿!"2四核处理器Q6000系列

"英特尔?/span>至强?/span>处理器3000,3200系列

"英特尔?/span>至强?/span>处理器5000系列

"英特尔?/span>至强?/span>处理器5100,5300系列

"Intel瓹ore!"2 Extreme处理器X7000X6800系列

"Intel瓹ore!"2 Extreme处理器QX6000系列

"英特尔?/span>至强?/span>处理器7100系列

"英特尔?/span>奔腾?/span>双核处理器

"英特尔?/span>至强?/span>处理器7200,7300系列

"英特尔?/span>至强?/span>处理器5200,5400,7400系列

"Intel瓹ore!"2 Extreme处理器QX9000X9000系列

"英特尔?/span>酷睿!"2四核处理器Q9000系列

"英特尔?/span>酷睿!"2双核处理器E8000T9000系列

"英特尔?/span>凌动!"处理器系列

"英特尔?/span>凌动!"处理器200,300D400D500D2000N200N400N2000E2000Z500Z600Z2000C1000系列均采用45纳米和32纳米工艺制造

"Intel瓹ore!"i7处理器

"英特尔?/span>酷睿!"i5处理器

"英特尔?/span>至强?/span>处理器E7-8800 / 4800/2800产品系列

"Intel瓹ore!"i7-3930K处理器

"第二代英特尔?/span>酷睿!"i7-2xxx,英特尔?/span>酷睿!"i5-2xxx,英特尔?/span>酷睿!"i3-2xxx处理器系列

"英特尔?/span>至强?/span>处理器E3-1200产品系列

"英特尔?/span>至强?/span>处理器E5-2400 / 1400产品系列

"英特尔?/span>至强?/span>处理器E5-4600 / 2600/1600产品系列

"第三代英特尔?/span>酷睿!"处理器

"英特尔?/span>至强?/span>处理器E3-1200 v2产品系列

"英特尔?/span>至强?/span>处理器E5-2400 / 1400 v2产品系列

"英特尔?/span>至强?/span>处理器E5-4600 / 2600/1600 v2产品系列

"英特尔?/span>至强?/span>处理器E7-8800 / 4800/2800 v2产品系列

"第四代英特尔?/span>酷睿!"处理器

"Intel瓹ore!"M处理器系列

"英特尔?/span>酷睿!"i7-59xx处理器极限版

"英特尔?/span>酷睿!"i7-49xx处理器极限版

"英特尔?/span>至强?/span>处理器E3-1200 v3产品系列

"英特尔?/span>至强?/span>处理器E5-2600 / 1600 v3产品系列

"5代英特尔?/span>酷睿!"处理器

"英特尔?/span>至强?/span>处理器D-1500产品系列

"英特尔?/span>至强?/span>处理器E5 v4系列

"Intel瓵tom!"处理器X7-Z8000X5-Z8000系列

"英特尔?/span>凌动!"处理器Z3400系列

"英特尔?/span>凌动!"处理器Z3500系列

"第六代英特尔?/span>酷睿!"处理器

"英特尔?/span>至强?/span>处理器E3-1500m v5产品系列

P6系列处理器是基于P6系列微体系结构的IA-32处理器。这包括Pentium甈roPentium甀IPentium甀IIPentium甀IIXeon?/span>处理器。

奔腾?,奔腾和奔腾?/span>处理器极限版基于英特尔NetBurst?/span>微体系结构。大多数早期的英特尔?/span>至强?/span>处理器均基于英特尔甆etBurst?/span>微架构。英特尔至强处理器5000,70000系列基于英特尔NetBurst?/span>微架构。

英特尔?/span>酷睿!"双核,英特尔?/span>酷睿!"独奏和双核英特尔?/span>至强?/span>处理器LV基于改进的Pentium甅处理器微体系结构。

英特尔?/span>至强?/span>处理器3000,3200,5100,5300,72007300系列,英特尔?/span>奔腾?/span>双核,英特尔?/span>酷睿!"2双核,英特尔?/span>酷睿!"2四核处理器和英特尔?/span>酷睿!"2 Extreme处理器均为基于英特尔?/span>酷睿!"微架构。

英特尔?/span>至强?/span>处理器5200,5400,740系列,英特尔?/span>酷睿!"2四核处理器Q9000系列和英特尔?/span>酷睿!"2 Extreme处理器QX9000X9000系列,英特尔?/span>酷睿!"2处理器E8000系列均基于增强型英特尔?Core!"微架构。

英特尔?/span>凌动!"处理器200,300D400D500D2000N200N400N2000E2000Z500Z600Z2000C1000系列基于英特尔?/span>凌动!"微架构,并支持英特尔64架构。

英特尔?/span>酷睿!"i7处理器和英特尔?/span>至强?/span>处理器3400,500,7500系列基于45纳米英特尔?/span>微体系结构代码名称Nehalem。英特尔?/span>微体系结构代码名称Westmere是英特尔?/span>微体系结构代码名称Nehalem32纳米版本。英特尔?/span>至强?/span>处理器5600系列,英特尔至强处理器E7和各种英特尔酷睿i7i5i3处理器均基于英特尔?/span>微体系结构代码名称为西米特尔。这些处理器支持Intel 64架构。

英特尔?/span>至强?/span>处理器E5系列,英特尔?/span>至强?/span>处理器E3-1200系列,英特尔?/span>至强?/span>处理器E78800 / 4800/2800产品系列,英特尔?/span>酷睿!"i7-3930K处理器和第二代英特尔?/span>酷睿!"i7-2xxx英特尔?/span>酷睿!"i5-2xxx,英特尔?/span>酷睿!"i3-2xxx处理器系列基于英特尔?/span>微架构代码名称Sandy Bridge,并支持英特尔64架构。

英特尔?/span>至强?/span>处理器E7-8800 / 4800/2800 v2产品系列,英特尔?/span>至强?/span>处理器E3-1200 v2产品系列和第三代英特尔?/span>酷睿!"处理器基于英特尔?/span>微体系结构代号Ivy Bridge和支持英特尔64架构。

英特尔?/span>至强?/span>处理器E5-4600 / 2600/1600 v2产品系列,英特尔?/span>至强?/span>处理器E5-2400 / 1400 v2产品系列和英特尔?/span>酷睿!"i7-49xx处理器至尊版

1.2       1卷概述:基础结构

本手册内容的描述如下:

1 - 关于本手册。概述了英特尔?4IA-32架构软件开发人员手册的所有五卷。它还描述了这些手册中的符号约定,并列出了相关的英特尔手册和程序员和硬件设计人员感兴趣的文档。

2 - 英特尔?4IA-32架构。推出英特尔64IA-32架构以及基于这些架构的英特尔处理器系列。它还概述了这些处理器中发现的常见功能以及英特尔64IA-32体系结构的简史。

3 - 基本执行环境。介绍内存组织模型,并描述应用程序使用的寄存器集。

4 - 数据类型。描述处理器识别的数据类型和寻址模式;提供了实数和浮点格式以及浮点异常的概述。

5 - 指令集摘要。列出所有的Intel 64IA-32指令,分为技术组。第6 - 程序调用,中断和异常。描述为过程调用和服务中断和异常而提供的过程栈和机制。

7 - 通用指令编程。描述对基本数据类型,通用和段寄存器进行操作的基本负载和存储,程序控制,算术和字符串指令;还描述了在保护模式下执行的系统指令。

8 - 使用x87 FPU进行编程。描述x87浮点单元(FPU),包括浮点寄存器和数据类型;给出了浮点指令集的概述,并描述了处理器的浮点异常情况。

9 - 使用英特尔甅MX!"技术进行编程。描述英特尔MMX技术,包括MMX寄存器和数据类型;还提供了MMX指令集的概述。

10 - 使用英特尔甋treaming SIMD扩展(英特尔甋SE)进行编程。描述SSE扩展,包括XMM寄存器,MXCSR寄存器和压缩单精度浮点数据类型;提供SSE指令集的概述,并为编写访问SSE扩展的代码提供指导。第11 - 使用英特尔甋treaming SIMD扩展2(英特尔甋SE2)进行编程。描述SSE2扩展,包括XMM寄存器和压缩双精度浮点数据类型;提供SSE2指令集的概述,并为编写访问SSE2扩展的代码提供指导。本章还介绍了可以使用SSESSE2指令生成的SIMD浮点异常。它还提供了将支持SSESSE2扩展纳入操作系统和应用程序代码的一般准则。

12 - 使用英特尔甋treaming SIMD扩展3(英特尔甋SE3)进行编程,补充

流式SIMD扩展3SSSE3),英特尔?/span>流式SIMD扩展4(英特尔甋SE4)和英特尔瓵ES新指令(英特尔瓵ESNI)。提供SSE3指令集,补充SSE3SSE4AESNI指令以及编写访问这些扩展的代码的指导原理。第13 - 使用XSAVE功能集管理状态。介绍XSAVE功能集说明,并说明软件如何启用XSAVE功能集和启用XSAVE功能。

14 - 使用AVXFMAAVX2进行编程。提供英特尔瓵VX指令集,FMAIntel AVX2扩展的概述,并为编写访问这些扩展的代码提供指导。

15 - 使用英特尔事务同步扩展进行编程。描述支持锁定精密技术的指令扩展,以提高具有竞争锁的多线程软件的性能。

16 - 输入/输出。描述处理器的I / O机制,包括I / O端口寻址,I / O指令和I / O保护机制。

17 - 处理器识别和特征确定。介绍如何确定处理器中可用的CPU类型和功能。

附录A - EFLAGS交叉引用。总结IA-32指令如何影响EFLAGS寄存器中的标志。

附录B - EFLAGS条件码。总结条件跳转,移动以及条件代码中的字节设置如何使用EFLAGS寄存器中的条件代码标志(OFCFZFSFPF)。

附录C - 浮点异常摘要。总结x87 FPU浮点和SSE / SSE2 / SSE3浮点指令引发的异常。

附录D - 写入x87 FPU异常处理程序的指南。介绍如何设计和编写适用于FPU异常的MSDOS *兼容异常处理工具(包括软件和硬件要求以及汇编语言代码示例)。本附录还描述了编写鲁棒FPU异常句柄的一般技术

1.3       符号约定

本手册使用数据结构格式的特定符号,指令的符号表示,以及十六进制和二进制数。 符号表示如

1.3.1     Bit Byte 顺序

在内存中的数据结构图中,较小的地址出现在图的底部; 地址向顶部增加。 Bit位置从右到左编号。 设置位的数值等于提升到位位置的功率的两个。 英特尔64IA-32处理器是小端机器; 这意味着字的字节从最低有效字节开始编号。 参见图1-1

 1-1.  Bit  Byte 顺序


1.3.2    
保留位和软件兼容性


在许多寄存器和存储器布局描述中,某些位被标记为保留位。 当位被标记为保留时,与未来的处理器的兼容性是必不可少的,软件将这些位视为具有未来的,尽管未知的效果。 保留位的行为不仅应该被认为是未定义的,而且是不可预知的。

在处理保留位时,软件应遵循以下准则: "在测试包含这些位的寄存器的值时,不要依赖于任何保留位的状态。

在测试前屏蔽保留位。

"在存储到存储器或寄存器时,不要依赖于任何保留位的状态。

"不要依赖于保留写入任何保留位的信息的能力。

"加载寄存器时,请始终使用文档中指示的值(如果有)加载保留位,或者使用先前从同一寄存器读取的值重新加载它们。

注意

避免任何软件依赖于Intel 64IA-32寄存器中保留位的状态。

根据保留寄存器位的值将使软件依赖于处理器处理这些位的未指定方式。 依赖于预留值的程序会与未来的处理器不兼容。

1.3.2.1   指令操作数

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

labelmnemonic argument1argument2argument3

where

"标签是一个标识符,后跟一个冒号。

"助记符是具有相同功能的指令操作码类的保留名称。

"操作数argument1argument2argument3是可选的。根据操作码,可能有零到三个操作数。存在时,它们采用文字或数据项标识符的形式。操作数标识符是寄存器的保留名称,或假定分配给程序另一部分中声明的数据项(可能在示例中未显示)。

当算术或逻辑指令中存在两个操作数时,右操作数为源,左操作数为目标。

例如:

LOADREGMOV EAXSUBTOTAL

在这个例子中,LOADREG是一个标签,MOV是操作码的助记符号,EAX是目标操作数,SUBTOTAL是源操作数。一些汇编语言使源和目的地相反。

1.3.3     十六和二进制数

基数16(十六进制)数字由十六进制数字字符串后跟字符H(例如,0F82EH)表示。 十六进制数字是下列集合中的一个字符:0,1,2,3,4,5,6,7,8,9ABCDEF.

基数2(二进制)数字由10的字符串表示,有时后跟字符B(例如,1010B)。 “B”的名称只适用于可能会出现混淆数字类型的情况。

1.3.4     分段寻址

处理器使用字节寻址。 这意味着内存被组织和访问作为一个字节序列。 是否访问一个或多个字节,使用字节地址来定位字节或字节存储器。 可以寻址的存储器范围称为地址空间。

处理器还支持分段寻址。 这是一种寻址方式,程序可能具有许多独立的地址空间,称为段。 例如,程序可以将其代码(指令)和堆栈保存在单独的段中。 代码地址总是引用代码空间,堆栈地址总是引用堆栈空间。 以下符号用于指定段内的字节地址:

Segment-register:Byte-address

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

DS:FF79H

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

1.3.5     CPUIDCRMSR值的新语法

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

Figure 1-2.  CPUIDCRMSR数据显示CPUID的语法

 

1.3.6      异常

一个异常是通常在指令引起错误时发生的事件。 例如,尝试除以零会产生异常。 然而,一些例外,如断点,会发生在其他条件下。 某些类型的异常可能会提供错误代码。 错误代码报告有关错误的其他信息。 用于显示异常和错误代码的符号示例如下所示:

#PF(fault code)

此示例在报告错误代码命名类型的故障的情况下引用页面错误异常。 在某些情况下,产生错误代码的异常可能无法报告准确的代码。 在这种情况下,错误代码为零,如下所示的通用保护异常:

#GP(0)

1.4       相关文献

与英特尔64和IA-32处理器相关的文献在线列出并可查看:http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

也可以看看:

"特定Intel 64或IA-32处理器的数据手册

"特定Intel 64或IA-32处理器的规格更新

"英特尔瓹 ++编译器文档和在线帮助:http://software.intel.com/en-us/articles/intel-compilers/

"英特尔瓼ortran编译器文档和在线帮助:

http://software.intel.com/en-us/articles/intel-compilers/

"英特尔砑⒐ぞ撸?/p>

http://www.intel.com/cd/software/products/asmo-na/eng/index.htm

"英特尔?4和IA-32架构软件开发人员手册(三或七卷):

http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

"英特尔?4和IA-32体系结构优化参考手册:

http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimizationmanual.html

"Intel 64架构x2APIC规格:

http://www.intel.com/content/www/us/en/architecture-and-technology/64-architecture-x2apic-specification.html

"英特尔尚胖葱屑际醪饬科舳肪潮喑讨改希?/p>

http://www.intel.com/content/www/us/en/software-developers/intel-txt-software-development-guide.html "开发多线程应用程序:平台一致方法:

https://software.intel.com/sites/default/files/article/147714/51534-developing-multithreaded-applications.pdf

"使用英特尔继??处理器和英特尔燎?砥魃系淖孕罚?/p>

http://software.intel.com/en-us/articles/ap949-using-spin-loops-on-intel-pentiumr-4-processor-and-intelxeonr-processor/

"性能监控单元共享指南http://software.intel.com/file/30388

有关未来英特尔处理器中选定功能的文献,请访问:

"英特尔芄怪噶罴┱贡喑滩慰糷ttps://software.intel.com/en-us/isa-extensions

"英特尔砑阑だ┱梗ㄓ⑻囟?甋GX)编程参考https://software.intel.com/en-us/isa-extensions/intel-sgx

更多相关链接是:

"英特尔⑷嗽弊ㄇ?/p>

https://software.intel.com/en-us

"开发人员中心:

http://www.intel.com/content/www/us/en/hardware-developers/developer-centers.html

"处理器支持常规

http://www.intel.com/support/processors/

"软件产品和包装:

http://www.intel.com/cd/software/products/asmo-na/eng/index.htm

"英特尔叱碳际酰ㄓ⑻囟?瓾T技术):

http://www.intel.com/technology/platform-technology/hyper-threading/index.htm


注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功