x86(32位)-1-32位x86 处理器编程架构

Intel 32 位处理器架构简称IA-32(Intel Architecture,32-bit)

x86是指intel的86系列的CPU统称,比如说8086就是x86里面中的一款CPU。

IA-32,X86-32是指intel的32位CPU架构。

x86系列的处理器架构是从8086发展来的,是基于8086 的,具有延续性兼容性。所以x86系列的CPU都可以和8086CPU进行类比。

1.1 基本执行环境:

1.1.1 地址空间:

32 位的处理器有32根地址线,数据线的数量是32 根或者64根。因此,它可以访问2的32次方(4GB)的内存地址空间,每次可以读写连续的4 字节或 者8 字节,这称为双字(Double Word)或者4 字(Quad Word)访问。

1.1.2 寄存器:

32位x86 CPU总共包含了8个通用寄存器,6个16位段寄存器,一个状态处理器EFLAGS和一个指令指针寄存器。

 

 

 

1.1.2.1 通用寄存器

在16位CPU内,有8个通用寄存器AX、BX、CX、DX、SI、DI、 BP 和SP,其中,前4个还可以拆分成两个独立的8 位寄存器来用,即 AH、AL、BH、BL、CH、CL、DH 和DL。32 位处理器 在16位处理器的基础上,扩展了这8 个通用寄存器的长度,使之达到32位。

 

 

 

其中这个32位相对于16位扩展的寄存器就在16位寄存器的名字上加了一个E,这个E就是Extend中文扩展的意思。

32 位通用寄存器的高16 位是不可独立使用的,但低16 位保持同16 位处理器的兼容性。在任何时候它们都可以像在16位CPU里一样使用。

32位CPU是兼容16位CPU的,所以照样可以在32 位处理器上运行16 位处理器上的软件。

1.1.2.2 指令指针寄存器

为了生成32 位物理地址,32 位处理器将IP寄存器扩展到了32 位,即EIP。当CPU工作在16位模式下时,依然使用16 位的IP;在32 位模式下时,使用的是全部的32 位EIP。

 

 

 

1.1.2.3 标志寄存器

在16 位处理器中,标志寄存器FLAGS 是16 位的,在32 位处理器中,扩展到了32位,低16 位和原先保持一致。

 

 

 

 

1.1.2.4 段寄存器(Segment Register)

在32 位模式下,传统的段寄存器,如CS、SS、 DS、ES,保存的不再是16位段基地址,而是段的选择子,用于选择所要访问的段,因此,实际上它的名字叫做段选择器

除了段选择子之外,每个段寄存器还包括一个不可见部分,称为描述符高速缓存器,里面有段的基地址、段的范围和段的访问限制。这部分内容程序不可访问,由处理器自动使用。

 

 

 

 

除了CS SS DE ES以外32 位处理器还增加了两个额外的段寄存器FS 和GS。

1.2 基本工作模式:

1.2.1 实模式(real mode)

8086CPU只有一种工作模式,即实模式,也就是说我们前面学习8086CPU都是在实模式下进行学习的。当然,这个名称是后来才提出来的。实模式等同于8086模式,实模式和16位保护模式通常统称16位模式。

1.2.2 保护模式(protect mode)

1.2.2.1 保护模式的历史

1982年的时候,Intel公司推出了80286处理器。80286第一次提出了保护模式的概念。

1985 年的80386 处理器是Intel 公司的第一款32 位产品,而且获得了极大成功,是后续所有32 位产品的基础。

1.2.2.2 保护模式概述:

  保护模式是x86CPU最主要的工作模式,是利用了完全体x86CPU的工作模式,在保护模式下,段寄存器中保存的不再是段地址,而是段选择子,真正的段地址以及有关段的信息都位于段寄存器的描述符高速缓存中。

  在保护模式下,所有的32 位处理器都可以访问多达4GB的内存,它们可以工作在分段模型下,每个段的基地址是32 位的,段内偏移量也是 32 位的,因此,段的长度不受限制不像保护模式由于cs:ip的原因,一个段只有0000~FFFF的空间。

1.2.3 V86模式

virtual 86模式,字面意思就是虚拟8086模式。

在这种模式下,IA-32 处理器被模拟成多个8086 处理器并行工作。

V86 模式是保护模式的一种,可以在保护模式下执行多个8086 程序。传统上,要执行8086 程序,处理器必须工作在实模式下。在这种情况下,为 32 位保护模式写的程序就不能运行。但是,V86 模式提供了让它们在一 起同时运行的条件。

V86模式曾经很有用,因为在那个时候,8086 程序很多,而32位应用程序很少,这个过渡期是必需的。现在,这种工作模式已经基本无用了。

1.3 x86启动流程

在刚加电时,这些处理器都自动处于实模式下,此时,它相当于一个非常快速的8086 处理器。只有在进行一番设置之后,才能运行在保护模式下。

x86可以类比8086的启动流程只不过是把8086的实模式作为一种过度然后再进行一番设置最后进入到x86的完全体模式-保护模式。也就是我们现在常用的32位计算机的运行环境下的CPU模式。

8086-1-计算机的启动过程 - Sna1lGo - 博客园 (cnblogs.com)

1.4 地址:

在x86中一共有三种地址形式,逻辑地址,线性地址和物理地址。

1.4.1 物理地址:

物理地址就是内存上的内存地址。也可以叫其为真实地址。

1.4.2 逻辑地址:

传统上,段地址和偏移地址组成成的地址称为逻辑地址。

比如: cs:ip就是一个逻辑地址。

 

1.4.3 线性地址:

 线性地址是指一段连续的内存空间的地址。在x86中可分为虚拟内存线性地址,和物理内存线性地址。因为将一整个内存从头往下看看着像是一条平整的直线,所以叫线性地址。

 

 

 

1.4.4 地址的转换:

 在页式管理中线性地址通常是指虚拟内存线性地址,物理地址指真实内存线性地址。

逻辑地址是由段式管理而来的,由CPU的段部件进行处理,而线性地址是用来描述任务的虚拟地址空间是由页式管理而来的,由CPU的页部件进行处理。

他们的转换关系如下:

 

 

 

当页式内存管理没有开启时产生的就是物理地址,当页式管理开启后产生的就是物理内存线性地址。