微处理器及其体系结构:从8088到现代多核处理器

在这里插入图片描述

🌈 say-fall:个人主页
🚀 专栏:《微机原理》 | 《手把手教你学会C++》 | 《C语言从零开始到精通》 | 《数据结构与算法》
💪 格言:做好你自己,才能吸引更多人,与他们共赢,这才是最好的成长方式。

📝 前言

提到微处理器(CPU),很多刚接触微机原理的同学第一反应就是“寄存器怎么这么多?”“地址计算太麻烦了”,甚至觉得这部分内容偏理论,和后续的实际开发脱节,学了没用。

但是当你真正开始学汇编语言、理解程序底层执行逻辑、甚至做嵌入式开发或驱动开发时,你会发现:不懂CPU的体系结构,你永远搞不懂为什么汇编指令要这么写,为什么内存要分段,为什么中断处理要遵循特定的流程。

不过不用担心——本文将带你从经典的8088/8086微处理器出发,系统掌握微处理器的体系结构核心知识点,为后续的汇编语言、接口技术和操作系统学习打下坚实的基础。

通过本文,你将掌握:

技能 应用场景
微处理器发展历程与分类 理解CPU技术演进逻辑,把握未来技术方向
8088/8086的核心架构与寄存器组织 看懂汇编代码的底层逻辑,理解CPU如何执行指令
实地址模式下的存储器寻址 掌握物理地址计算方法,解决内存访问的核心问题
现代多核与ARM/鲲鹏处理器特点 了解产业前沿技术,拓展技术视野

📌 前置知识: 本文不需要你有汇编基础,只需要了解计算机的基本组成(比如知道CPU、内存、硬盘分别是什么)即可。如果你学过《微机运行总概》的内容,理解起来会更快。

文章目录


一、📜 微处理器概述与发展历程

微处理器是集成在一块半导体芯片上的中央处理器(CPU),包含运算器、控制器和寄存器组三大核心部分,是整个计算机系统的“大脑”。

微处理器的发展历程和计算机技术的发展是同步的,大致可以分为5个阶段:

  1. 第一代(1971-1973):4位和低档8位微处理器
    • 代表产品:Intel 4004、8008
    • 特点:集成度低,运算速度慢,指令系统简单,主要用于简单的计算器和嵌入式设备。
  2. 第二代(1974-1977):中高档8位微处理器
    • 代表产品:Intel 8080、8085,Zilog Z80
    • 特点:集成度和运算速度有了较大提高,指令系统更加完善,开始用于早期的个人电脑。
  3. 第三代(1978-1984):16位微处理器
    • 代表产品:Intel 8086/8088、80286
    • 特点:16位数据总线,20位地址总线,可寻址1MB内存,支持多任务和内存保护,是x86架构的鼻祖。
  4. 第四代(1985-2000):32位微处理器
    • 代表产品:Intel 80386、80486、Pentium系列
    • 特点:32位数据总线和地址总线,可寻址4GB内存,引入流水线和超标量技术,性能大幅提升。
  5. 第五代(2000至今):64位多核微处理器
    • 代表产品:Intel Core系列,AMD Ryzen系列,ARM Cortex系列
    • 特点:64位架构,多核技术,更高的集成度和运算速度,支持虚拟化和SIMD指令,广泛应用于桌面、服务器和移动设备。

💡 小贴士:我们现在用的电脑的CPU,基本都属于第五代微处理器,多核、64位是标配。


二、🔧 8088/8086 CPU的核心特点

8086是Intel公司1978年推出的16位微处理器,而8088是其准16位版本(内部16位,外部数据总线为8位),两者的内部架构基本一致,是x86架构的鼻祖,至今仍是微机原理课程的核心教学内容。

8088/8086 CPU的核心特点可以总结为3点:

  1. 采用并行流水线工作方式
    • 通过设置指令预取队列实现:总线接口单元(BIU)和执行单元(EU)可以并行工作。
    • 当EU执行指令时,BIU可以提前从内存中读取下一条或多条指令,放入预取队列中,大大减少了CPU等待取指的时间,提高了工作效率。
  2. 对内存空间实行分段管理
    • 将1MB的内存空间划分为若干个逻辑段,每个逻辑段的最大长度为64KB。
    • 段地址和偏移地址都是16位,实现了用较短的字长(16位)对较大存储空间(1MB)的寻址。

    ⚠️ 注意:每个逻辑段的最大长度是64KB,因为偏移地址是16位,2^16=65536字节=64KB,超过的话需要跨段访问。

  3. 支持多处理器系统
    • 可以与8087数学协处理器、8089 I/O处理器等配合使用,构成多处理器系统,提高系统的整体性能。

三、⚙️ 8088 CPU的两种工作模式

8088 CPU可以工作在两种模式下:最小模式最大模式,由MN/#MX引脚的状态决定:

  • MN/#MX = 1:工作于最小模式
  • MN/#MX = 0:工作于最大模式

1. 最小模式

  • 属于单处理器模式,系统中只有一个8088 CPU。
  • 所有的控制信号都由CPU直接产生,不需要额外的总线控制器。
  • 控制信号较少,电路设计简单,适用于小型、简单的微机系统。

2. 最大模式

  • 属于多处理器模式,系统中可以包含多个处理器(比如加上数学协处理器)。
  • CPU不直接产生所有的控制信号,需要通过总线控制器(如8288)来产生。
  • 控制信号较多,功能更强大,适用于大型、复杂的微机系统。

四、📶 8088 CPU的主要引线及功能

8088 CPU采用40引脚双列直插封装,由于引脚数量有限,许多引脚采用了分时复用技术(同一个引脚在不同时间传输不同的信号),所有引脚的信号都是TTL电平,可以直接和TTL电路连接。

1. 地址线和数据线

  • AD0-AD7:低8位地址和低8位数据信号分时复用
    • 在总线周期的T1状态,输出低8位地址;
    • 在T2-T4状态,作为双向数据线使用。
  • A8-A15:8位地址信号,单向输出,在整个总线周期保持地址稳定。
  • A16-A19/S3-S6:高4位地址信号与状态信号分时复用
    • 在T1状态,输出高4位地址;
    • 在T2-T4状态,输出状态信息(S3-S4用于表示当前使用的段寄存器)。

2. 主要控制和状态信号

  • #WR:写信号,低电平有效,表示CPU正在执行写操作(向内存或I/O接口写数据)。
  • #RD:读信号,低电平有效,表示CPU正在执行读操作(从内存或I/O接口读数据)。
  • IO/#M:I/O/存储器选择信号。
    • 0表示访问内存;
    • 1表示访问I/O接口。
  • #DEN:数据允许信号,低电平有效,用于允许数据收发器进行读/写操作。
  • DT/#R:数据收发方向控制信号。
    • 0表示CPU接收数据(读操作);
    • 1表示CPU发送数据(写操作)。
  • ALE:地址锁存信号,高电平有效,用于将地址信号锁存到地址锁存器中(因为地址和数据分时复用,需要用ALE信号把地址“留住”)。
  • RESET:复位信号,高电平有效,使CPU回到初始状态(复位后CS=FFFFH,IP=0000H,所以复位后第一条指令从FFFF0H开始执行)。

⚠️ 注意:判断CPU当前操作类型的口诀:IO/#M区分访问内存还是I/O,#RD#WR区分读还是写。比如#WR=1#RD=0IO/#M=0,就表示CPU正在执行读存储器操作。

3. 中断请求和响应信号

  • INTR:可屏蔽中断请求输入端,高电平有效。只有当标志寄存器中的IF=1时,CPU才会响应INTR的中断请求。
  • NMI:非屏蔽中断请求输入端,上升沿有效。无论IF是否为1,CPU都会响应NMI的中断请求,常用于处理紧急的硬件故障(比如内存校验错误)。
  • #INTA:中断响应输出端,低电平有效,CPU收到中断请求后,通过此引脚向中断源发送响应信号。

4. 总线保持信号

  • HOLD:总线保持请求信号输入端,高电平有效。当其他总线主设备(比如DMA控制器)需要使用总线时,会通过此引脚向CPU发送请求。
  • HLDA:总线保持响应信号输出端,高电平有效。CPU收到HOLD请求后,会让出总线控制权,并通过此引脚通知请求方可以使用总线。

五、🧠 8088 CPU的内部结构

8088 CPU内部由两个独立的功能单元组成:执行单元(EU)总线接口单元(BIU),两者可以并行工作,是8088采用并行流水线设计的核心。

1. 执行单元(EU)

执行单元负责指令的译码和执行,它不与系统总线直接相连。

组成

  • 算术逻辑单元(ALU):进行算术运算(加、减、乘、除)和逻辑运算(与、或、非、移位)。
  • 8个通用寄存器:AX、BX、CX、DX、SP、BP、SI、DI,用于暂存运算数据和地址。
  • 标志寄存器(FLAGS):保存运算结果的特征和控制标志。
  • EU控制电路:产生各种控制信号,控制EU的操作。

功能

  • 从BIU的指令预取队列中取出指令并译码;
  • 执行指令,完成各种运算操作;
  • 暂存中间运算结果;
  • 保存运算结果的特征到标志寄存器中。

2. 总线接口单元(BIU)

总线接口单元负责CPU与内存和I/O接口之间的数据传送。

组成

  • 4个段寄存器:CS(代码段)、DS(数据段)、ES(附加段)、SS(堆栈段)。
  • 指令指针寄存器(IP):存放下一条要取的指令的偏移地址。
  • 地址加法器:将16位的段地址和偏移地址转换为20位的物理地址。
  • 指令预取队列:4字节的FIFO队列(8086为6字节),用于存放预取的指令。
  • 总线控制逻辑:产生各种总线控制信号。

功能

  • 从内存中取指令到指令预取队列;
  • 负责与内存或I/O接口之间的数据传送;
  • 在执行转移程序时,使指令预取队列复位,从新的地址取指令。

并行工作原理

BIU和EU是两个独立的单元,可以并行工作:

  • 当EU正在执行指令时,BIU可以提前从内存中读取下一条或多条指令,放入预取队列中;
  • 当EU执行完一条指令后,可以立即从预取队列中取出下一条指令执行,不需要等待BIU去取指;
  • 如果EU执行的是跳转指令,BIU会清空预取队列,重新从跳转后的地址取指。

💡 小贴士:这种并行设计是现代CPU流水线技术的雏形,现在的CPU已经发展到十几级甚至几十级流水线,核心思想和8088的EU/BIU并行是一致的。


六、📋 8088 CPU的内部寄存器详解

8088 CPU内部共有14个16位寄存器,按功能可分为三类:通用寄存器段寄存器控制寄存器

1. 通用寄存器

通用寄存器可以用于存放数据和地址,共8个,分为三组:

(1)数据寄存器(AX、BX、CX、DX)

每个数据寄存器都是16位的,又可以分为两个独立的8位寄存器(高8位和低8位)使用,比如AX可以分为AH(高8位)和AL(低8位)。

  • AX(累加器):所有I/O指令都通过AX与接口传送信息,中间运算结果也多放于AX中,是使用频率最高的寄存器。
  • BX(基址寄存器):在间接寻址中用于存放基地址,默认搭配数据段寄存器DS使用。
  • CX(计数寄存器):用于在循环或串操作指令中存放计数值,比如LOOP指令会自动让CX减1,直到CX=0为止。
  • DX(数据寄存器):在间接寻址的I/O指令中存放I/O端口地址;在32位乘除法运算时,存放高16位数。
(2)地址指针寄存器(SP、BP)
  • SP(堆栈指针寄存器):其内容为栈顶的偏移地址,默认搭配堆栈段寄存器SS使用。
  • BP(基址指针寄存器):常用于在访问内存时存放内存单元的偏移地址,默认搭配SS使用,方便访问堆栈中的参数。

⚠️ 注意:BX和BP都可以作为基址寄存器使用,但它们的默认段不同:BX默认使用DS,BP默认使用SS,写汇编的时候不要搞混。

(3)变址寄存器(SI、DI)
  • SI(源变址寄存器):在串操作指令中作为源操作数的指针,默认搭配DS使用。
  • DI(目标变址寄存器):在串操作指令中作为目标操作数的指针,默认搭配ES使用。

2. 控制寄存器

控制寄存器用于控制CPU的操作,共2个:

