[TOC]
一、概念
微处理器:微型计算机系统的核心——中央处理器(CPU)。它是一块超大规模集成电路芯片,集成了运算器、控制器、寄存器等核心逻辑部件
微型计算机:以微处理器为核心,配以必要的支持电路(如芯片组)、存储器(RAM、ROM)、输入/输出接口,组装在一块或几块印刷电路板(PCB)上,形成的功能基本完整的计算机硬件主体。
微型计算机系统:微型计算机配备上必要的辅助存储设备、输入/输出设备(外设)、系统软件(如操作系统)和应用软件后,形成的完整、可投入实际使用的计算机系统。
指令译码器:指令译码器是CPU控制单元的核心部件,负责将从内存中取出的机器指令(二进制编码)翻译成CPU内部可识别的微操作(Micro-Ops),并生成控制信号,告诉其他功能单元(如ALU、寄存器等)如何执行该指令。
指令队列:指令队列是一个缓冲结构,用于暂存从内存或缓存中预取的指令,为后续的译码和执行阶段提供连续的指令流,避免因指令获取延迟导致的流水线停顿。
二、8086简述
8086微处理器主要由运算器(算术逻辑运算单元ALU、地址加法器)、控制器(总线控制器)、内部寄存器组(14个内部寄存器)三部分组成。
CPU从功能上分为执行单元EU和总线接口单元BIU,其中执行单元EU负责指令的执行;而总线接口单元BIU负责与存储器及I/O接口之间的数据传送操作。具体来看,完成取指令送指令队列,配合执行部件的动作,从内存单元或I/O端口取操作数,或者将操作结果送内存单元或者I/O端口。
EU和BIU的工作逻辑关系如下所示:
① 每当8086的指令队列中有两个空字节,或BIU就会自动把指令取到指令队列中。其取指的顺序是按指令在程序中出现的前后顺序;
② 每当EU准备执行一条指令时,它会从BIU部件的指令队列前部取出指令的代码,然后用几个时钟周期去执行指令。在执行指令的过程中,如果必须访问存储器或者I/O端口,那么EU就会请求BIU,进入总线周期,完成访问内存或者I/O端口的操作;如果此时BIU正好处于空闲状态,会立即响应EU的总线请求。如BIU正将某个指令字节取到指令队列中,则BIU将首先完成这个取指令的总线周期,然后再去响应EU发出的访问总线的请求。
③ 当指令队列已满,且EU又没有总线访问请求时,BIU便进入空闲状态。
④在执行转移指令、调用指令和返回指令时,由于待执行指令的顺序发生了变化,则指令队列中已经装入的字节被自动消除,BIU会接着往指令队列装入转向的另一程序段中的指令代码。
三、引脚
(1)8086引脚:
引脚名称 | 类型 | 功能描述 |
---|---|---|
AD15–AD0 | 双向三态 | 地址/数据分时复用总线。T1状态输出低16位地址(A15–A0),其他时间传输数据(D15–D0)。 |
A19/S6–A16/S3 | 输出三态 | 地址/状态分时复用。T1状态输出高4位地址(A19–A16),其他时间输出状态:S6=0(CPU占用总线),S5=IF标志位状态,S4–S3表示当前段寄存器(00=ES,01=SS,10=CS,11=DS)。 |
BHE*/S7 | 输出三态 | 高8位数据总线允许/状态复用。T1状态低电平有效时允许高8位数据(D15–D8)传输;其他时间输出未定义的S7状态。与A0组合控制数据总线宽度(如奇/偶地址访问)。 |
RD* | 输出三态 | 读信号,低电平有效时表示CPU正在从存储器或I/O端口读取数据。 |
WR* | 输出三态 | 写信号,低电平有效时表示CPU正在向存储器或I/O端口写入数据。 |
M/IO* | 输出三态 | 存储器/I/O选择信号。高电平选择存储器,低电平选择I/O端口。 |
READY | 输入 | 高电平有效时表示外设或存储器已准备好数据传输;若为低电平,CPU插入等待状态(Tw)直到READY恢复高电平。 |
INTR | 输入 | 可屏蔽中断请求,高电平有效。若IF=1,CPU在当前指令结束后响应中断。 |
INTA* | 输出 | 中断响应信号,低电平有效。CPU响应INTR后连续发出两个INTA*脉冲,通知外设提交中断向量。 |
NMI | 输入 | 非屏蔽中断请求,上升沿触发。不受IF标志影响,优先级高于INTR。 |
RESET | 输入 | 复位信号,高电平有效至少4个时钟周期。复位后CPU初始化寄存器(CS=FFFFH,其他清零),并从FFFF0H开始执行程序。 |
CLK | 输入 | 时钟信号,占空比1:3(高电平占1/3),频率5–8MHz。 |
MN/MX* | 输入 | 工作模式选择。高电平为最小模式(单处理器),低电平为最大模式(多处理器)。 |
ALE | 输出 | 地址锁存允许信号,高电平有效。T1期间锁存复用总线上的地址信息。 |
DEN* | 输出三态 | 数据允许信号,低电平有效时启用外部数据收发器。 |
DT/R* | 输出三态 | 数据方向控制信号。高电平表示CPU发送数据(写操作),低电平表示接收数据(读操作)。 |
HOLD/HLDA | 输入/输出 | 最小模式下:HOLD为总线请求输入,HLDA为响应输出。最大模式下被RQ/GT0–1取代。 |
TEST* | 输入 | 测试信号,低电平有效。与WAIT指令配合实现CPU与外设同步。 |
VCC/GND | 电源/地 | +5V电源输入(引脚40)和接地引脚(引脚1、20)。 |
最大模式专用引脚
引脚名称 | 功能描述 |
---|---|
S2–S0* | 总线周期状态信号,输出给8288总线控制器生成控制信号(如存储器/I/O读写)。 |
RQ/GT0–1 | 总线请求/允许双向信号,优先级高于HOLD/HLDA。 |
LOCK* | 总线封锁信号,低电平有效时禁止其他主设备占用总线。 |
QS1–QS0 | 指令队列状态信号,外部可跟踪CPU内部指令队列状态(如00=无操作,10=队列空)。 |
(2)8088引脚:
引脚名称 | 类型 | 功能描述 |
---|---|---|
AD7–AD0 | 双向三态 | 地址/数据分时复用总线。T1状态输出低8位地址(A7–A0),其他时间传输数据(D7–D0)。 |
A15–A8 | 输出三态 | 高8位地址线(非复用),直接输出地址A15–A8。 |
A19/S6–A16/S3 | 输出三态 | 地址/状态分时复用。T1状态输出高4位地址(A19–A16),其他时间输出状态:S6=0(CPU占用总线),S5=IF标志位状态,S4–S3表示当前段寄存器(00=ES,01=SS,10=CS,11=DS)。 |
BHE*/S7 | 输出三态 | 高字节允许/状态复用(8088中此引脚功能与8086不同)。8088中通常无效(因数据总线仅8位),但部分系统可能复用为状态位S7。 |
RD* | 输出三态 | 读信号,低电平有效时表示CPU正在从存储器或I/O端口读取数据。 |
WR* | 输出三态 | 写信号,低电平有效时表示CPU正在向存储器或I/O端口写入数据。 |
M/IO* | 输出三态 | 存储器/I/O选择信号。高电平选择存储器,低电平选择I/O端口。 |
READY | 输入 | 准备就绪信号,高电平有效时表示外设或存储器已准备好数据传输;若为低电平,CPU插入等待状态(Tw)。 |
INTR | 输入 | 可屏蔽中断请求,高电平有效。若IF=1,CPU在当前指令结束后响应中断。 |
INTA* | 输出 | 中断响应信号,低电平有效。CPU响应INTR后连续发出两个INTA*脉冲,通知外设提交中断向量。 |
NMI | 输入 | 非屏蔽中断请求,上升沿触发。不受IF标志影响,优先级高于INTR。 |
RESET | 输入 | 复位信号,高电平有效至少4个时钟周期。复位后CPU初始化寄存器(CS=FFFFH,其他清零),并从FFFF0H开始执行程序。 |
CLK | 输入 | 时钟信号,占空比1:3(高电平占1/3),频率4.77MHz(IBM PC标准)。 |
MN/MX* | 输入 | 工作模式选择。高电平为最小模式(单处理器),低电平为最大模式(多处理器)。 |
ALE | 输出 | 地址锁存允许信号,高电平有效。T1期间锁存复用总线上的地址信息。 |
DEN* | 输出三态 | 数据允许信号,低电平有效时启用外部数据收发器。 |
DT/R* | 输出三态 | 数据方向控制信号。高电平表示CPU发送数据(写操作),低电平表示接收数据(读操作)。 |
HOLD/HLDA | 输入/输出 | 最小模式下:HOLD为总线请求输入,HLDA为响应输出。最大模式下被RQ/GT0–1取代。 |
TEST* | 输入 | 测试信号,低电平有效。与WAIT指令配合实现CPU与外设同步。 |
SS0* | 输出 | 状态信号(8088特有),在最大模式下与IO/M、DT/R组合指示总线周期类型(如中断响应、取指等)。 |
VCC/GND | 电源/地 | +5V电源输入(引脚40)和接地引脚(引脚1、20)。 |
最大模式专用引脚
引脚名称 | 功能描述 |
---|---|
S2–S0* | 总线周期状态信号,输出给8288总线控制器生成控制信号(如存储器/I/O读写)。 组合含义: • 000:中断响应 • 001:读I/O • 010:写I/O • 011:暂停 • 100:取值令 • 101:读存储器 • 110:写存储器 •111:无 |
RQ/GT0–1 | 总线请求/允许双向信号,优先级高于HOLD/HLDA。 |
LOCK* | 总线封锁信号,低电平有效时禁止其他主设备占用总线(如原子操作期间)。 |
QS1–QS0 | 指令队列状态信号,外部可跟踪CPU内部指令队列状态: • 00:无操作 • 01:取指令第一字节 • 10:队列空 • 11:取指令后续字节。 |
四、8088最小/最大组态模式
8088微处理器通过MN/MX*引脚(33号引脚)的电平选择工作模式,分为最小组态(最小模式)和最大组态(最大模式)。
(1)最小组态(最小模式)
- 配置方式:MN/MX*引脚接+5V高电平,适用于单处理器系统
- 特点:
- 总线控制:8088直接生成所有系统总线信号(如RD、WR、IO/M*等),无需外部总线控制器
- 引脚功能:
- HOLD/HLDA:用于总线请求与响应。HOLD为输入信号,其他设备请求总线控制权;HLDA为输出信号,表示CPU已释放总线
- WR*、RD*:直接控制存储器和I/O端口的读写操作
- 典型电路:
- 地址锁存:使用3片74LS373锁存器分离复用地址线(AD7–AD0、A19/S6–A16/S3)
- 数据缓冲:1片74LS245收发器驱动8位数据总线
(2)最大组态(最大模式)
配置方式:MN/MX*引脚接地(低电平),适用于多处理器系统(如主处理器+协处理器8087/8089)
特点:
总线控制:由8288总线控制器译码8088的状态信号(S2–S0*),生成系统控制信号(如MEMRMEMW、IOR、IOW等),增强驱动能力
引脚功能:
- S2–S0*:输出总线周期状态编码,8288据此生成读写控制信号
- RQ/GT0–1:取代HOLD/HLDA,支持优先级更高的总线请求/响应机制
- LOCK*:总线封锁信号,用于多处理器同步(如原子操作)
典型电路:
- 地址与数据分离:仍需锁存器和收发器,但控制信号由8288管理
- 协处理器支持:可连接8087(浮点运算)或8089(I/O处理)
应用场景:复杂系统如IBM PC/XT,需多处理器协同或高性能总线控制
(3) 区别总结
特性 | 最小组态 | 最大组态 |
---|---|---|
MN/MX*电平 | +5V | 接地 |
总线控制 | 8088直接生成控制信号 | 8288控制器译码S2–S0*生成信号 |
总线请求 | HOLD/HLDA | RQ/GT0–1(优先级更高) |
多处理器支持 | 不支持 | 支持(如8087/8089) |
典型应用 | 简单单处理器系统 | IBM PC/XT等复杂系统 |
五、8086总线和总线时序
(1)概念
寻址空间 = 2^(地址总线位数)
总线周期数量 = 数据块大小 / 数据总线宽度
总线:总线是计算机系统中各部件(CPU、内存、I/O设备等)之间传输数据、地址和控制信号的公共通道,由一组导线(或光纤、无线链路等)组成
按功能可分为三类:
- 数据总线(Data Bus)
- 双向传输实际数据(如CPU从内存读取的指令、硬盘传输的文件数据)。
- 宽度(位数)决定一次传输的数据量(如32位总线一次传4字节)。
- 地址总线(Address Bus)
- 单向传输(CPU→外设),指定访问的内存或I/O设备位置。
- 宽度决定寻址空间(如32位地址总线支持4GB内存)。
- 控制总线(Control Bus)
- 传输协调操作的信号,如:
- 读写使能(Read/Write)
- 时钟同步(CLK)
- 中断请求(IRQ)
- 总线仲裁(用于多主设备竞争总线使用权)。
按层级可分为:
- 系统总线(CPU与北桥/内存之间的高速总线,如Intel的FSB)。
- I/O总线(连接外设的扩展总线,如PCIe、SATA)。
按连接对象可分为:
- 芯片总线:用于 芯片内部或SoC组件间 的超高速通信(如CPU ↔ 缓存)。
- 内总线:用于 主板内部 的高速通信(如CPU ↔ 内存、PCIe设备)。
- 外总线:用于 连接外部设备,速率较低但通用性强(如USB、SATA)。
按照数据传输方式分类:
- 并行总线:并行总线使用 多条数据线同时传输多个数据位,每个时钟周期可以传输多位数据(如8位、16位、32位等)
- 串行总线:串行总线使用 单条或少数几条数据线逐位传输数据,通过提高频率和编码技术实现高带宽。
总线周期:总线周期是CPU通过总线完成一次基本操作(如读/写一个数据单元)所需的时间段,通常由多个时钟周期组成
(2)总线时序
8086/8088系统总线详解(时序解析+总线相关知识)_8086总线-CSDN博客
【4.2 8086总线时序】 https://www.bilibili.com/video/BV17f4y1v7Sa/?share_source=copy_web&vd_source=367168fbf1718c5ddb4ca1f97788c1b0
总线周期:CPU完成一次访存/接口操作所需要的时间,一个总线周期至少包含4个时钟周期
六、8253计数器
8253 是一种可编程的定时器/计数器芯片,具有三个独立的 16 位计数器通道(Channel 0 ~ Channel 2),每个通道都可以根据不同的工作方式(模式)进行编程控制,用作定时器、计数器或产生波形信号。
(1)基本结构
8253 芯片包含以下主要组成部分:
组成部分 | 功能说明 |
---|---|
3个独立的16位计数器 | 每个计数器可以单独编程,用于定时或计数功能 |
控制寄存器 | 决定每个计数器的工作方式和读写操作 |
数据总线缓冲器 | 与 CPU 的数据总线连接,实现数据交换 |
读/写逻辑电路 | 控制对寄存器的访问 |
(2)6种工作方式
需要两个写脉冲 —— 两次写操作
第 1 个写脉冲写入控制字
第 2 个写脉冲写入计数初值
不同的工作方式,有不同的计数启动方法
可根据对输出波形的要求,选择不同的工作方式
能输出连续波形的只有方式 2 和方式 3
(3)初始化程序
1 | ;写入控制字 |
七、8255芯片
D7~D0:数据信号线
CS:片选信号输入引脚,低电平有效
RD:读信号输入引脚,低电平有效
WR:写信号输入引脚,低电平有效
RESET:复位信号输入引脚,高电平有效。用于将8255A控制字寄存器清“0”,并将A、B、C口置成输入状态
A1、A0:端口选择信号输入引脚
八、8259A芯片
【微机原理l 四页思维导图+45分钟解决难点两大章8255A,8259A 能闭眼回忆出初始化方式控制字吗?】 https://www.bilibili.com/video/BV1ps4y1V7xp/?share_source=copy_web&vd_source=367168fbf1718c5ddb4ca1f97788c1b0
(1)芯片框图
(2)引脚功能
(3)8259A级联
其中从芯片的INT引脚连接到主芯片的IR2引脚上,即8259A从芯片发出的中断信号将作为8259A主芯片的IRQ2输入信号
(4)8259A内部结构和寄存器
8259A内部包含多个功能模块和寄存器,共同协作完成中断管理任务:
**中断请求寄存器(IRR)**:8位寄存器,用于保存来自IR0-IR7的中断请求状态。当某IR线出现有效中断请求信号时,IRR对应位被置1。
**中断服务寄存器(ISR)**:8位寄存器,记录当前正在被服务的中断。当某中断被CPU响应后,其对应位在ISR中被置1,直到中断处理结束。
**中断屏蔽寄存器(IMR)**:8位寄存器,用于屏蔽特定的中断请求。某位置1表示屏蔽对应中断,禁止其被CPU处理。
**优先权判别器(PR)**:当多个中断同时发生时,PR会比较它们的优先级,决定哪个中断应优先被处理。PR还会将新中断与当前正在处理的中断(ISR中记录)比较,只有更高优先级的中断才能打断当前处理。
数据总线缓冲器:作为8259A与CPU数据总线之间的接口,用于传输命令字、状态字和中断类型码。
读写控制逻辑:控制数据总线缓冲器的数据传输方向,选择内部寄存器。当CPU发读信号时,8259A状态信息被放到数据总线;发写信号时,CPU的命令字被写入指定寄存器。
级联缓冲/比较器:用于多片8259A级联时,主片通过CAS0-CAS2发送级联地址,选中从片。