? 2.1 8086CPU的内部结构
2.2 8086对主存储器的分段管理
2.3 8086微处理器的引脚及工作模式第 2章 16位微处理器 8086
第 2章 16位微处理器 8086
教学重点
寄存器的结构
存储器组织
逻辑地址到物理地址的变换
8086的两种工作模式及其配置教学难点
8086CPU在最小模式和最大模式下的引脚功能
2.1 8086CPU的内部结构一,8086CPU内部结构从功能上看,可以分为两大部分:
1.总线接口部件 BIU (Bus Interface Unit)
2,执行部件 EU (Execution Unit)。
8086CPU内部结构框图见图 2-1所示 。
总线接口单元 BIU:
主要负责物理地址的形成,
预取指令,指令队列排队,读 /
写操作数和总线控制 。
执行单元 EU:
主要负责指令译码和执行 。
二,8086CPU内部寄存器结构
8086内部寄存器有:
执行单元 EU 8个通用寄存器
1个指令指针寄存器
1个标志寄存器
4个段寄存器
1,8086的通用寄存器
8086的 16位通用寄存器是:
AX BX CX DX
SI DI BP SP
其中前 4个数据寄存器都还可以分成高 8位和低 8位两个独立的寄存器 。
8086的 8位通用寄存器是:
AH BH CH DH
AL BL CL DL
对其中某 8位的操作,并不影响另外对应 8位的数据 。
数据寄存器
数据寄存器用来存放计算的结果和操作数,也可以存放地址 。
每个寄存器又有它们各自的专用目的:
AX--累加器,使用频度最高,用于算术,逻辑运算以及与外设传送信息等;
BX--基址寄存器,常用做存放存储器地址;
CX--计数器,作为循环和串操作等指令中的隐含计数器;
DX--数据寄存器,常用来存放双字长数据的高
16位,或存放外设端口地址 。
变址寄存器
变址寄存器常用于存储器寻址时提供地址:
SI是源变址寄存器
DI是目的变址寄存器
串操作类指令中,SI和 DI具有特别的功能 。
指针寄存器
指针寄存器用于寻址内存堆栈内的数据 。
SP为堆栈指针寄存器,指示栈顶的偏移地址 。
SP不能再用于其他目的,具有专用目的 。
BP为基址指针寄存器,表示数据在堆栈段中的基地址 。
SP和 BP寄存器与 SS段寄存器联合使用以确定堆栈段中的存储单元地址 。
2,段寄存器
DS 数据段寄存器 (Data Segment)
CS 代码段寄存器 (Code Segment)
ES 附加段寄存器 (Extra Segment)
SS 堆栈段寄存器 (Stack Segment)
这些段寄存器的内容与有效的地址一起,用于确定内存的物理地址。通常用 CS、
DS,ES以及 SS用于确定代码段、数据段、
附加段以及堆栈段的基地址。
3.指令指针 IP
指令指针寄存器 IP,指示代码段中指令的偏移地址 。
它与代码段寄存器 CS联用,确定下一条指令的物理地址 。
计算机通过 CS,IP寄存器来控制指令序列的执行流程 。
IP寄存器是一个专用寄存器 。
4,标志寄存器
标志 ( Flag) 用于反映指令执行结果或控制指令执行形式 。
8086处理器的各种标志形成了一个 16
位的标志寄存器 FLAGS( 程序状态字
PSW寄存器 ) 。
OF
1115 12
DF
10
IF
9
TF
8
SF
7
ZF
6 5
AF
4 3
PF
2 1
CF
0
程序设计需要利用标志的状态标志的分类
6个状态标志:用来记录程序运行结果的状态信息,许多指令的执行都将相应地设置它的状态 。 共有 6个状态标志位:
CF ZF SF PF OF AF
3个控制标志:可由程序根据需要用指令设置,用于控制处理器执行指令的方式
DF IF TF
进位标志 CF( Carry Flag)
当运算结果的最高有效位有进位 ( 加法 ) 或借位 ( 减法 ) 时,进位标志置 1,即 CF = 1;
否则 CF = 0。
49H + 6DH= B6H,没有进位,CF = 0
BBH + 6AH= ( 1) 25H,有进位,CF = 1
零标志 ZF( Zero Flag)
若运算结果为 0,则 ZF = 1;
否则 ZF = 0
49H + 6DH= B6H,结果不是零,ZF = 0
75H + 8BH= ( 1) 00H,结果是零,ZF = 1
注意,ZF为 1表示的结果是 0
符号标志 SF( Sign Flag)
运算结果最高位为 1,则 SF = 1;否则
SF = 0
有符号数据用最高有效位表示数据的符号所以,最高有效位就是符号标志的状态
49H + 6DH= B6H,结果不是零,ZF = 0
75H + 8BH= ( 1) 00H,结果是零,ZF = 1
奇偶标志 PF( Parity Flag)
当运算结果最低字节中,1”的个数为零或偶数时,PF = 1;否则 PF = 0
3AH + 7CH= B6H= 10110110B
结果中有 5个 1,是奇数,PF = 0
PF标志仅反映最低 8位中,1”的个数是偶或奇,即使是进行 16位字操作溢出标志 OF( Overflow Flag)
若算术运算的结果有溢出,
则 OF= 1;否则 OF= 0
49H + 6DH = B6H,产生溢出,OF = 1
75H + 8BH = ( 1) 26H,没有溢出,OF = 0
什么是溢出?
处理器内部以补码表示有符号数
8位补码表达的整数范围是:+ 127~- 128
16位补码表达的范围是:+ 32767~- 32768
如果运算结果超出这个范围,就产生了溢出
有溢出,说明有符号数的运算结果不正确
49H+ 6DH= B6H,就是 73+ 109= 182,
已经超出- 128~+ 127范围,产生溢出,故 OF= 1;
另一方面,补码 B6H表达真值是 -74,显然运算结果也不正确。
溢出和进位
溢出标志 OF和进位标志 CF是两个意义不同的标志 。
进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确 。
溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确 。
请看例子溢出和进位的对比例 1,49H + 6DH= B6H
无符号数运算,73+ 109= 182
范围内,无进位有符号数运算,73+ 109= 182
范围外,有溢出例 2,BBH + 6AH= ( 1) 25H
无符号数运算,187+ 106= 293
范围外,有进位有符号数运算,- 69+ 106= 37
范围内,无溢出溢出的判断
判断运算结果是否溢出有一个简单的规则:
只有当两个相同符号数相加 ( 包括不同符号数相减 ),而运算结果的符号与原数据符号相反时,产生溢出,因为,此时的运算结果显然不正确 。
其他情况下,则不会产生溢出辅助进位标志 AF( Auxiliary Carry Flag)
49H + 6DH= B6H,D3有进位,AF = 1
运算时 D3位 ( 低半字节 ) 有进位或借位时,AF = 1;否则 AF = 0。
这个标志主要由处理器内部使用,
用于十进制算术运算调整指令中,用户一般不必关心 。
方向标志 DF( Direction Flag)
用于串操作指令中,控制地址的变化方向:
设置 DF= 0,存储器地址自动增加;
设置 DF= 1,存储器地址自动减少 。
CLD指令复位方向标志,DF= 0
STD指令置位方向标志,DF= 1
中断允许标志 IF( Interrupt-enable Flag)
用于控制外部可屏蔽中断是否可以被处理器响应:
设置 IF= 1,则允许中断;
设置 IF= 0,则禁止中断 。
CLI指令复位中断标志,IF= 0
STI指令置位中断标志,IF= 1
陷阱标志 TF( Trap Flag)
用于控制处理器进入单步操作方式:
设置 TF= 0,处理器正常工作;
设置 TF= 1,处理器单步执行指令 。
单步执行指令 —— 处理器在每条指令执行结束时,便产生一个编号为 1的内部中断
这种内部中断称为单步中断
所以 TF也称为单步标志
利用单步中断可对程序进行逐条指令的调试
这种逐条指令调试程序的方法就是单步调试
DEBUG中各标志位的符号表示标志位名 置位符号 (=1) 复位符号 (=0)
溢出标志 OF OV NV
方向标志 DF DN UP
中断标志 IF EI DI
符号标志 SF NG PL
零标志 ZF ZR NZ
辅助标志 AF AC NA
奇偶标志 PF PE PO
进位标志 CF CY NC
2.2 8086对主存储器的分段管理一,主存储器的分段机构
8086CPU有 20条地址线
最大可寻址空间为 220= 1MB
物理地址范围从 00000H~ FFFFFH
8086CPU将 1MB空间分成许多 逻辑段 ( Segment)
每个段最大限制为 64KB
段地址的低 4位为 0000B
这样,一个存储单元除具有一个唯一的 物理地址 外,还具有多个 逻辑地址物理地址和逻辑地址
对应每个物理存储单元都有一个唯一的 20 位编号,就是物理地址,从
00000H~ FFFFFH。
分段后在用户编程时,采用逻辑地址,
其形式为:
段基地址,段内偏移地址分隔符逻辑地址
段基地址 说明逻辑段在主存中的起始位置 。
8086规定段地址必须是模 16地址,xxxx0H。
省略低 4位 0000B,段地址就可以用 16位数据表示,就能用 16位 段寄存器 表达段地址 。
偏移地址 说明主存单元距离段起始位置的偏移量 。
每段不超过 64KB,偏移地址也可用 16位 数据表示 。
物理地址和逻辑地址的转换
将逻辑地址中的段地址左移 4位,加上偏移地址就得到 20位物理地址 。
一个物理地址可以有多个逻辑地址 逻辑地址 1460:100,1380:F00
物理地址 14700H 14700H
14600H
+ 100H
14700H
13800H
+ F00H
14700H
段地址左移 4位加上偏移地址得到物理地址
8086对存储器的访问(图 2- 6)
二,8086存储器的结构
8086的 1MB存储空间分成两个存储体。
偶地址存储体和奇地址存储体,各为 512K字节,如图 2-7所示。 CPU用 A0来区分两个存储体,并提供奇地址存储体有效信号 /BHE,配合地址线 A0来决定是访问偶地址 (低字节 ),
还是奇地址 (高地址 )或是整个字。
当 A0=0时,选择偶地址存储体 。 偶地址存储体与数据总线的低 8位 ( D7~ D0) 相连,所以从低 8位数据总线读 /写一个字节 。 当 /BHE=0时,
选择访问奇地址存储体,奇地址存储体与数据总线高 8位 ( D15~ D8) 相连,所以由高 8位数据总线读 /写一个字节 。 当 A0=0,/BHE=0时,
访问两个存储体,读 /写一个字 。 /BHE与 A0的组合如表 2-2所示 。
2.3 8086微处理器的引脚及工作模式一,8086CPU的引脚及其功能
8086CPU的 40条引脚信号可按功能分可分为四类,
它们是:
地址总线数据总线控制总线其它 (时钟与电源 )。
1.最小模式和最大模式概念
(1)最小模式,
在系统中只有一个微处理器。
(2)最大模式:
两个或多个微处理器(主处理器、协处理器)
2.8086的引脚信号
( 1)最小模式( MN/MX接+ 5V)
① AD15~ AD0,地址 /数据总线
② A19/S6~ A16/S3,地址 /状态总线
③ BHE/ S7,高 8位数据允许 /状态线
④ MN/MX,最小 /最大模式控制信号,输入
⑤ RD,读信号
⑥ WR,写信号
⑦ M/IO,存储器 /输入输出控制信号
⑧ ALE,地址锁存允许信号
⑨ READY(Ready),准备就绪信号
⑩ INTR,可屏蔽中断请求信号
INTA,中断响应信号
NMI,非屏蔽中断请求信号
RESET,系统复位信号
DEN,数据允许信号
DT/R,数据发送 /接收控制信号
HOLD,总线保持请求信号输入
HLDA,总线保持响应信号
TEST,测试信号
CLK,时钟输入信号
VCC(+5V),GND
( 2)最大模式( MN/MX接地)
8086 CPU工作在最大模式时,其 24~ 31引脚需重新定义,
如表 2-4所示。
① QS1/QS0,指令队列状态信号。
② S2,S1,S0,总线周期状态信号。
③ LOCK,总线封锁信号。
④ RQ/GT1和 RQ/GT0,总线请求信号输入 /总线请求信号允许输出。
二,8086在最小和最大模式下的典型配置
1.8086最小工作模式的典型配置在最小工作模式系统配置中,除了 8086CPU
外,还需要在外围电路中加入:
· 1片 8284A,作为时钟发生器 。
· 3片 8282(8位锁存器 )或 74LS373,作为地址锁存器 。
· 2片 8286/8287或 74LS245,作为双向总线收发器,以增加数据总线的驱动能力 。
2.8086最大工作模式的典型配置从图 2-9和图 2-10中可以看出,8086CPU在最大模式和最小模式之间的主要区别是:在最大模式下,
需要增加一个转换控制信号的电路,用来对 CPU
发出的控制信号进行变换和组合,即 8288总线控制器 。
8288接受 8086CPU的状态信号 S2,S1和 S0,经过变换和组合,由 8288产生并发出对存储器或 I/O端口的读 /写信号,产生和发出对地址锁存器 8282
及总线收发器 8286的控制信号等 。
第 2章 教学要求
1,掌握 8086CPU的内部结构
2.掌握 8086CPU对存储器的分段管理的基本概念
3,掌握 8086的寄存器组和存储器组织
4,掌握 8086CPU的两种工作模式
习题 2
2.1 2.3 2.4 2.6 2.7 2.8 2.9