引言:
本文简述Intel 64与IA-32处理器的基本执行环境(汇编语言程序员可见),包括内存(地址空间),通用寄存器,段寄存器,标志寄存器与指令指针寄存器。
3.1 运行模式
IA-32架构处理器支持三种基本运行模式:保护模式,实地址模式与系统管理模式。运行模式决定了处理器可执行哪些指令以及具有哪些架构功能。
• 保护模式 — 保护模式是IA-32架构处理器的基本模式。保护模式提供VM-8086模式,在该模式下,处理器可执行8086程序。
• 实地址模式 — 该模式提供扩展的Intel 8086处理器执行环境。当处理器上电启动或复位后会处于该模式。
• 系统管理模式 — 该模式提供对操作系统透明且与平台相关的电源管理、系统安全等功能。当处理器的SMM中断引脚被激活或者收到来自高级可编程中断控制器(APIC)的SMI信号,处理器进入系统管理模式。
在系统管理模式中,处理器保存当前运行程序的上下文并切换至一个独立的地址空间,而后透明执行SMM程序。SMM最开始在Intel386,Intel486处理器中出现,之后成为Intel 处理器产品的标准功能。
3.1.1 Intel 64架构
Intel 64架构增添了IA-32e模式,其含有两个子模式。
• 兼容模式 — 兼容模式允许大部分16位和32位应用不用重新编译即可在64位操作系统下运行。为简洁起见,在IA-32架构中,兼容子模式被称为兼容模式。兼容模式的执行环境与3.2节所描述的相同。兼容模式支持所有64位模式与保护模式支持的特权级。VM-8086程序或者使用硬件管理的程序不可在该模式下运行。
兼容模式是操作系统在代码段的基础上启用的。这意味着一个64位操作系统可支持运行在64位模式下的64位应用以及运行在兼容模式下的32位应用。
兼容模式与32位保护模式相似,应用只能访问4GB的线性地址空间。兼容模式可使用16位与32位大小的地址与操作数。像保护模式一样,兼容模式允许应用使用PAE技术来访问4GB以上的空间。
• 64位模式 — 该模式使64位操作系统能够运行为访问64位线性地址空间编写的程序。为简洁起见,IA-32架构下,64位子模式称为64位模式
64位模式扩展了通用寄存器的数量,并将SIMD扩展寄存器的数量从8个扩展到16个。通用寄存器扩展至64位宽。该模式引入REX前缀来访问扩展寄存器。
3.2 基本执行环境概述
任何在IA-32架构处理器上运行的程序或人物都有一套硬件资源来执行指令,存储代码、数据和状态信息。这些硬件资源组成了IA-32架构处理器的基本执行环境。
Intel 64处理器支持IA-32处理器的基本执行环境,并支持在IA-32e模式下可执行64位程序以及32位程序的相似的执行环境。
应用程序与操作系统联合使用处理器的基本执行环境。
• 地址空间 — 任何在IA-32架构处理器上运行的任务或程序都可访问4GB的线性地址空间与64GB的物理地址空间(PAE技术)。详细信息请见3.3.6.
• 基本程序执行寄存器 — 8个通用寄存器、6个段寄存器(包含高速缓存)、EFLAGS与EIP寄存器共同组成了基本执行环境,在该环境中程序可执行一组通用指令。详细信息请见3.4。
• x87FPU寄存器 — 8个x87FPU数据寄存器、x87控制寄存器、状态寄存器、x87FPU指令指针寄存器、x87操作数指针寄存器,x87FPU标记寄存器与x87FPU操作码寄存器共同同组成浮点运算基本执行环境,在该环境中程序可执行单精度浮点运算、双精度浮点运算、双精度扩展浮点运算等操作。详细信息请见8.1。
• MMX寄存器 — 8个MMX寄存器支持对64位压缩的字节、字和双子的SIMD操作。详细信息请见9.2。
• XMM寄存器 — MXCSR寄存器和8个XMM寄存器支持对128位压缩的字节、字、双字和四字以及单精度浮点值和双精度浮点值的SIMD操作。详细信息请见10.2。
• YMM寄存器 — YMM数据寄存器支持对256位压缩的字节、字、双字和四字以及单精度浮点值和双精度浮点值的SIMD操作。
• 界限寄存器 — BND0—BND3寄存器保存与指向内存缓冲区指针有关的上界与下界。它们支持Intel MPX指令的执行。
• BNDCFGU与BNDSTATUS — BNDCFGU在界限检查上配置用户模式MPX操作。BNDSTATUS提供由MPS操作所触发的#BR的额外信息。
• 栈 — 为支持过程调用、子例程调用以及过程与子例程之间的参数传递,执行环境中也包含栈与栈管理资源,栈位于内存中。详细信息请见6.2
图片 3-1. IA-32架构基本执行环境
除了基本执行环境中所包含的资源,IA-32架构提供另外部分资源作为其系统级结构的组成部分。它们为操作系统与系统开发软件提供广泛支持。除了I/O端口外,Intel® 64 and IA-32 Archit-ectures Software Developer’s Manual, Volumes 3A & 3B详细描述了其他系统资源。
• I/O端口 — IA-32架构支持I/O端口数据的输入输出。详细信息请见第19章。
• 控制寄存器 — CR0-CR4决定了处理器的运行模式以及当前运行任务的特征。详细信息请见Chapter 2, “System Architecture Overview,” in the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A。
• 内存管理寄存器 — GDTR、IDTR、TR与LDTR指定可保护模式内存管理中的数据结构的位置。详细信息请见Chapter 3, “System Architecture Overview,” in the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A。
• Debug寄存器 — DR0-DR7控制并监视处理器的Debug操作。详细信息请见Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3B。
• 内存类型范围寄存器(MTRRs) — MTRRs被用来指派内存区域的类型。详细信息请见Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volumes 3A & 3B。
• 特殊模块寄存器(MSRs)— 处理器提供MSRs寄存器用来控制与报告处理器性能。除了时间戳指针寄存器外,所有的MSRs寄存器都会用来处理系统相关的功能并且不可被应用程序访问。详细信息请见Chapter 2, “Model-Specific Registers (MSRs)” of the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 4。
• 机器检查寄存器 — 此类寄存器包含一套控制、状态寄存器,以及检测和报告硬件错误的错误报告MSRs寄存器。详细信息请见Chapter 15, “Machine Check Architecture,” of the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A。
• 性能检测计数器 — 该计数器允许检测处理器性能事件。详细信息请见Chapter 19, “Performance Monitoring,” in the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3B。
3.2.1 64位模式执行环境
64位模式的执行环境与3.2节所描述的大抵相同,具体区别请见图片 3-2。
图片 3-2. 64位模式执行环境
3.3 内存组织
处理器通过总线访问的内存叫做物理内存。物理内存被组织成字节序列,每个字节都有一个独一无二的地址,叫做物理地址。IA-32架构处理器物理地址空间最大64GB(使用内存扩展技术)。Intel 64架构在物理地址空间与线性地址空间引入了一些改变。详细信息请见3.3.3、3.3.4和3.3.7。
3.3.1 IA-32内存模型
当使用处理器的内存管理设施时,程序不直接访问物理内存。相反,程序通过平坦、分段与实地址模式进行访存。
• 平坦内存模型 — 对程序来说,在该模型下内存是一个单个连续的地址空间。该空间称为线性地址空间,代码、数据和栈全部包含在此空间中。线性地址空间范围为0-4GB,其中的某一字节的地址为线性地址。
• 分段地址模型 — 对程序来说,在该模型下内存是一组被称为段的独立地址空间。代码、数据和段包含在独立的段中。使用分段内存最主要的原因是为了提升程序与系统的可靠性。
• 实地址模式内存模型 — 该模型最初起源于8086。
图片 3-3. 三种内存管理模型
3.3.2 分页与虚拟内存
在平坦或分段内存模型中,线性地址空间要么直接映射到物理地址空间,要么通过分页映射到物理地址空间。当使用直接映射时,每一个线性地址地址与物理地址有一对一的对应关系。线性地址无需转换即可送到地址总线上。
当使用IA-32架构的分页机制时,线性地址经过一系列的转换形成最终的物理地址再送到物理总线上。IA-32架构的分页机制有三种类型:基本分页模型、物理地址扩展(PAE)模型与页大小扩展(PSE)模型。
3.3.3 64位模式下内存组织
Intel 64架构支持比64GB更大的物理地址空间。IA-32架构处理器的实际物理地址大小与物理实现有关。在64位模式中,处理器由64位线性地址的架构支持。然而,支持Intel64架构的处理器可能无法实现64位。
3.3.4 执行模式与内存模型
在位IA-32架构和Intel 64架构处理器编写代码时,程序员需要知道处理器的执行模式以及当前使用的内存模型。二者之间的关系如下:
• 保护模式 — 保护模式下,处理器可使用3.3.1节所描述的任何一种内存模型(VM-8086模式中使用实地址模式)。处理器使用的内存模型取决于操作系统的设计。当执行多任务时,不同的任务可以使用不同的内存模型。
• 实地址模式 — 当处理器处于实地址模式时,其仅支持实地址内存模型。
• 系统管理模式 — 当处理器处于系统管理模式,处理器切换至一个叫做系统管理RAM(SRAM)的独立地址空间。在该地址空间内存访问模型与实地址模型相似。详细信息请见Chapter 31, “System Management Mode,” in the Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3C。
• 兼容模式 — 软件在兼容模式下与32位保护模式相同。
• 64位模式 — 该模式下禁用分段。具体来说,在该模式下处理器将CS、DS、ES和SS视为0,并且该模式禁用分段与实地址模式。
参考文献:
【1】:Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture