前言:寒假继续自学微机原理的小白一枚~
看到微处理器CPU的基本部件和8086/8088微处理器的内部结构之后有一点迷茫,(主要可能是因为这里的字母太多了?)上网搜了很多blog后,整理了一下自己对这部分内容的理解。作者能力有限,欢迎大家在评论区留言讨论~

微处理器CPU基本部件

微处理器CPU大体分为运算器控制器两部分。
同时,书上对8086/8088CPU的基本结构分为执行部件(EU,Execution Unit)和总线接口部件(BIU,Bus Interface Unit)两类。具体如下图所示:
在这里插入图片描述

以下将结合8086/8088CPU结构对CPU运算器和控制器进行具体介绍。

运算器(Arithmetic Unit)

运算器包括ALU(算术逻辑单元)和Reg组。(当然,也有很多文章将CPU分为三个部分【即运算器(只包括ALU)、内部寄存器组、控制器】,本文就按照自己教材的教法,将内部寄存器组归到运算器中)

  • ALU(算术逻辑单元,Arithmetic&Logic Unit),用于完成各种算术运算(加减乘除)和逻辑运算(与 或 非 异或 同或)。【在上图的EU部分很容易找到】
  • Reg组,既可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。【注意!这不止包括上图EU部分的通用寄存器,也包括BIU部分的寄存器。Reg组的具体分类在本文附录部分会详细阐述】

控制器(CU,Control Unit)

控制器包括PC(Program Counter,程序计数器)、IR(Instruction Register、指令寄存器)、ID(Instruction Decoder、指令译码器)、PLA(Programmable Logic Array,可编程逻辑阵列,书上写的是逻辑控制)

  • PC(Program Counter,程序计数器),指出程序中将要执行的指令地址
  • IR(Instruction Register,指令寄存器),寄存从内存来的指令
  • ID(Instruction Decoder,指令译码器),用于分析指令
  • PLA(Programmable Logic Array,可编程逻辑阵列),发出相应的节拍脉冲和电位,完成指令的所有操作

附录

Reg组

在EU和BIU中的Reg组,笔者已经在下图用黄色方框标出来了,写的应该很清楚了
在这里插入图片描述
在这里插入图片描述

EU里的通用寄存器

8位CPU通用寄存器共有12个:AH,AL,BH,BL,CH,CL,DH,DL,BP,SP,SI,DI
16位CPU通用寄存器共有8个:AX,BX,CX,DX,BP,SP,SI,DI
32位CPU通用寄存器共有8个:EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI(E表示Extended)

通用寄存器分为:数据寄存器变址寄存器指针寄存器

数据寄存器

8位CPU数据寄存器共有8个:AH,AL,BH,BL,CH,CL,DH,DL
16位CPU数据寄存器共有4个:AX,BX,CX,DX
32位CPU数据寄存器共有4个:EAX,EBX,ECX,EDXI(E表示Extended)

数据寄存器(Data Register,DR),主要用于暂存参与运算的数据或从外部设备读取的数据。它在数据传输过程中起到缓冲作用,确保数据能够快速、准确地在CPU内部或与外部设备之间传输。

以下以16位CPU数据寄存器为例,介绍每个数据寄存器的含义和作用。

  • AX通常称为累加寄存器(Accumulator,Acc),提供ALU运算的一个操作数,并存放运算结果
  • BX称为基地址寄存器(Base Register),它可作为存储器指针来使用
  • CX称为计数寄存器(Count Register),在循环和字符串操作时,用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数【在x86架构中,CL是寄存器CX的低8位部分】
  • DX称为数据寄存器(Data Register),在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址【这里的数据寄存器和这一小节的标题数据寄存器不是一个东西哈】
变址寄存器
  • SI(Source Index,源索引寄存器),通常用于字符串操作中的源地址指定。在串操作指令(如MOVSBCMPSB等)中,SI数据段寄存器DS组合(DS:SI),用于指定源数据的地址
  • DI(Destination Index,目的索引寄存器),用于字符串操作中的目标地址指定。它通常与附加段寄存器ES组合(ES:DI),用于指定目标数据的地址
