
8086CPU分为哪两个部分?各部分主要由哪些部件组成?主要进行哪些操作?
8086 CPU从功能上分为总线接口部件(BIU) 和执行部件(EU) 两大部分,这种分离设计实现了取指令与执行指令的并行操作,显著提升了处理效率。
BIU负责CPU与外部存储器、I/O设备的通信,核心功能是生成物理地址和数据传输控制。其组成包括:
段寄存器组:4个16位寄存器(CS、DS、SS、ES),分别存储代码段、数据段、堆栈段和附加段的基地址。例如,CS(代码段寄存器)与IP配合定位指令,DS(数据段寄存器)用于数据访问。
指令指针寄存器(IP):16位寄存器,指向代码段中下一条待执行指令的偏移地址,相当于程序计数器(PC)。
地址加法器:通过段基址左移4位+偏移地址的公式生成20位物理地址(如CS=1000H、IP=2000H时,物理地址=1000H<<4 + 2000H=12000H),解决16位寄存器寻址1MB内存的矛盾。
指令队列缓冲器:6字节先进先出队列,用于预取指令。当队列有2个以上字节空闲时,BIU自动从内存取指令填充,实现“取指-执行”并行。
总线控制电路:生成地址信号(如读/写信号)、控制数据流向,并响应EU的访问请求。
BIU的操作流程体现其“桥梁”作用:例如执行MOV AX, [1000H]时,BIU先用DS=3000H和偏移地址1000H计算物理地址(3000H<<4 + 1000H=31000H),再通过总线控制电路从该地址读取数据并传送给EU。
EU负责指令译码、执行和数据处理,完全独立于外部总线。其组成包括:
通用寄存器组:8个16位寄存器,分三类:
数据寄存器(AX、BX、CX、DX):AX为累加器,用于I/O和运算;CX为计数寄存器,控制循环次数。
指针与变址寄存器(SP、BP、SI、DI):SP(堆栈指针)指向栈顶,SI/DI(源/目的变址寄存器)用于字符串操作。
算术逻辑单元(ALU):16位运算器,执行加减乘除、逻辑运算(如AND、OR)及移位操作。
标志寄存器(FLAGS):9个标志位记录运算状态(如CF进位、ZF零标志)和控制指令行为(如IF中断允许标志)。
控制电路:译码指令并生成操作控制信号,协调ALU和寄存器的动作。
EU的工作流程是“取指-译码-执行”的闭环:从BIU指令队列取指令(如ADD AX, BX),译码后通过ALU完成AX与BX的加法,结果存入AX并更新FLAGS中的零标志(ZF)或进位标志(CF)。
BIU与EU通过指令队列异步协同:当EU执行指令时,BIU可同时预取下一条指令;若EU需要数据(如访问内存),则向BIU发送地址请求,BIU完成数据传输后返回结果。这种设计避免了传统CPU“取指-等待-执行”的串行延迟,例如EU执行一条耗时较长的乘法指令时,BIU可提前填充后续3条指令到队列,显著提升效率。
8086的“BIU-EU”架构奠定了现代CPU流水线的基础——如今的超标量处理器正是这一思想的延伸。思考:如果没有指令队列,CPU性能会下降多少?这种分离设计对后来的x86架构发展产生了哪些影响?