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

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 地址空间:

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

1.2 寄存器:

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

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

 

 

 

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位。

 

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

 

 

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

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

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

1.2.2 指令指针寄存器

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

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

 

 

 

1.2.3 标志寄存器

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

 

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

 

 

 

1.2.4 段寄存器

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

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

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

 

 

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

2 基本工作模式:

2.1 实模式

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

2.2 保护模式

2.2.1 保护模式的历史

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

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

2.2.2 保护模式概述:

  保护模式也是cpu的一种工作模式而已,是x86(x86系列的32位cpu通俗称为x86cpu)的一种完全体工作模式,但是x86也可以有别的工作模式。

80386CPU,以及所有后续的所有32位处理器,都兼容实模式,可以运行实模式下的8086 程序。而且,在刚加电时,这些处理器都自动处于实模式下,此时,它相当于一个非常快速的8086 处理器。只有在进行一番设置 之后,才能运行在保护模式下。

  在保护模式下,段寄存器中保存的不再是段地址,而是段选择子,真正的段地址以及有关段的信息都位于段寄存器的描述符高速缓存中。

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

2.3 V86模式

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

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

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

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

上一篇:python基础(16)之 日期


下一篇:基于MCRA-OMLSA的语音降噪(三):实现(续)