指针寄存器
  • SP(Stack Pointer,堆栈指针),用于指向当前堆栈的栈顶位置。堆栈是一种后进先出LIFO)的数据结构,通常用于存储函数调用的返回地址局部变量以及中断处理的上下文等。在x86架构中,堆栈通常从高地址向低地址增长,因此每次压栈(PUSH)操作时,SP会减小;每次弹栈(POP)操作时,SP会增大
  • BP(Base Pointer,基址指针),通常用于指向当前栈帧的基地址。栈帧是一个用于存储函数参数、局部变量和返回地址的内存区域。BP寄存器在函数调用中非常重要,因为它可以用来访问函数的参数和局部变量,而不会因SP的变化而受到影响

EU里的标志寄存器FR

FR(Flag Register,标志寄存器,或称PSW,即Program Status Word)用来记录计算机运行时某些重要标志(如溢出OF[OverflowFlag]、进位CF[CarryFlag]、结果为0ZF[ZeroFlag]、正负SF[SignFlag]、奇偶标志PF[ParityFlag]、辅助进位标志AF[Auxiliary CarryFlag]等)。可以编程根据这些状态控制CPU的运行。

EU里的暂存寄存器

暂存寄存器通常用于临时存储数据,以便在指令执行过程中快速访问和处理数据。可以减少对内存的访问次数,提高CPU的执行效率。

BIU里的4个段寄存器

4个段寄存器分为代码段寄存器CS)、堆栈段寄存器SS)、数据段寄存器DS)、附加段寄存器ES)。

  • CS(Code Segment Register,代码段寄存器),存储代码段的段基地址,用于指示程序指令所在的内存区域
  • SS(Stack Segment Register,堆栈段寄存器),存储堆栈段的段基地址,用于指示程序堆栈所在的内存区域
  • DS(Data Segment Register,数据段寄存器),存储数据段的段基地址,用于指示程序中全局变量和静态变量所在的内存区域
  • ES(Extra Segment Register,附加段寄存器),存储附加段的段基地址,通常用于字符串操作或其他动态数据的内存区域

BIU里的指令指针寄存器IP

IP(Instruction Pointer,指令指针寄存器),用于指示下一条将要执行的指令在当前代码段内的地址偏移量。

BIU里的内部通信寄存器

内部通信寄存器通常是指用于实现硬件模块之间或硬件与软件之间通信的寄存器。

CPU对存储器的读/写操作

笔者对这部分的内容也有点模糊,就在这篇blog中一起整理了,以下介绍的MARMDR是在存储器中的,读者不要搞混了哦~
在这里插入图片描述
图上箭头的数字表示的是先后顺序,上图是读操作的流程图

主存储器中,MAR(Memory Address Register,地址寄存器),用于存储内存地址(单向)。在写入数据时,CPU将目标内存地址加载到MAR中,指示要写入数据的内存位置。
MDR(Memory Data Register,数据寄存器),用于临时存储从内存读取的数据或要写入内存的数据(双向)。当CPU需要写入数据时,它会将要写入的数据加载到MDR中。

上面已经介绍过PCIR了,为了加深大家的印象,这里再介绍一次:

  • PC(Program Counter,程序计数器),指出程序中将要执行的指令地址
  • IR(Instruction Register,指令寄存器),寄存从内存来的指令

CPU读操作(又称取)

CPUPC送地址→MAR地址译码器→选中相应内存单元,在控制信号控制下,数据传到→MDR→传回CPUIR

CPU写操作(又称存)

CPUPC送地址→MAR地址译码器→选中相应内存单元,然后将待写数据数据传到→MDR,在控制信号控制下,将MDR中的数据写入内存


这里再附上我们老师PPT上的图,两张图一起看会更清晰一点。

结语
更多关于8086/8088的内容,笔者觉得有一篇blog写的挺好的,欢迎参照【微机原理】8088/8086微处理器
更多关于CPU对存储器的读写操作的内容,笔者向大家推荐一下B站王道的网课,感觉讲的挺好的,希望对大家有帮助王道计算机考研 计算机组成原理
更多关于CPU模型机的总体设计的内容,笔者向大家推荐一下B站一位up主的网课计算机组成原理之CPU模型机的总体设计
下面两张图是网课中截的图,关于CPU总体设计的,希望对大家有帮助
在这里插入图片描述
在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