(1)指令指针寄存器(IP)
  • 其内容为下一条要取的指令的偏移地址,与代码段寄存器(CS)一起使用,确定下一条指令的物理地址。
  • CPU每取一个字节的指令,IP就自动加1;如果取的是16位的指令,IP就自动加2。
(2)标志寄存器(FLAGS)

标志寄存器是一个16位的寄存器,其中有9位是有效的,包括6个状态标志位和3个控制标志位

状态标志位(由运算结果自动置位,反映运算结果的特征):

  • CF(进位标志位):加/减法运算时,若最高位有进/借位则CF=1,否则CF=0。
  • OF(溢出标志位):当算术运算的结果超出了有符号数的可表达范围时,OF=1,否则OF=0。(比如8位有符号数的范围是-128~+127,如果运算结果是130,就会溢出,OF=1)
  • ZF(零标志位):当运算结果为零时ZF=1,否则ZF=0。
  • SF(符号标志位):当运算结果的最高位为1时,SF=1(表示结果为负),否则SF=0(表示结果为正)。
  • PF(奇偶标志位):运算结果的低8位中“1”的个数为偶数时PF=1,否则PF=0。
  • AF(辅助进位标志位):加/减操作中,若Bit3向Bit4有进位/借位,AF=1,否则AF=0,主要用于BCD码运算。

控制标志位(由程序置位,控制CPU的操作):

  • TF(陷阱标志位):TF=1时,使CPU处于单步执行指令的工作方式,每执行一条指令就会产生一个单步中断,常用于程序调试。
  • IF(中断允许标志位):IF=1使CPU可以响应可屏蔽中断请求(INTR),IF=0则禁止响应。
  • DF(方向标志位):在数据串操作时确定操作的方向。DF=0时,串操作从低地址向高地址进行;DF=1时,串操作从高地址向低地址进行。

3. 段寄存器

段寄存器用于存放相应逻辑段的段基地址,共4个:

  • CS(代码段寄存器):存放代码段的段基地址,代码段用于存放程序的指令码。
  • DS(数据段寄存器):存放数据段的段基地址,数据段用于存放指令执行的数据。
  • ES(附加段寄存器):存放附加段的段基地址,附加段用于部分特殊指令执行时存放数据。
  • SS(堆栈段寄存器):存放堆栈段的段基地址,堆栈段是内存的动态存储区,用于临时存放需要保存的数据(比如函数调用的参数、局部变量等)。

七、🗺️ 实地址模式下的存储器寻址

8088 CPU有20条地址线,可以寻址1MB的内存空间(地址范围00000H~FFFFFH)。但CPU内部的寄存器都是16位的,无法直接表示20位的地址。为了解决这个问题,8088采用了存储器分段管理的方式。

1. 逻辑地址与物理地址

  • 逻辑地址:程序员在编写程序时使用的地址,由段基地址偏移地址两部分组成,都是16位,格式为段地址:偏移地址
  • 物理地址:内存单元在整个内存空间中的唯一地址,是20位的,也就是我们常说的内存地址。

2. 地址变换公式

物理地址 = 段基地址 × 16 + 偏移地址

计算过程

  1. 将16位的段基地址左移4位(相当于乘以16),得到20位的段首地址;
  2. 将段首地址与16位的偏移地址相加,得到20位的物理地址。

示例
设数据段寄存器DS = 250AH,数据所在单元的偏移地址= 0204H,则该操作数的物理地址为:

250AH × 16 + 0204H = 250A0H + 0204H = 252A4H

3. 逻辑段的特点

  • 内存的分段是逻辑分段,不是物理分段,也就是说段与段之间在物理上可以连续、不连续、部分重合,甚至完全重合。
  • 每个内存单元具有唯一的物理地址,但可能具有多个逻辑地址(比如同一个物理地址可以对应DS:偏移地址,也可以对应ES:偏移地址)。
  • 逻辑段的大小、位置都可改变,一个逻辑段的默认容量为64KB(因为偏移地址是16位)。

4. 四种类型的逻辑段

从程序设计的角度,内存按4种类型划分逻辑段:

  • 代码段:用于存放程序中的指令码,由CS和IP寻址。
  • 数据段:用于存放指令执行的数据,由DS和偏移地址寻址。
  • 附加段:用于部分特殊指令执行时存放数据,由ES和偏移地址寻址。
  • 堆栈段:是内存的动态存储区,用于临时存放需要保存的数据,由SS和SP寻址。

