按Intel的定义,0~32个中断是CPU出错用的,称为异常。32~255是给系统自己定义使用的。在DOS中,系统使用被分成了两个部分,一个部分是硬件的IRQ,IRQ就是级连的中断控制器。其他的则被分配给软件使用。现在64位的CPU中,中断扩充成16位,则理论上可有64KB个中断。
80286芯片能在实模式和保护模式两种方式下工作。在实模式下,80286与8086芯片一样,与操作系统DOS和绝大部分硬件系统兼容;在保护模式下,每个同时运行的程序都在分开的空间内独自运行。286的保护模式还是有很多不兼容缺陷,到了386才算有真正的改革,操作系统才真正进一步发挥作用,从16位真正跨入32位程序。
2.3 32位微处理器
1985年,真正的32位微处理器80386DX诞生,为32位软件的开发提供了广阔的舞台。1989年,Intel推出80486芯片,把387的浮点运算器合于486之中,并且采用流水线技术,令CPU每个周期可以执行一条指令,速度上突破100 MHz,超过了RISC的CPU。1992年,Intel发布奔腾芯片,采用多流水线技术及并行执行的能力,从此,CPU可以每个周期执行多个指令。1995年的奔腾Pro能力上再进了一步,产生动态执行技术,使CPU可以乱序执行。我们知道,从80386开始到现在的P4的CPU,它们的体系结构一直都是相同的,增加的只是内部的实现方式,所以,这些体系结构对大多数程序员来说就是透明的。
2.3.1 寄存器组成
80386寄存器的宽度大多是32位,可分为如下几组:通用寄存器、段寄存器、指令指针及标志寄存器、系统地址寄存器、调试寄存器、控制寄存器和测试寄存器。应用程序主要使用前面三组寄存器,只有系统才会使用其他寄存器。这些寄存器是8080、8086、80286寄存器的超集,所以,80386包含了先前处理器的全部16位寄存器。
- 通用寄存器
80386有8个通用寄存器,这8个寄存器分别定名为EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI。它们都由原先的16位寄存器扩展而成。这些通用寄存器的低16位还是可以作为16位寄存器存取,并不受影响。以前的AX、BX、CX、DX这4个寄存器还可以单独使用这16位中的高8位和低8位,即分别是AH、AL、BH、BL、CH、CL、DH和DL。
在80386中,8个32位通用寄存器都可以作为指针寄存器使用,所以32位通用寄存器更加通用。
- 段寄存器
80386中有6个16位的段寄存器,分别命名为CS、SS、DS、ES、FS和GS。其中,FS和GS是80386新增加的寄存器。
在实模式下,内存的逻辑地址仍是"段值:偏移"形式,而在保护模式下,情况就复杂很多了。它总体上是通过可见部分寄存器指向不可见的内存部分。有关内容将在2.3.2节中介绍。
所有这些寄存器的可见的部分和不可见的部分在IA64中可以直接处理IA 32位的一切,就像80386中的VM86一样,即如在Windows上执行DOS窗一样。
- 指令指针和标志寄存器
80386的指令指针寄存器扩展到了32位,记为EIP。EIP的低16位是16位的指令指针IP,与以前的X86系统相同。
由于在实模式下,段的最大范围是64KB,所以EIP的高16位必须全是0,仍相当于16位的IP作用。
其中,增加了IO特权标志IOPL(I/O Privilege Level)、嵌套任务标志NT(Nest Task)、重启动标志RF(Reset Flag)、虚拟8086方式标志VM(Virtual 8086 Mode)。
AMD采用了X86架构并将之扩展至64位,开创了X86-64架构。
(1)处理器在32位的X86位纯模式下工作,可以运行现在的32位操作系统和应用软件。
(2)处理器在"长模式"下工作,运行64位的操作系统,既能执行32位应用程序,又能执行64位应用程序。
(3)只有在"64位模式"下,才能进行64位寻址和访问64位 寄存器。
(4)扩展是简单并且兼容的,所以处理器可以以最高的速度和性能支持X86和X86-64。
所有的用户都能获得32位的性能和32位的兼容性。在需要时,客户可以在不放弃32位兼容性的情况下迁移至64位的寻址和数据类型,沿用主流PC架构的发展而不是重新创作。