第2章 认识CPU-2.3 32位微处理器(1)

按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位寄存器。

  1. 通用寄存器

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位通用寄存器更加通用。

  1. 段寄存器

80386中有6个16位的段寄存器,分别命名为CS、SS、DS、ES、FS和GS。其中,FS和GS是80386新增加的寄存器。

在实模式下,内存的逻辑地址仍是"段值:偏移"形式,而在保护模式下,情况就复杂很多了。它总体上是通过可见部分寄存器指向不可见的内存部分。有关内容将在2.3.2节中介绍。

所有这些寄存器的可见的部分和不可见的部分在IA64中可以直接处理IA 32位的一切,就像80386中的VM86一样,即如在Windows上执行DOS窗一样。

  1. 指令指针和标志寄存器

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架构的发展而不是重新创作。

相关推荐
BackCatK Chen2 小时前
第十五章 吃透C语言结构与数据形式:struct/union/typedef全解析
c语言·开发语言·数据结构·typedef·结构体·函数指针·联合体
『往事』&白驹过隙;2 小时前
C/C++中的格式化输出与输入snprintf&sscanf
linux·c语言·c++·笔记·学习·iot·系统调用
m0_531237172 小时前
C语言-初始化赋值,函数,变量的作用域与生命周期
c语言·开发语言
m0_531237172 小时前
C语言-变量,枚举常量,字符串,打印类型,转义字符
c语言·数据结构·算法
zyeyeye2 小时前
自定义类型:结构体
c语言·开发语言·数据结构·c++·算法
z20348315205 小时前
如何用状态机解决按键状态识别问题(一)
c语言·单片机
智者知已应修善业6 小时前
【项目配置时间选择自己还是团体】2025-3-31
c语言·c++·经验分享·笔记·算法
白太岁8 小时前
操作系统开发:(10) 线程创建与调度的底层原理:从硬件行为解释线程
c语言·网络·系统架构
爱编码的小八嘎9 小时前
第2章 认识CPU-2.3 32位微处理器(2)
c语言