💡 小贴士:分段管理的方式不仅解决了16位寄存器寻址1MB内存的问题,还为后续的内存保护、虚拟内存等技术打下了基础。


八、⏱️ 8088总线时序基础

时序是指CPU各引脚信号在时间上的关系。总线周期是指CPU完成一次访问内存(或I/O接口)操作所需要的时间。

一个基本的总线周期至少包括4个时钟周期(T1、T2、T3、T4):

  • T1状态:CPU输出地址信号,指明要访问的内存单元或I/O端口的地址,同时发出ALE信号锁存地址。
  • T2状态:CPU撤销地址信号,准备进行数据传送,此时数据总线进入高阻状态。
  • T3状态:CPU与内存或I/O接口之间进行数据传送,数据总线上出现有效数据。
  • T4状态:总线周期结束,CPU完成数据的读取或写入。

如果内存或I/O接口的速度较慢,无法在T3状态完成数据传送,可以在T3和T4之间插入若干个等待状态(Tw),直到数据传送完成再进入T4状态。

⚠️ 注意:等待状态Tw是CPU主动插入的,目的是适配慢速的外设,保证数据传送的正确性。


九、🚀 32位处理器与多核技术

1. Pentium 4和Core 2微处理器的主要特点

相对于16位处理器,Pentium 4和Core 2微处理器具有以下主要特点:

  • 采用了多级、多流水线的超标量结构,可以同时执行多条指令,提高并行度。
  • 将内部高速缓存分为数据缓存和指令缓存(即L1 Cache分为数据Cache和指令Cache),减少CPU访问内存的次数,提高执行效率。
  • 数据总线宽度从32位增加到64位,提高了数据传送的速度。
  • 采用了超流水线技术,增加流水线级数,提高时钟频率,进一步提升性能。
  • 采用了动态执行技术,包括分支预测、数据流分析和推测执行,减少CPU等待的时间。
  • 支持单指令多数据流式扩展技术(SIMD),一条指令可以同时处理多个数据,提高多媒体、科学计算等场景的处理能力。
  • 指令集功能不断扩充,支持更多的复杂操作。

2. 多核处理器

多核处理器是指在一枚处理器(CPU)上集成两个或多个完整的计算引擎(运算核)。

  • 每个运算核可以独立执行程序中的一个单独的任务,多个核心可以同时工作,实现真正的并行处理。
  • 整个处理器可以同时执行数倍于单核处理器的任务数,极大提升了处理器的并行性能。
  • 现在的主流处理器都是多核的,比如双核、四核、八核甚至更多核,核心数越多,并行处理能力越强。

十、🌐 ARM处理器与国产鲲鹏处理器简介

1. ARM处理器概述

ARM(Advanced RISC Machines)是目前主流的嵌入式微处理器,采用RISC(精简指令集计算机)架构。

RISC与CISC的区别

对比维度 CISC(复杂指令集,如x86) RISC(精简指令集,如ARM)
指令复杂度 指令功能强、种类多,单条指令可以完成复杂操作 指令功能简单、种类少,单条指令只能完成简单操作
指令周期 不同指令的周期差异大,多数指令需要多个时钟周期完成 指令格式统一,多数指令可以在单个时钟周期内完成
寄存器使用 寄存器数量较少,更多依赖内存操作 寄存器数量多,更多依赖寄存器操作,执行速度更快
应用场景 桌面电脑、服务器等性能要求高、兼容 legacy 软件的场景 嵌入式设备、移动设备、服务器等低功耗、高性能场景

ARM处理器的特点:

  • 体积小、功耗低、成本低、性能高,非常适合嵌入式设备和移动设备。
  • 支持Thumb(16位)/ARM(32位)双指令集,兼顾性能和代码密度。
  • 大量使用寄存器,指令执行速度更快,大多数操作都在寄存器之间完成。
  • 寻址方式灵活简单,执行效率高。

2. 国产鲲鹏处理器简介

