微机原理第二章知识点总结
名词解释
| 术语 | 解释 |
|---|---|
| 存储单元 | 存储器中用于存放一个字节(8个二进制位)的基本单位,并且每一个存储单元都有一个唯一的地址来进行标识。 |
| 寄存器 | CPU内部的高速存储部件,用于暂时存放指令、数据或地址。其存取速度远高于内存。 |
CPU的时钟、机器周期与总线周期
- 时钟周期:也称为T状态,是CPU中最基本、最小的时间单位,由CPU的主频决定(时钟周期 = 1 / 主频)。CPU的每一个动作都至少需要一个或多个时钟周期。
- 机器周期:指CPU完成一个基本操作所需的时间,例如从内存读取一个指令字。一个机器周期通常包含若干个时钟周期。
- 总线周期:指CPU通过总线对存储器或I/O接口进行一次完整的读/写操作所需要的时间。一个总线周期由至少四个时钟周期(T1, T2, T3, T4)组成。在需要时,CPU可以在T3和T4之间插入一个或多个等待周期(Tw)以适应慢速的存储器或I/O设备。
8086 CPU最小模式读写总线周期
在最小模式下,8086 CPU独立工作,直接产生所有总线控制信号。
读总线周期(从内存或IO接口读取数据)
| 时钟周期 | 核心动作 | 概念解释 |
|---|---|---|
| T1 | CPU将地址送到地址/数据总线上,ALE(地址锁存允许)信号变为高电平。 | CPU发出要访问的单元地址。ALE的高电平通知外部的地址锁存器锁存地址信息,因为这些引脚稍后将用于传输数据。 |
| T2 | CPU撤销地址信号,并将数据线置为高阻输入状态,同时发出 (读)信号(低电平有效)。 | CPU准备接收数据,并命令存储器或IO设备将数据放到总线上。 |
| T3 | CPU等待数据稳定。(数据使能)信号变为低电平有效,允许数据从外部设备传输到CPU。 | 选中的设备在此期间将数据输出到数据总线上。 |
| T4 | CPU从数据总线上读取数据,并将其存入内部。 和 信号恢复为高电平,总线周期结束。 | CPU完成数据接收,并撤销本次读操作的控制信号。 |
写总线周期(向内存或IO接口写入数据)
| 时钟周期 | 核心动作 | 概念解释 |
|---|---|---|
| T1 | CPU将地址送到地址/数据总线上,ALE信号变为高电平。 | 与读周期相同,CPU首先发出要写入的目标地址。 |
| T2 | CPU将要写入的数据送到数据总线上,并发出 (写)信号(低电平有效)。 | CPU发出写命令,并将待写数据准备好。 |
| T3 | 数据在总线上保持稳定。(数据使能)信号变为低电平有效,将数据正式驱动到总线上。 | 确保数据能够被存储器或IO设备可靠地接收。 |
| T4 | 和 信号恢复为高电平,总线周期结束。 | CPU完成数据写入,撤销写控制信号。 |
一个总线读周期意味着CPU要从存储器或I/O端口读取数据。整个过程被精确地协调在至少四个时钟周期(T-States)内。下面结合图 2.27 中的信号,逐步解析每个T状态下发生的动作。
T1 状态:地址输出阶段
在T1时钟周期的上升沿开始,CPU的核心任务是 把要访问的单元地址发送到总线上。
-
地址/数据总线 (AD15-AD0) 与高位地址/状态总线 (A19/S6-A16 /S3):
-
时分复用功能体现:在这一个T状态,这些引脚的功能是 地址总线。
-
CPU将20位物理地址的高4位(A19-A16)送到 A19/S6-A16/S3 引脚上。
-
同时,将地址的低16位(A15-A0)送到 AD15-AD0 引脚上。
-
图中 ② 和 ④ 标示的 “地址输出” 准确描述了此刻总线的状态。
-
地址锁存允许 (ALE):
-
ALE信号变为高电平,并在T1周期结束前变为低电平(如图中 ③ 所示)。
-
关键作用:ALE的 下降沿 是一个重要的控制信号,它通知外部的地址锁存器(如 74LS373)将 AD15-AD0 和 A19/S6-A16/S3 总线上的地址信息锁存起来。这一步至关重要,因为它 “解复用” 了地址,使得地址信息在整个总线周期内都保持有效,即使这些引脚在后续T状态中改变了功能。
-
其他控制信号:
-
M/:根据访问目标置位。如果要读取内存,此信号置为高电平;若读取I/O端口,则置为低电平(如图中 ② 所示)。
-
(Bus High Enable):根据访问的数据类型(字节或字)输出相应电平。
-
DT/ (Data Transmit/):此信号被置为低电平(接收模式),为后续的数据读入做准备(如图中 ⑤ 所示)。
T2 状态:读准备阶段
进入T2状态,CPU完成了地址的发送,现在开始为读取数据做准备。
-
地址/数据总线 (AD15-AD0):
-
时分复用功能体现:CPU停止输出地址,并将这些引脚置于高阻态(浮空),准备作为数据输入端。此时总线的控制权交给了外部的存储器或I/O设备。
-
高位地址/状态总线 (A19/S6-A16/S3):
-
时分复用功能体现:这些引脚也停止输出地址,转而输出CPU的内部状态信息S6-S3(如图中 ⑧ “状态输出” 所示)。
-
读信号 ():
-
这是T2状态最重要的动作之一。 信号被CPU置为低电平(有效),正式向被选中的存储器或I/O设备发出 **读命令 **(如图中 ⑨ 所示)。
-
数据使能 ():
-
信号也被置为低电平(有效),它用于使能外部的数据总线收发器(如 8286),将数据从外部设备传送到CPU的数据总线上(如图中 ⑩ 所示)。
T3 状态:数据读取阶段
T3状态是数据传输的核心阶段。
-
地址/数据总线 (AD15-AD0):
-
收到 信号后,被选中的存储芯片或I/O接口会将数据放到 AD15-AD0 总线上。
-
CPU会在T3周期的末尾从总线上读取(采样)这些数据。图中的 ⑪ 标示为“状态输入”,更准确地理解应为 “数据输入”。
-
等待周期 (TW):
-
如果CPU连接的存储器或I/O设备速度较慢,无法在T3结束前准备好数据,它可以通过READY引脚(图中未画出)通知CPU。
-
CPU检测到READY信号为低后,会在T3和T4之间自动插入一个或多个等待周期 TW。在 TW 期间,总线上所有的信号状态都保持不变,直到READY信号变为高电平,CPU才会在下一个时钟周期进入T4。
T4 状态:读周期结束阶段
在T4状态,CPU完成数据的内部锁存,并结束本次总线周期。
- CPU内部动作:CPU已经成功获取数据。
- 控制信号恢复:
- 信号恢复为高电平(无效),结束读命令。
- 信号也恢复为高电平,关闭数据总线收发器。
- 所有总线引脚(地址、数据、控制)都为下一个总线周期的开始做准备。
总结表:8086读周期信号变化
| 信号 | T1 状态 | T2 状态 | T3 状态 | T4 状态 |
|---|---|---|---|---|
| A/S, A/D | 输出地址 | S:输出状态, D:高阻态 | D: 输入数据 | 变为无效/高阻 |
| ALE | 高电平 → 低电平 | 低电平 | 低电平 | 低电平 |
| M/ | 输出高/低电平 | 保持 | 保持 | 变为无效 |
| 高电平 | 变为低电平 | 保持低电平 | 变为高电平 | |
| DT/ | 低电平 | 保持低电平 | 保持低电平 | 变为高电平或浮空 |
| 高电平 | 变为低电平 | 保持低电平 | 变为高电平 |
8086 CPU与8088 CPU的引脚功能差异
8086和8088在内部结构和指令系统上几乎完全相同,主要区别在于外部总线接口,这导致了引脚功能的差异。
| 特性/引脚 | 8086 CPU | 8088 CPU |
|---|---|---|
| 外部数据总线 | 16位 | 8位 |
| 地址/数据复用线 | AD0 - AD15 (16根) | AD0 - AD7 (8根) |
| (高字节使能) | 有,用于控制对高8位数据总线的访问。 | 无,因为只有8位数据总线。 |
| M/ | 有,高电平访存,低电平访IO。 | 引脚功能类似但名称和逻辑可能不同(如IO/)。 |
TDM (Time Division Multiplexing) 时分复用概念
时分复用是一种在同一物理信道上交替传输不同信号的技术。8086 CPU为了减少引脚数量,在部分引脚上采用了时分复用技术。
- AD0-AD15 地址/数据线时分复用 :在总线周期的T1时刻,这些引脚传输16位地址信息的低16位(A0-A15)。在T2至T4时刻,它们则用作16位数据线(D0-D15)。通过ALE信号,可以在T1时刻将地址锁存到外部锁存器中。
- A16/S3-A19/S6 地址/状态线时分复用:在总线周期的T1时刻,这些引脚传输20位地址信息的高4位(A16-A19)。在后续时刻,它们输出CPU的内部状态信息(S3-S6)。
8086 CPU主要控制信号引脚定义与作用
| 引脚 | 全称/含义 | 功能作用 |
|---|---|---|
| M/ | Memory/ | 存储器/输入输出选择信号。高电平表示访问存储器,低电平表示访问I/O接口。 |
| Read | 读信号(低电平有效)。当其为低电平时,表示CPU正在执行读操作。 | |
| Write | 写信号(低电平有效)。当其为低电平时,表示CPU正在执行写操作。 | |
| ALE | Address Latch Enable | 地址锁存允许信号。在其下降沿,外部地址锁存器会锁存地址/数据总线上的地址信息。 |
| DT/ | Data Transmit/ | 数据发送/接收信号。高电平表示CPU向外发送数据(写),低电平表示CPU接收数据(读)。 |
| Data Enable | 数据使能信号(低电平有效)。用于控制外部数据总线收发器的开关,允许数据在CPU和外部设备间传输。 | |
| Bus High Enable | 高字节使能信号(低电平有效)。它与地址线A0配合,用于选择访问高8位数据总线。 |
8086 CPU的奇偶地址与存储体结构
8086 CPU的1M字节存储空间在物理上被划分为两个独立的512KB的存储体(Bank):
- 偶地址存储体 (Low Bank):连接到数据总线的低8位 (D7-D0)。存放所有地址末位为0的字节(如00000H, 00002H, 00004H…)。此存储体由地址线 A0 控制,当A0=0时被选中。
- 奇地址存储体 (High Bank):连接到数据总线的高8位 (D15-D8)。存放所有地址末位为1的字节(如00001H, 00003H, 00005H…)。此存储体由信号 (Bus High Enable) 控制,当=0时被选中。
CPU通过组合使用 A0 和 信号,可以实现对单个字节(偶地址或奇地址)或一个字(必须从偶地址开始)的灵活访问。
| A0 | 访问类型 | 数据线 | 描述 | |
|---|---|---|---|---|
| 1 | 0 | 读/写 偶地址 的一个字节 | D7-D0 | 选中低8位存储体。 |
| 0 | 1 | 读/写 奇地址 的一个字节 | D15-D8 | 选中高8位存储体。 |
| 0 | 0 | 读/写一个 字 (Word) | D15-D0 | 同时选中高、低两个存储体,在一个总线周期内完成16位数据的传输。注意:字的地址必须是偶数。 |
| 1 | 1 | (未使用) | - | 这种组合在8086中没有定义操作。 |
重要概念:
- 字对齐:当一个16位的字(Word)存放在一个偶地址开始的连续两个字节中时(如地址00002H和00003H),8086可以在一个总线周期内完成读写。
- 非对齐 :如果试图访问一个从奇地址开始的字(如00003H和00004H),CPU需要执行两个总线周期:第一个周期读取奇地址的字节(高字节),第二个周期读取下一个偶地址的字节(低字节),效率大大降低。因此,在编程中应尽量保证字数据对齐在偶地址上。
8086 CPU的20根地址线与1M寻址空间
8086 CPU有20根地址线(A0-A19),因此其可寻址的存储单元个数为 220 = 1,048,576个。由于每个存储单元存放一个字节,所以8086的寻址空间为1MB。地址范围为 00000H 到 FFFFFH。
8086 CPU的指令执行与数据处理
CPU的核心工作是根据用户程序顺序执行指令,并对操作数进行各种处理,包括算术运算(加减乘除)、逻辑运算(与或非异或)以及格式转换等。
8086 CPU的编程结构:EU与BIU
为了提高效率,8086采用了流水线设计,将内部结构划分为两个独立工作的单元:
- EU (Execution Unit) 执行单元:负责指令的译码和执行。它包含算术逻辑单元(ALU)、通用寄存器和标志寄存器。
- BIU (Bus Interface Unit) 总线接口单元:负责CPU与存储器或I/O接口之间的所有数据传输。它包含段寄存器、指令指针、地址加法器和一个6字节的指令预取队列。
EU执行单元的通用寄存器
EU内部有8个16位的通用寄存器,其中前四个还可以作为两个独立的8位寄存器使用。
| 寄存器 (16位) | 高8位 | 低8位 | 名称 | 主要用途 |
|---|---|---|---|---|
| AX | AH | AL | 累加器 | 用于算术运算、逻辑运算和I/O操作。 |
| BX | BH | BL | 基址寄存器 | 常作为存储器寻址的基址。 |
| CX | CH | CL | 计数寄存器 | 在循环和串操作指令中用作计数器。 |
| DX | DH | DL | 数据寄存器 | 在乘除法中存放部分操作数或结果,或存放I/O端口地址。 |
| SP | - | - | 堆栈指针 | 指向堆栈段的栈顶。 |
| BP | - | - | 基址指针 | 用于在堆栈段中寻址。 |
| SI | - | - | 源变址寄存器 | 在串操作中指向源操作数。 |
| DI | - | - | 目标变址寄存器 | 在串操作中指向目的操作数。 |
BIU总线接口单元的专用寄存器
BIU使用6个16位专用寄存器来管理存储器分段和指令流。
| 寄存器 | 名称 | 功能 |
|---|---|---|
| CS | 代码段寄存器 | 存放当前执行指令所在的代码段的段地址。 |
| DS | 数据段寄存器 | 存放当前使用的数据段的段地址。 |
| SS | 堆栈段寄存器 | 存放堆栈段的段地址。 |
| ES | 附加段寄存器 | 作为辅助的数据段寄存器,用于访问额外的数据区。 |
| IP | 指令指针寄存器 | 存放下一条要执行指令在代码段内的偏移地址。CS和IP共同决定了下一条指令的物理地址。 |
| FLAG / PSW | 标志寄存器 / 程序状态字 | 记录CPU运算结果的状态信息(如进位、零、符号等)和控制CPU执行的标志(如中断允许、方向标志等)。 |