鲲鹏处理器是华为公司自主研发的基于ARM架构的服务器处理器,是国产处理器的代表作品。

  • 鲲鹏920处理器集成了华为自主研发的TaiShan V110处理器内核,采用7nm工艺制造,最多可集成64个核心,主频最高可达2.6GHz,性能领先25%。
  • 不仅包含了通用计算资源,还集成了南桥、RoCE网卡、SAS存储控制器等,构成了功能完善的片上系统(SoC),减少了服务器的主板组件,提高了可靠性。
  • 获得ARMv8架构/指令集的永久授权,处理器、微架构和芯片由华为自主研发设计,兼容全球ARM生态,可以运行主流的Linux操作系统和数据库软件。

十一、🤔 几个思考题

学完本文,来试试回答这些问题:

1️⃣ 为什么8088/8086要采用存储器分段管理的方式?

答: 核心原因是地址位宽和寄存器位宽不匹配
8088/8086的地址总线是20位,最大可寻址1MB内存,但CPU内部的寄存器和运算单元都是16位的,无法直接表示20位的地址。
因此采用分段管理的方式:把1MB的内存空间划分为多个64KB的逻辑段,用16位的段地址(段首地址的高16位)和16位的偏移地址组合得到20位的物理地址,公式就是物理地址 = 段地址 × 16 + 偏移地址,这样就用16位的寄存器实现了1MB空间的寻址。

💡 拓展:这种方式也带来了内存保护的灵活性,不同段可以设置不同的权限,是现代操作系统内存管理的基础。

2️⃣ 简述8088 CPU中EU和BIU的并行工作原理,这种设计的优势是什么?

答: 8088的内部结构分为**执行单元(EU)总线接口单元(BIU)**两部分,两者可以独立工作,实现并行:

  1. BIU的工作:负责从内存中取指令,放入4字节的指令预取队列中,当队列有空位时,BIU就会自动去内存取后续的指令。
  2. EU的工作:负责从指令预取队列中取指令、译码、执行,不需要等待BIU取指。
  3. 并行逻辑:当EU执行当前指令时,BIU可以同时取后续的指令放入队列,两者互相等待的情况大大减少。

优势:这种设计并不会让EU等待BIU取指,大大提高了CPU的利用率和执行效率,是早期流水线技术的典型实现。

💡 拓展:如果执行的是跳转指令,BIU会清空预取队列,重新从跳转后的地址取指,这也是为什么跳转指令的执行效率会比顺序执行稍低的原因。

3️⃣ 简述实地址模式下物理地址的计算方法,并举例说明。

答: 实地址模式下的物理地址由段地址偏移地址两部分计算得到,公式为:

物理地址 = 段地址 × 16 + 偏移地址

计算步骤

  1. 把16位的段地址左移4位(也就是乘以16),得到20位的段首地址;
  2. 把段首地址和16位的偏移地址相加,得到最终的20位物理地址。

示例
假设数据段寄存器DS = 250AH,要访问的数据的偏移地址是0204H,则物理地址计算过程如下:

  1. 段地址左移4位:250AH × 16 = 250A0H
  2. 加上偏移地址:250A0H + 0204H = 252A4H
  3. 最终物理地址为252A4H

4️⃣ ARM处理器的RISC架构和传统x86的CISC架构有什么区别?

答: 两者的核心区别在指令集的设计思路上,具体对比如上表(本文第十章中的对比表格)。

💡 拓展:现在x86和ARM的界限越来越模糊,比如Apple的M系列芯片采用ARM架构但也有很多定制化设计,Intel的CPU也吸收了RISC的设计思路。


十二、🎉 结语

微处理器是计算机系统的“大脑”,理解其体系结构是学习汇编语言、接口技术乃至操作系统的核心基础。本文从8088/8086的经典架构出发,覆盖了寄存器组织、寻址方式、总线时序等核心知识点,也延伸到了现代多核处理器和国产鲲鹏处理器的内容,希望能帮你建立起完整的微处理器知识体系。

在下一篇文章中,我们将深入学习8086的指令系统,开始动手写汇编程序,把本文的理论知识用到实践中。

✅ 本节完…

📝 作者:say-fall | 编辑:say-fall | 🌟 原创不易,如果对你有帮助,记得 👍 点赞 + ⭐ 收藏 哦!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