封面
基本概念 (总线、堆栈等 )
微处理器的一般结构
Intel 8086微处理器的结构本章内容
了解三总线及堆栈的工作原理 。
掌握微处理器的一般结构,算逻部件 ALU,寄存器结构,控制部件 。
重点掌握 Intel 8086微处理器的结构 。
学习目的
3.1 基本概念一、总线
1,总线的由来在计算机中,CPU与其他功能部件之间存在大量的信息交流,其间就需要使用通信线路连接起来,通信线的设置和连接可采用两种方式 。
(1) 专线式,将各个功能部件分别设置与其他部件通信的线路,
优点,传送速率高,它只受传送线本身的限制,且控制简单 。
缺点,机器所需要的信息传送线数量大,
增加了复杂性,不便于实现机器的模块和积木化 。
(2) 总线式,在多个功能部件之间设置公共的通信线即总线 。
图中当 A和 A'门打开时,信息由 A传至
A'; A和 C '门打开时,信息便从 A传至 C ' 。
A
B
C
A'
B'
C'
总 线 示 意 图
总线上能同时传送二进制信息的位数称为总线宽度 。 见下图 。
由于采用了分时传送的总线结构从而大大减少了机器中信息传送线的数目 。
a,分时传送:
多个部件并联在总线上,某一时刻,只允许一路信息在总线上传送 。
b,控制复杂,
总线的发送端及接收端均有三态门电路 。
打开三态门信息经总线传送到目的端 。
若不传送信息,则使三态门处于高阻状态,
相当于此部件在逻辑上与总线脱离联系 。
c,系统结构简单,便于扩展 。
特点:
2,总线的分类总线按信息传送的 方向 可分为 单向总线 和 双向总线 。
单向总线 只能向一个方向发送信息 。
双向总线 则可在两个方向传送 。
总线 按所传信息的类别,通常分为 数据总线,地址总线 和 控制总线 。
(1) 数据总线 (Data Bus)
是 微处理器 与 存储器 和 I/O电路 间数据交换的通道,可 双向 传送 。 数据总线的宽度 一般与微处器处理数据的 字长 相同,
三状态 。
(2) 地址总线 (Address Bus)
是微处理器 输出地址 用的总线,它将地址送到存储器或 I/O电路,用来确定存储器中信息存放的地址或 I/O电路的地址,
AB一般为单向,三状态 。
(3) 控制总线 (Control Bus)
是用来传送 控制信号,使各功能部件动作同步 。
(1) 片内总线指微处理器内部各 逻辑单元之间 的传输线,主要是数据总线,是为算术逻辑部件 ALU和 寄存器 之间传送操作数和结果而设计的 。 有 单总线,双总线,三总线 结构之分 。
总线按 规模,用途 及 应用场合 又可分为以下几种:
(2) 芯片总线指微型机中各功能 芯片之间 的传输线,
又称 元件级总线 。 是构成一块 CPU插板或组成一个微机小系统时常用的总线 。
(3) 内总线指微型机内连接各插件板的总线,
又称 板级总线 或 系统总线 。 其标准很多,现列举几种常用的标准总线 。
a,S-100系统总线:
是一种 实用性 微型机总线标准,具有
100根引线,主要支持 8bit微处理器,1979
年美国的 IEEE微处理机标准委员会修改后取名为 IEEE-696标准总线 。
b,MULTIBUS多总线:
是多于一个控制单元控制的总线,由
Intel公司推出,MULTIBUS-I支持 8bit,16bit
微处理器,MULTIBUS-II支持 32bit微处理器,
1987年经 IEEE微处理机标准委员会审定为
IEEE-P1296标准总线 。
c,STD总线:
是美国 PRO-LOG公司和 MOSTEK公司于 1978年联合推出的工业控制标准总线,共有 56根信号线,是 8bit/16bit兼容总线 。
d,PC总线及 EISA总线:
是美国 IBM公司推出针对 Intel-8086微处理器设计的,共有 62根信号线 。 为了与 Intel-80286
等高性能 16bit微处理器兼容,IBM公司在 PC总线上增加了一个 36引脚的扩展插座而形成 AT 总线,这种结构称之为 IBM公司标准结构,简称
ISA(Industrial Standard Architecture),COMPAQ
公司推出了扩展工业标准总线,即 EISA(Extend
Industry Standard Architecture)总线 。 是支持 32bit
的标准总线 。
e,VME总线:
是美国 MOTOROLA公司于 1981年提出,针对 16bit和 32bit微处理器设计的 。 该总线在采用单总线连接器时为 96条信号线,支持 16bit数据线,24bit地址线;双总线连接器结构则支持
32bit,此时信号线为 128条,可支持四个主 CPU
模板进行运行 。
(4) 外总线指微型计算机系统与系统之间或微机系统与外部设备之间的通信线,又称 通信总线 。
CPU与外部设备的基本通信方式有两种:
a,并行通信,数据各位同时传送,有多少位数据就有同样数量的传送线 。
b,串行通信,数据逐位顺序传送,适宜长距离传送 。
二、堆栈用作数据暂时存储的一组 寄存器 或 存储单元 称为堆栈 。
堆栈操作有两种,压入 (PUSH)和弹出 (POP),
而 SP始终指向堆栈栈顶的新位置 。
1,堆栈的定义
堆栈中数据按,后进先出,的结构方式进行处理,即新入栈的依次堆放在原来数据之上,
存放信息的最后一个单元叫做 栈顶,用堆栈指针 SP(Stack Pointer)指示 。
2,堆栈编址结构的两种形式
(1) 向上生成该结构中,每 压入 一个数据,堆栈指示器 SP按 增量 修改,每 弹出 一个数据,SP
按 减量 修改 。
(2) 向下生成该结构中,每 压入 一个数据,SP按 减量 修改,每 弹出 一个数据,SP按 增量 修改 。
3,构成堆栈的两种形式一种是使用微处理器内部的 一组寄存器 作为堆栈。
优点,访问速度快。
缺点,寄存器数量有限。
另一种形式是在 随机存储器 RAM中开辟一个区间供堆栈使用,较为普遍;若编址采用向下生成,其堆栈操作如下图所示 。
堆栈操作示意图 (向下生成 )
M- 3
M- 2
M- 1
MXSP
(a)
M- 3
M- 2
M- 1
MX
SP
(b)
A
M- 3
M- 2
M- 1
MX
SP
(c)
A
BSP
A
SP B
SP C
当前栈顶地址为 M,
存内容 X
信息 B进栈,SP?SP- 1,
SP指定的地址?B
信息 A进栈分两步操作,SP?SP- 1,SP
指定的地址单元?A
堆栈操作示意图 (向下生成 )
M
M- 3
M- 2
M- 1
X
SP
(d)
A
B
C M- 3
M- 2
M- 1
MX
SP
(f)
A
B
CM- 3
M- 2
M- 1
MX
SP
(e)
A
C
B SP DSP SP
信息 C进栈 信息 C出栈分两步操作:指定的目的地?C,SP?SP+1
信息 B出栈:指定目的地?B,
SP SP+1
堆栈操作示意图 (向下生成 )
M
M- 3
M- 2
M- 1
X
SP
(g)
A
D
C M- 3
M- 2
M- 1
MXSP
(i)
A
D
CM- 3
M- 2
M- 1
MX
SP
(h)
A
C
DSP
SP
信息 D进栈,SP?SP- 1,
SP指定的地址?D
信息 D出栈 信息 A出栈,栈顶地址仍为 M
由上图中可以看出,出栈操作并不会从堆栈中去掉信息,也不擦除它们,只是因 SP
的自动修改而改变了堆栈的栈顶 。
堆栈主要用于中断控制,子程序调用以及数据暂时存储 。
3.2 微处理器的一般结构传统的微处理器结构由 算术逻辑部件
ALU,控制电路 及 寄存器阵列 三大部分组成,如下图所示 。
指令寄存器 IR
译码器 ID
操作控制器 PLA
控制信号片内数据总线通用寄存器组变址寄存器
PC程序计数器
SP堆栈指示器标志寄存器
FR
地址缓冲器芯片地址总线数据缓冲器芯片数据总线累加器 暂存器
ALU?
微处理器一般结构框图一、算术逻辑部件 ALU (Arithmetic Logic
Unit)
ALU是执行算术运算,逻辑运算及移位的装置 。
ALU有两个输入端,一个与累加器相连,另一端与暂存器相连,用于存放参加运算的两个数 。
ALU的输出端也有两个,一端将操作结果送回到内部总线再送回累加器,另一端用于输出表示操作结果特征的标志信息 。
二、寄存器阵列一般包括通用寄存器,累加器,标志寄存器,专用寄存器等 。 寄存器的使用提升了计算机的功能和程序设计的灵活性 。
1,通用寄存器组可用于存放数据和地址,有 8bit和 16bit等,
CPU可直接处理这些信息,减少了访问存储器的次数,节省访问内存时间 。
2,累加器也是数据寄存器,与 ALU一起完成各种算术或逻辑运算,运算前作为 ALU的一个输入,
运算后常用于保存结果 。
CPU对 I/O接口电路的读出或写入一般也是通过累加器进行的 。
3,标志寄存器在算术或逻辑运算时,为了保存可能发生的 进位,溢出,符号,全零 及 奇偶性等状态的变化,微处理器设置标志寄存器 。
其所存的状态将可作为一种条件,常用于判断是否控制程序转移 。
4,专用寄存器
(1) 程序计数器 PC (Program Counter)
它是 指令地址寄存器,其内容指出了现行指令在存储器中的存放地址 。
注,当按 PC的内容从存储器中取出指令时,PC
的内容自动加 1。
对单字节指令而言,则 PC指向了下一条指令所在的地址 。
对多字节指令,则每取一个字节,PC自动加
1,当取出最后一个指令字节时,PC仍指向下一条指令地址 。
(2) 堆栈指示器 SP (Stack Pointer)
用于确定堆栈在内存中的具体位置 。
SP总是指向 栈顶 。
(3) 变址寄存器用于变址寻址,也可作通用寄存器 。
三、控制部件是整个系统按时序协调操作的功能部件,包括 IR,ID定时及产生各种控制信号的控制逻辑单元组成 。
根据上述结构,微处理器执行一条指令的简要过程,如下图所示 。
取 指 令指 令 译 码取 操 作 数执 行 指 令存放运算结果微处理器执行一条指令的简要过程
(1) PC将指令地址经地址缓冲器送到 CPU
外部地址总线,然后送到存储器进行地址译码 。
图中取指令包含以下几个步骤:
(2) PC+1→PC,同时 CPU发出,存储器读,。
信号,访问存储器中某一单元 。
(3) 经过几百 ns,在外部数据总线上出现指令的第一个字节,即操作码,经由
CPU内部数据缓冲器?内部总线?指令寄存器 。
(4) 对于多字节指令,控制部件还会发出取第二,第 三 等 字 节 的 信 号,每次
PC+1→PC
3.3 程序指令的执行过程人们事先把一条条指令预选输到存储器中,在执行时,机器把这些指令一条条地取出来,加以翻译和执行 。
例如,若要求机器把两个数 7和 10相加,其简单程序为:
MOV AL,7 B0
ADD AL,10 04
HLT F4
7
0A
逐条按机器码表示在右边,共 5个字节,
若存放在地址为 00H开始连续 5个存储单元,
下面具体介绍其执行过程 。
第一条指令的取指过程。
0000 0000
0000 0000
1011 0000
0000 0111
0000 0100
0000 1010
1111 0100
1011 0000
O I2
ALU
I1
AL BL
PLA
ID
IR 1011 0000
DB
A
B
+1
……
EAB
C
AR
D读
F DR
00
01
02
03
04
G
PC
取第一条指令的操作示意图
00? 1011 0000
PC的内容 (00H)送
AR(Address Register)
PC + 1? PC (01H)
00H经 AB送至存储器,经地址译码器选中 00H单元。
CPU给出读命令。
(00H) = B0H 读至
DB(Data Bus)
0000
B0H送至 DR
(Data Register)
DR把 B0H送 IR经 ID
译码发出对应操作
取指令第二字节的过程如下图所示。
0000 0001
1011 0000
0000 0111
0000 0100
0000 1010
1111 0100
01
0000 0111
O I2
ALU
I1
AL0000 0111 BL
PLA
ID
IR
0000 0111
DB
A
B
+1
……
E
AB
C
AR
D读
F
DR
G
PC
10
0000 0001
取立即数的操作示意图
PC的内容
01H送 AR
PC + 1? PC (02H)
01H经 AB送至存储器,经地址译码选中 01H单元。
CPU发出读命令。
(01H) = 07H 读至 DB
07H送 DR
0000 0111
07H由 DR通过内部
DB送至 AL。
取第二条指令的第一个字节与第一条指令的第一个字节的取指过程相同 。 对此指令译码后,知为加法指令,AL的内容为一操作数,另一操作数在指令的第二字节中,其执行过程为:
(9) 相加结果由 ALU输出至 AL中,可类似取第三条指令 。
(7) DR中的数由内部 DB送到 ALU的另一输入端 。
(1)~ (6) 与第一条指令的第二字节的执行过程相同 。
(8) AL中的数送 ALU且执行加法操作 。
3.4 Intel 8086微处理器
8086是 Intel系列的 16bit微处理器,属第三代 。
8086有 16bit数据总线和 20bit地址线,可寻址
1M空间 。
8086采用单一 +5V电源和单相时钟,频率为
5MHZ。
20位
AH AL
BH BL
CH CL
DH DL
SP
BP
DI
SI
ALU
运算寄存器标志执行部件控制电路
16位
CS
DS
SS
ES
IP
内部暂存器
8位
1 2 3 4 5 6
执行部件
( EU)
输入 /输出控制电路
16位外部总线指令队列缓冲器总线接口部件( BIU)
通用寄存器 地址加法器一,8086CPU结构
1,总体功能结构
8086CPU的结构框图
8086从功能结构来讲,分为两大部分,即总线接口部件 BIU(Bus Interface Unit )和 执行部件 EU(Execution Unit)。
(1) BIU部件由 段寄存器,指令指针,地址加法器,
指令队列缓冲器 和 控制电路 等部分组成。
在执行指令时,如要取操作数,则也由 BIU从内存 或 I/O接口 指定区域取出,送给 EU部件去执行 。
BIU负责与存储器,I/O接口电路传送信息 。
BIU负责从指定内存单元取出指令,送到指令队列缓冲器中排队 。
指令队列缓冲器 是一个 6个字节 的 RAM存储器
(8088为 4个字节 ),队列中最多可同时存放 6个字节的指令,取来的指令是按字节顺序存放的 。
当队列中有两个以上的指令字节空的时候,
BIU会自动地执行总线操作,继续取指令 。
(2) EU部件由 ALU,通用寄存器,标志寄存器 和 控制电路 组成,负责指令的执行 。 ALU,寄存器和数据传输通路均是 16bit的 。
若执行的是一条 转移指令,则存放在指令队列缓冲器中的指令就没有用了,应到新的地址单元去取出 。 BIU新取出的第一条指令将直接送到 EU中去执行,随后重新填充指令队列缓冲器 。
EU从 BIU中的指令队列缓冲器中取得指令和数据 。
当指令要求将数据 写 到 存储器 和 I/O电路,
或需从 存储器 和 I/O电路 中 读 取数据时,EU
向 BIU发出请求,BIU自动完成这些操作 。
(3) 8086与传统微处理器指令执行过程比较取指 3 执行 3 取指 4?执行 2取指 2执行 1取指 1
传统微处理器的执行方式传统微处理器取指与执行串行进行,
CPU的工作效率低 。
取数据 取指 5取指 4取指 3取指 2取指 1BIU
执行 4执行 3执行 2执行 1等待EU
8086的指令执行方式
8086CPU取指与执行并行进行,大大减少了等待取指令所需时间,提高了 CPU
的工作效率 。
2,寄存器结构
8086CPU 内部寄存器
DLDH
CLCH
BLBH
ALAH
通用寄存器
AX
BX
CX
DX
SP
BP
SI
DI
数据寄存器
CS
DS
SS
ES
IP
FLAG
变址寄存器指针寄存器堆栈指针基数指针源变址目的变址指令指针状态标志代码段数据段堆栈段附加段段寄存器控制寄存器
(1) 通用寄存器
8个 16bit通用寄存器 。
SP— 堆栈指针,存放堆栈栈顶的现行地址,
与 SS堆栈段寄存器一起方可确定堆栈的实际地址 。
BP— 基址指针
SI— 源变址寄存器
AX,BX,CX,DX 4个 16bit的通用数据寄存器,它们的高 8bit AH,BH,CH,DH与低 8bit AL,BL,CL,DL又可分别看成 8个
8bit的寄存器 。
DI— 目的变址寄存器
(2) 控制寄存器
IP (Instruction Pointer) 指令指针与
PC类似,但有区别:
a,PC是指向下一条即将要执行的指令,而
IP一般是指向下一次要取出的指令 。
b,在 8086中 IP要与 CS代码段寄存器的内容一起,才能得到指令的实际地址 。
TF SF ZF AF PFOF DF IF CF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
标志寄存器格式
a,6个状态标志位,即 CF,PF,AF,ZF,SF和
OF。
进位标志 CF(Carry Flag):
FLAG(标志寄存器 )为 16bit,其中 9位有定义 。
当结果的最高位 (字节- D7,字- D15)产生进位 (加法运算 )或借位 (减法运算 )时,CF=1,
否则 CF=0,移位和循环指令也影响 CF。
奇偶标志位 PF(Parity Flag):
若结果中,1” 的个数为偶数,则 PF=1,
否则 PF=0。
辅助进位标志 AF(Auxitiary Carry Flag):
在低半字节向高半字节有进位或借位时
AF=1,否则 AF=0。
零标志 ZF(Zero Flag):
当运算结果为 0时 ZF=1,否则 ZF=0。
符号标志 SF(Sign Flag):
SF等于最高位,对于带符号数,最高位为符号位,SF=1运算结果为负,SF=0为正 。
溢出标志 OF(Overflow Flag):
带符号数运算结果超出其表达范围时 ( 字节数:
-128 ~ +127,字 类 型 数,-32768 ~ +32767 ),
OF=1,否则 OF=0。
用表达式给出
141515
677
溢出 CC
CC
OF
(字节运算 )
(字运算 )
例:① 2345H+3219H
② 6400H+7A3CH
CF=0 PF=0 AF=0 ZF=0 SF=0 OF=0
CF=0 PF=1 AF=0 ZF=0 SF=1 OF=1
b,3个控制标志位
追踪标志 TF(Trace Flag):
TF=1,处理器进入单步方式,以便调试,
CPU每执行一条指令自动产生一个内部中断以利于检查指令的执行情况; TF=0为连续工作方式 。
中断允许标志 IF(Interrupt-enable Flag):
IF=1,允许 CPU响应外部的可屏蔽中断请求; IF=0则禁止响应 。 IF对外部非屏蔽中断及内部中断不起作用 。
方向标志 DF(Direction Flag):
在串操作指令中,DF=0时,变址指针自动增量,DF=1时,则自动减量 。
(3) 段寄存器
CS— 代码段寄存器,用于定义代码段基地址,该段用于存放指令代码 。
DS— 数据段寄存器,用于定义数据段基地址,该段用于存放程序变量 。
有 4个 16bit的段寄存器
SS— 堆栈段寄存器,用于定义堆栈段基地址,
该段作堆栈区使用 。
ES— 附加数据段,用于定义附加段基地址,
与 DS类似 。
上述 4个段在 8086寻址的 1MB空间内,其位置不受限制,可连续排列,分隔排列,部分重叠甚致全部重叠 。
二、引脚信号及功能最小模式:即由 8086组成的单处理器系统,
所有的总线控制信号直接由 8086直接产生,
故系统中的总线控制逻辑电路被减到最少 。
最大模式:即由 8086组成的中等规模或者大型的系统 。 包含两个或多个微处理器,
8086为主处理器其它的为协处理器 。
8086的两种工作模式
8086采用双列直插式封装,有 40个引脚 (如右图所示 ),但总线信号数量却大于
40,故 8086采用了分时复用技术,部分引脚传送两种总线信号 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
GND
AD14
AD13
AD12
AD11
AD10
AD9
AD8
AD7
AD6
AD5
AD4
AD3
AD2
AD1
AD0
NMI
INTR
CLK
GND
VCC
AD15
A16/ S3
A17/ S4
A18/ S5
A19/ S6
BHE/ S7
MN/MX
RD
HOLD (RQ/GT0)
HLDA (RQ/GT1)
WR (LOCK)
M/IO (S2)
DT/R (S1)
DEN (S0)
ALE (QS0)
INTA (QS1)
TEST
READY
RESET
8086
CPU
8086的引脚信号注:括号内为该引脚在最大模式下的名称
8086芯片的引脚图
1,最小模式下引脚信号及功能:
(1) 地址 /数据总线 AD15~ AD0(双向、三态 )
在一个总线周期的第一个时钟周期用于传送低 16bit地址信息,并用地址锁存器锁存以免丢失,
其它时钟周期可用于传送数据信息,分时传送 。
当 8086执行中断响应周期,保持响应周期时,这些引脚处于高阻状态 。
(2) 地址 /状态信号线 A19/S6~ A16/S3(输出、三态 )
在总线周期的第一个时钟周期 (T1)用于输出地址信号的最高 4bit并锁存 。
其它时钟周期中用来输出状态信号 S6~ S3,
其中:
S6— 低电平,表示 8086当前与总线相连。
S5— 表示标志寄存器中“中断允许位”的状态
(IF)。
S4,S3的组合指出了分段情况。如下表所示。
S4和 S3的组合提供的分段信息表
S4 S3 意 义
0
0
1
1
0
1
0
1
当前正在使用 ES附加段当前正在使用 SS堆栈段当前正在使用 CS或者未使用任何段寄存器当前正在使用 DS数据段
当 CPU 处于,保 持 响 应,状态时,
A19/S6~ A16/S3置为高阻状态 。
若执行 I/O指令,则由于 8086只访问 64K个端口,在 T1周期这 4个引脚为低电平 。
(3) BHE/S7高 8bit数据总线允许 /状态线 (输出,三态 )
在 T1 状态,8086在 BHE/S7 引脚输出
BHE信号,表示高 8bit数据总线 D15~ D8上的数据有效,与地址线 A0一起产生存储器的选择逻辑信号 。
在其它时钟周期,输出为状态信号 S7。
但 8086芯片,S7未定义 。
下面介绍引脚中的控制信号。
(4) MN/MX最小 /最大模式控制信息低电平 — 8086处于最大模式。
高电平 — 8086处于最小模式。
(5) RD读信号 (输出,三态 )
低电平有效 。 表示将对内存或 I/O端口读操作 。
(6) M/IO,存储器 /输入输出控制信息
(输出,三态 )
是区分 CPU进行的存储器还是 I/O访问,
见下表。
RDM/IO 操 作
1
0
0
0
读存储器数据读 I / O端口数据
RD与 M/IO的组合及对应的操作表
(7) WR写信号 (输出,三态 )
1
0
0
0
CPU对存储器进行写操作
CPU对 I/O端口进行写操作
WR与 M/IO 的组合及对应的操作表操 作WRM/IO
低电平有效 。 WR与 M/IO的组合对应的操作如下表所示 。
(8) ALE地址锁存允许信号 (输出 )
高电平有效,此信号在 T1状态有效,为地址码锁存的选通信号,送地址锁存器 。
(9) READY准备就绪信号 (输入 )
高电平有效,是从所寻址的 存储器 或 I/O
电路 来的响应信号,用于解决 CPU与慢速存储器或 I/O电路的 同步问题 。 CPU在 T3周期开始采样 READY线,若为低电平,则 T3之后插入 TW等待周期 直到 READY为高电平,进入 T4完成数据传送 。
(10) INTR可屏蔽中断请求信号 (输入 )
高电平有效,8086在每一个指令周期的最后一个 T状态采样这条线,若 IF=1,则
8086在执行完当前指令即响应中断 。
(11) INTA中断响应信号 (输出,三态 )
低电平有效,CPU响应外部 可屏蔽中断请求以后,便发出中断响应信号,作为对中断请求的回答 。 此信号在每一个中断响应周期的 T2,T3和 TW周期均有效,为中断矢量的读选通信号 。
(12) NMI非屏蔽中断请求信号 (输入 )
边沿触发,该线上的中断请求信号不能用软件屏蔽,电平由低到高,便在当前指令结束后引起中断。
(13) RESET系统复位信号 (输入 )
高电平有效,8086要求此信号起码维持
4个时钟周期,若初次加电复位,持续时间不小于 50?s,RESET为高电平时,8086立即结束现行操作,进入内部复位状态,CPU各内部寄存器被设置为 初值,CS=FFFFH,Flag、
IP,DS,ES,SS及其它寄存器均初始化为
0000H。
(14) DT/ R数据收发控制信号 (输出、三态 )
为增强数据总线的驱动能力,8086可外接驱动器 8286,DT/R即为 8086输出的数据到收发器 8286的控制信号 。
DT/R— 高电平,8086输出的数据经 8286
送到数据总线;
8086工作在 DMA方式时,DT/R为高阻状态,
在最小模式时因无 8286而不起作用 。
DT/R— 低电平,收发器 8286则把数据总线上的数据传送到 8086。
高电平有效 。 系统中其他的总线主设备要获得对总线的控制权时,向 8086发出高电平的 HOLD信号,8086在每个时钟周期的上升沿对 HOLD引脚信号进行检测,若为高电平,
则在当前总线周期结束时,予以响应 。
(16) HOLD保持请求信号 (输入 )
(15) DEN数据允许信号 (输出,三态 )
低电平有效,也是 8086控制外接的数据收发器,低电平时开启收发器,传送数据有效;
高电平时,则禁止传送 。
(17) HLDA保持响应信号 (输出 )
高电平有效 。 当 CPU响应保持请求 HOLD时,
便发出 HLDA高电平的应答信号,从而将总线控制权让给发出保持请求的设备,直到该设备又将 HOLD信号变为低电平,CPU才收回总线控制权,将 HLDA信号置为低电平 。
低电平有效 。 与 WAIT等待指令结合使用,
当 CPU执行 WAIT指令时,CPU处于空转状态进行等待直到检测到 TEST信号有效时结束,
CPU继续往下执行指令 。
(18) TEST测试信号 (输入 )
(19) CLK系统时钟输入信号时钟信号为 CPU和总线控制逻辑电路提供定时基准 。 常用 INTEL8284A时钟发生器提供 CLK信号 。
工作在最小模式下
8086的典型配置如右图所示。
8086
地址锁存器
STB
(8286× 2)
OE
(选用 ) 数据总线地址总线
(8282× 3)
READY
RESET
MN/MX
ALE
BHE
A19~ A16
AD15~ AD0
DEN
DT/R
M/IO
WR
RD
HOLD
HLDA
INTR
INTA
(8284A)
X1 X2
CLK
READY
RESET
+5V
BHE
A19~ A0
D15~ D0
2,最大模式下引脚信号及功能若将 8086的 MN/MX引脚接地便工作在最大模式 。 此时仅 24— 31引脚信号与最小模式不同,如下表所示 。
引脚编号 最小模式 最大模式
24
25
26
27
28
29
30
31
QS1
QS0
S0
S1
S2
LOCK
RQ/GT1
RQ/GT0
INTA
ALE
DEN
DT/R
M/IO
WR
HLDA
HOLD
两种模式下 8086的 24~ 31引脚信号表
(1) QS1和 QS0指令队列状态信号 (输出 )
QS1和 QS0编码与队列状态表
QS1 QS0 队列状态
0
0
1
1
0
1
0
1
空操作取走指令的第一个字节队列空从队列里取出的字节是指令的后续字节两信号编码和对应的队列状态如下表所示。
这三个状态信号组成的编码表示了当前总线周期是何种操作周期,如下表所示 。
2,1和 0编码与总线周期表S S S
发中断响应信号读 I/O端口写 I/O端口暂停取指令读存储器写存储器无源状态
0
1
0
1
0
1
0
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
S 总线周期2S 1 0S
(2) S2,S1和 S0总线周期状态信号 (输出,三态 )
(3) LOCK总线封锁信号 (输出,三态 )
低电平有效 。 此信号有效时,系统中其他总线主部件不能占有总线 。 此信号由前缀指令 LOCK使其有效,并保持到 LOCK前缀后的一条指令执行完毕 。 另外 8086在两个中断响应脉冲之间,LOCK信号也自动变为有效电平,以防其它部件占有总线 。
(4) RQ/GT1和 RQ/GT0总线请求 /允许信号 (双向 )
供 CPU以外的两个处理器用以发出使用总线的请求信号和接收 CPU对总线请求信号的回答信号,请求与允许信号在同引脚上传输,但方向相反 。 其中 RQ/GT0优先级较高 。
下图给出了 8086在最大模式下的典型配置。
8086在最大模式下的典型配置
8086
CPU
时钟发生器
(8284A)
8288CLK
DEN
ALE
MN / MX STB
OE
OE
T
IORC
IOWC
数据总线
MRDC
MWTC
BHE
8282× 3
8286× 2
CLK
READY
RESET
BHE
S0
S1
S2
S0
S1
S2
DT/R
A19~ A0
A15~ A0
INTA
A19~ A16
AD15~ AD0
1
READY
RESET
总线控制器地址总线由图可以看出,8086在最大与最小模式下的主要区别是增加了一个 8288总线控制器 。 8288接受 8086CPU的状态信号 S2,S1和
S0,经过变换和组合,由 8288发出对存储器和 I/O端口的读 /写信号,对锁存器 8282及对总线收发器 8286的控制信号 。
3.5 8086存储器管理
8086采用分段管理的办法实现对 1MB存储空间的管理 (物理地址 00000H~ FFFFFH),
16bit的段寄存器存放了该段的 段首址,那么它是怎样产生 20bit的 物理地址 的呢?
我们通常采用在地址编号能被 16整除的地方开始分段,此时地址的低 4bit均为 0,这时段寄存器只用来存放高 16bit即可,以下有几个概念 。
段内偏移量 EA (Effective Address),是指某存储单元离开该段段首址的字节数 。
逻辑地址 (Logical Address),是一对地址,包含段寄存器的内容和段内偏移量,如某条指令的逻辑地址可表达为,CS,IP。
物理地址 PA (Physical Address),是指某个存储单元实际的 20bit的地址,又称绝对地址 。
由上面的定义可知:
物理地址 PA=对应段寄存器 × 10H十段内偏移量 EA。
物理地址的形成如下图所示。
物理地址的形成段寄存器值 0000
20位物理地址
19 0
15 0
15 0
偏移地址加法器
16 位 4位例如,若 CS=FFFFH,IP=0000H,则指令所在存储单元的物理地址为:
PA= (CS) × 10H + IP = FFFF0H
当取指令时,自动选择的段寄存器是 CS,
再加上 IP所决定的 16位偏移量,得到要取出指令具体的物理地址:
当涉及到取一个堆栈操作时,自动选择的段寄存器是 SS,再加上 SP所决定的 16位偏移量,得到堆栈操作所需要的 20位物理地址 。
当涉及到取一个操作数时,自动选择 DS寄存器或 ES附加段寄存器,再加上 16位偏移量,
得到操作数的 20位物理地址 。 16位偏移量取决于指令的寻址方式 。 如下图所示:
IP
CS
SI,DI或 BX
DS
SP或 BP
SS
代码段数据段堆栈段
基本概念 (总线、堆栈等 )
微处理器的一般结构
Intel 8086微处理器的结构本章内容
了解三总线及堆栈的工作原理 。
掌握微处理器的一般结构,算逻部件 ALU,寄存器结构,控制部件 。
重点掌握 Intel 8086微处理器的结构 。
学习目的
3.1 基本概念一、总线
1,总线的由来在计算机中,CPU与其他功能部件之间存在大量的信息交流,其间就需要使用通信线路连接起来,通信线的设置和连接可采用两种方式 。
(1) 专线式,将各个功能部件分别设置与其他部件通信的线路,
优点,传送速率高,它只受传送线本身的限制,且控制简单 。
缺点,机器所需要的信息传送线数量大,
增加了复杂性,不便于实现机器的模块和积木化 。
(2) 总线式,在多个功能部件之间设置公共的通信线即总线 。
图中当 A和 A'门打开时,信息由 A传至
A'; A和 C '门打开时,信息便从 A传至 C ' 。
A
B
C
A'
B'
C'
总 线 示 意 图
总线上能同时传送二进制信息的位数称为总线宽度 。 见下图 。
由于采用了分时传送的总线结构从而大大减少了机器中信息传送线的数目 。
a,分时传送:
多个部件并联在总线上,某一时刻,只允许一路信息在总线上传送 。
b,控制复杂,
总线的发送端及接收端均有三态门电路 。
打开三态门信息经总线传送到目的端 。
若不传送信息,则使三态门处于高阻状态,
相当于此部件在逻辑上与总线脱离联系 。
c,系统结构简单,便于扩展 。
特点:
2,总线的分类总线按信息传送的 方向 可分为 单向总线 和 双向总线 。
单向总线 只能向一个方向发送信息 。
双向总线 则可在两个方向传送 。
总线 按所传信息的类别,通常分为 数据总线,地址总线 和 控制总线 。
(1) 数据总线 (Data Bus)
是 微处理器 与 存储器 和 I/O电路 间数据交换的通道,可 双向 传送 。 数据总线的宽度 一般与微处器处理数据的 字长 相同,
三状态 。
(2) 地址总线 (Address Bus)
是微处理器 输出地址 用的总线,它将地址送到存储器或 I/O电路,用来确定存储器中信息存放的地址或 I/O电路的地址,
AB一般为单向,三状态 。
(3) 控制总线 (Control Bus)
是用来传送 控制信号,使各功能部件动作同步 。
(1) 片内总线指微处理器内部各 逻辑单元之间 的传输线,主要是数据总线,是为算术逻辑部件 ALU和 寄存器 之间传送操作数和结果而设计的 。 有 单总线,双总线,三总线 结构之分 。
总线按 规模,用途 及 应用场合 又可分为以下几种:
(2) 芯片总线指微型机中各功能 芯片之间 的传输线,
又称 元件级总线 。 是构成一块 CPU插板或组成一个微机小系统时常用的总线 。
(3) 内总线指微型机内连接各插件板的总线,
又称 板级总线 或 系统总线 。 其标准很多,现列举几种常用的标准总线 。
a,S-100系统总线:
是一种 实用性 微型机总线标准,具有
100根引线,主要支持 8bit微处理器,1979
年美国的 IEEE微处理机标准委员会修改后取名为 IEEE-696标准总线 。
b,MULTIBUS多总线:
是多于一个控制单元控制的总线,由
Intel公司推出,MULTIBUS-I支持 8bit,16bit
微处理器,MULTIBUS-II支持 32bit微处理器,
1987年经 IEEE微处理机标准委员会审定为
IEEE-P1296标准总线 。
c,STD总线:
是美国 PRO-LOG公司和 MOSTEK公司于 1978年联合推出的工业控制标准总线,共有 56根信号线,是 8bit/16bit兼容总线 。
d,PC总线及 EISA总线:
是美国 IBM公司推出针对 Intel-8086微处理器设计的,共有 62根信号线 。 为了与 Intel-80286
等高性能 16bit微处理器兼容,IBM公司在 PC总线上增加了一个 36引脚的扩展插座而形成 AT 总线,这种结构称之为 IBM公司标准结构,简称
ISA(Industrial Standard Architecture),COMPAQ
公司推出了扩展工业标准总线,即 EISA(Extend
Industry Standard Architecture)总线 。 是支持 32bit
的标准总线 。
e,VME总线:
是美国 MOTOROLA公司于 1981年提出,针对 16bit和 32bit微处理器设计的 。 该总线在采用单总线连接器时为 96条信号线,支持 16bit数据线,24bit地址线;双总线连接器结构则支持
32bit,此时信号线为 128条,可支持四个主 CPU
模板进行运行 。
(4) 外总线指微型计算机系统与系统之间或微机系统与外部设备之间的通信线,又称 通信总线 。
CPU与外部设备的基本通信方式有两种:
a,并行通信,数据各位同时传送,有多少位数据就有同样数量的传送线 。
b,串行通信,数据逐位顺序传送,适宜长距离传送 。
二、堆栈用作数据暂时存储的一组 寄存器 或 存储单元 称为堆栈 。
堆栈操作有两种,压入 (PUSH)和弹出 (POP),
而 SP始终指向堆栈栈顶的新位置 。
1,堆栈的定义
堆栈中数据按,后进先出,的结构方式进行处理,即新入栈的依次堆放在原来数据之上,
存放信息的最后一个单元叫做 栈顶,用堆栈指针 SP(Stack Pointer)指示 。
2,堆栈编址结构的两种形式
(1) 向上生成该结构中,每 压入 一个数据,堆栈指示器 SP按 增量 修改,每 弹出 一个数据,SP
按 减量 修改 。
(2) 向下生成该结构中,每 压入 一个数据,SP按 减量 修改,每 弹出 一个数据,SP按 增量 修改 。
3,构成堆栈的两种形式一种是使用微处理器内部的 一组寄存器 作为堆栈。
优点,访问速度快。
缺点,寄存器数量有限。
另一种形式是在 随机存储器 RAM中开辟一个区间供堆栈使用,较为普遍;若编址采用向下生成,其堆栈操作如下图所示 。
堆栈操作示意图 (向下生成 )
M- 3
M- 2
M- 1
MXSP
(a)
M- 3
M- 2
M- 1
MX
SP
(b)
A
M- 3
M- 2
M- 1
MX
SP
(c)
A
BSP
A
SP B
SP C
当前栈顶地址为 M,
存内容 X
信息 B进栈,SP?SP- 1,
SP指定的地址?B
信息 A进栈分两步操作,SP?SP- 1,SP
指定的地址单元?A
堆栈操作示意图 (向下生成 )
M
M- 3
M- 2
M- 1
X
SP
(d)
A
B
C M- 3
M- 2
M- 1
MX
SP
(f)
A
B
CM- 3
M- 2
M- 1
MX
SP
(e)
A
C
B SP DSP SP
信息 C进栈 信息 C出栈分两步操作:指定的目的地?C,SP?SP+1
信息 B出栈:指定目的地?B,
SP SP+1
堆栈操作示意图 (向下生成 )
M
M- 3
M- 2
M- 1
X
SP
(g)
A
D
C M- 3
M- 2
M- 1
MXSP
(i)
A
D
CM- 3
M- 2
M- 1
MX
SP
(h)
A
C
DSP
SP
信息 D进栈,SP?SP- 1,
SP指定的地址?D
信息 D出栈 信息 A出栈,栈顶地址仍为 M
由上图中可以看出,出栈操作并不会从堆栈中去掉信息,也不擦除它们,只是因 SP
的自动修改而改变了堆栈的栈顶 。
堆栈主要用于中断控制,子程序调用以及数据暂时存储 。
3.2 微处理器的一般结构传统的微处理器结构由 算术逻辑部件
ALU,控制电路 及 寄存器阵列 三大部分组成,如下图所示 。
指令寄存器 IR
译码器 ID
操作控制器 PLA
控制信号片内数据总线通用寄存器组变址寄存器
PC程序计数器
SP堆栈指示器标志寄存器
FR
地址缓冲器芯片地址总线数据缓冲器芯片数据总线累加器 暂存器
ALU?
微处理器一般结构框图一、算术逻辑部件 ALU (Arithmetic Logic
Unit)
ALU是执行算术运算,逻辑运算及移位的装置 。
ALU有两个输入端,一个与累加器相连,另一端与暂存器相连,用于存放参加运算的两个数 。
ALU的输出端也有两个,一端将操作结果送回到内部总线再送回累加器,另一端用于输出表示操作结果特征的标志信息 。
二、寄存器阵列一般包括通用寄存器,累加器,标志寄存器,专用寄存器等 。 寄存器的使用提升了计算机的功能和程序设计的灵活性 。
1,通用寄存器组可用于存放数据和地址,有 8bit和 16bit等,
CPU可直接处理这些信息,减少了访问存储器的次数,节省访问内存时间 。
2,累加器也是数据寄存器,与 ALU一起完成各种算术或逻辑运算,运算前作为 ALU的一个输入,
运算后常用于保存结果 。
CPU对 I/O接口电路的读出或写入一般也是通过累加器进行的 。
3,标志寄存器在算术或逻辑运算时,为了保存可能发生的 进位,溢出,符号,全零 及 奇偶性等状态的变化,微处理器设置标志寄存器 。
其所存的状态将可作为一种条件,常用于判断是否控制程序转移 。
4,专用寄存器
(1) 程序计数器 PC (Program Counter)
它是 指令地址寄存器,其内容指出了现行指令在存储器中的存放地址 。
注,当按 PC的内容从存储器中取出指令时,PC
的内容自动加 1。
对单字节指令而言,则 PC指向了下一条指令所在的地址 。
对多字节指令,则每取一个字节,PC自动加
1,当取出最后一个指令字节时,PC仍指向下一条指令地址 。
(2) 堆栈指示器 SP (Stack Pointer)
用于确定堆栈在内存中的具体位置 。
SP总是指向 栈顶 。
(3) 变址寄存器用于变址寻址,也可作通用寄存器 。
三、控制部件是整个系统按时序协调操作的功能部件,包括 IR,ID定时及产生各种控制信号的控制逻辑单元组成 。
根据上述结构,微处理器执行一条指令的简要过程,如下图所示 。
取 指 令指 令 译 码取 操 作 数执 行 指 令存放运算结果微处理器执行一条指令的简要过程
(1) PC将指令地址经地址缓冲器送到 CPU
外部地址总线,然后送到存储器进行地址译码 。
图中取指令包含以下几个步骤:
(2) PC+1→PC,同时 CPU发出,存储器读,。
信号,访问存储器中某一单元 。
(3) 经过几百 ns,在外部数据总线上出现指令的第一个字节,即操作码,经由
CPU内部数据缓冲器?内部总线?指令寄存器 。
(4) 对于多字节指令,控制部件还会发出取第二,第 三 等 字 节 的 信 号,每次
PC+1→PC
3.3 程序指令的执行过程人们事先把一条条指令预选输到存储器中,在执行时,机器把这些指令一条条地取出来,加以翻译和执行 。
例如,若要求机器把两个数 7和 10相加,其简单程序为:
MOV AL,7 B0
ADD AL,10 04
HLT F4
7
0A
逐条按机器码表示在右边,共 5个字节,
若存放在地址为 00H开始连续 5个存储单元,
下面具体介绍其执行过程 。
第一条指令的取指过程。
0000 0000
0000 0000
1011 0000
0000 0111
0000 0100
0000 1010
1111 0100
1011 0000
O I2
ALU
I1
AL BL
PLA
ID
IR 1011 0000
DB
A
B
+1
……
EAB
C
AR
D读
F DR
00
01
02
03
04
G
PC
取第一条指令的操作示意图
00? 1011 0000
PC的内容 (00H)送
AR(Address Register)
PC + 1? PC (01H)
00H经 AB送至存储器,经地址译码器选中 00H单元。
CPU给出读命令。
(00H) = B0H 读至
DB(Data Bus)
0000
B0H送至 DR
(Data Register)
DR把 B0H送 IR经 ID
译码发出对应操作
取指令第二字节的过程如下图所示。
0000 0001
1011 0000
0000 0111
0000 0100
0000 1010
1111 0100
01
0000 0111
O I2
ALU
I1
AL0000 0111 BL
PLA
ID
IR
0000 0111
DB
A
B
+1
……
E
AB
C
AR
D读
F
DR
G
PC
10
0000 0001
取立即数的操作示意图
PC的内容
01H送 AR
PC + 1? PC (02H)
01H经 AB送至存储器,经地址译码选中 01H单元。
CPU发出读命令。
(01H) = 07H 读至 DB
07H送 DR
0000 0111
07H由 DR通过内部
DB送至 AL。
取第二条指令的第一个字节与第一条指令的第一个字节的取指过程相同 。 对此指令译码后,知为加法指令,AL的内容为一操作数,另一操作数在指令的第二字节中,其执行过程为:
(9) 相加结果由 ALU输出至 AL中,可类似取第三条指令 。
(7) DR中的数由内部 DB送到 ALU的另一输入端 。
(1)~ (6) 与第一条指令的第二字节的执行过程相同 。
(8) AL中的数送 ALU且执行加法操作 。
3.4 Intel 8086微处理器
8086是 Intel系列的 16bit微处理器,属第三代 。
8086有 16bit数据总线和 20bit地址线,可寻址
1M空间 。
8086采用单一 +5V电源和单相时钟,频率为
5MHZ。
20位
AH AL
BH BL
CH CL
DH DL
SP
BP
DI
SI
ALU
运算寄存器标志执行部件控制电路
16位
CS
DS
SS
ES
IP
内部暂存器
8位
1 2 3 4 5 6
执行部件
( EU)
输入 /输出控制电路
16位外部总线指令队列缓冲器总线接口部件( BIU)
通用寄存器 地址加法器一,8086CPU结构
1,总体功能结构
8086CPU的结构框图
8086从功能结构来讲,分为两大部分,即总线接口部件 BIU(Bus Interface Unit )和 执行部件 EU(Execution Unit)。
(1) BIU部件由 段寄存器,指令指针,地址加法器,
指令队列缓冲器 和 控制电路 等部分组成。
在执行指令时,如要取操作数,则也由 BIU从内存 或 I/O接口 指定区域取出,送给 EU部件去执行 。
BIU负责与存储器,I/O接口电路传送信息 。
BIU负责从指定内存单元取出指令,送到指令队列缓冲器中排队 。
指令队列缓冲器 是一个 6个字节 的 RAM存储器
(8088为 4个字节 ),队列中最多可同时存放 6个字节的指令,取来的指令是按字节顺序存放的 。
当队列中有两个以上的指令字节空的时候,
BIU会自动地执行总线操作,继续取指令 。
(2) EU部件由 ALU,通用寄存器,标志寄存器 和 控制电路 组成,负责指令的执行 。 ALU,寄存器和数据传输通路均是 16bit的 。
若执行的是一条 转移指令,则存放在指令队列缓冲器中的指令就没有用了,应到新的地址单元去取出 。 BIU新取出的第一条指令将直接送到 EU中去执行,随后重新填充指令队列缓冲器 。
EU从 BIU中的指令队列缓冲器中取得指令和数据 。
当指令要求将数据 写 到 存储器 和 I/O电路,
或需从 存储器 和 I/O电路 中 读 取数据时,EU
向 BIU发出请求,BIU自动完成这些操作 。
(3) 8086与传统微处理器指令执行过程比较取指 3 执行 3 取指 4?执行 2取指 2执行 1取指 1
传统微处理器的执行方式传统微处理器取指与执行串行进行,
CPU的工作效率低 。
取数据 取指 5取指 4取指 3取指 2取指 1BIU
执行 4执行 3执行 2执行 1等待EU
8086的指令执行方式
8086CPU取指与执行并行进行,大大减少了等待取指令所需时间,提高了 CPU
的工作效率 。
2,寄存器结构
8086CPU 内部寄存器
DLDH
CLCH
BLBH
ALAH
通用寄存器
AX
BX
CX
DX
SP
BP
SI
DI
数据寄存器
CS
DS
SS
ES
IP
FLAG
变址寄存器指针寄存器堆栈指针基数指针源变址目的变址指令指针状态标志代码段数据段堆栈段附加段段寄存器控制寄存器
(1) 通用寄存器
8个 16bit通用寄存器 。
SP— 堆栈指针,存放堆栈栈顶的现行地址,
与 SS堆栈段寄存器一起方可确定堆栈的实际地址 。
BP— 基址指针
SI— 源变址寄存器
AX,BX,CX,DX 4个 16bit的通用数据寄存器,它们的高 8bit AH,BH,CH,DH与低 8bit AL,BL,CL,DL又可分别看成 8个
8bit的寄存器 。
DI— 目的变址寄存器
(2) 控制寄存器
IP (Instruction Pointer) 指令指针与
PC类似,但有区别:
a,PC是指向下一条即将要执行的指令,而
IP一般是指向下一次要取出的指令 。
b,在 8086中 IP要与 CS代码段寄存器的内容一起,才能得到指令的实际地址 。
TF SF ZF AF PFOF DF IF CF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
标志寄存器格式
a,6个状态标志位,即 CF,PF,AF,ZF,SF和
OF。
进位标志 CF(Carry Flag):
FLAG(标志寄存器 )为 16bit,其中 9位有定义 。
当结果的最高位 (字节- D7,字- D15)产生进位 (加法运算 )或借位 (减法运算 )时,CF=1,
否则 CF=0,移位和循环指令也影响 CF。
奇偶标志位 PF(Parity Flag):
若结果中,1” 的个数为偶数,则 PF=1,
否则 PF=0。
辅助进位标志 AF(Auxitiary Carry Flag):
在低半字节向高半字节有进位或借位时
AF=1,否则 AF=0。
零标志 ZF(Zero Flag):
当运算结果为 0时 ZF=1,否则 ZF=0。
符号标志 SF(Sign Flag):
SF等于最高位,对于带符号数,最高位为符号位,SF=1运算结果为负,SF=0为正 。
溢出标志 OF(Overflow Flag):
带符号数运算结果超出其表达范围时 ( 字节数:
-128 ~ +127,字 类 型 数,-32768 ~ +32767 ),
OF=1,否则 OF=0。
用表达式给出
141515
677
溢出 CC
CC
OF
(字节运算 )
(字运算 )
例:① 2345H+3219H
② 6400H+7A3CH
CF=0 PF=0 AF=0 ZF=0 SF=0 OF=0
CF=0 PF=1 AF=0 ZF=0 SF=1 OF=1
b,3个控制标志位
追踪标志 TF(Trace Flag):
TF=1,处理器进入单步方式,以便调试,
CPU每执行一条指令自动产生一个内部中断以利于检查指令的执行情况; TF=0为连续工作方式 。
中断允许标志 IF(Interrupt-enable Flag):
IF=1,允许 CPU响应外部的可屏蔽中断请求; IF=0则禁止响应 。 IF对外部非屏蔽中断及内部中断不起作用 。
方向标志 DF(Direction Flag):
在串操作指令中,DF=0时,变址指针自动增量,DF=1时,则自动减量 。
(3) 段寄存器
CS— 代码段寄存器,用于定义代码段基地址,该段用于存放指令代码 。
DS— 数据段寄存器,用于定义数据段基地址,该段用于存放程序变量 。
有 4个 16bit的段寄存器
SS— 堆栈段寄存器,用于定义堆栈段基地址,
该段作堆栈区使用 。
ES— 附加数据段,用于定义附加段基地址,
与 DS类似 。
上述 4个段在 8086寻址的 1MB空间内,其位置不受限制,可连续排列,分隔排列,部分重叠甚致全部重叠 。
二、引脚信号及功能最小模式:即由 8086组成的单处理器系统,
所有的总线控制信号直接由 8086直接产生,
故系统中的总线控制逻辑电路被减到最少 。
最大模式:即由 8086组成的中等规模或者大型的系统 。 包含两个或多个微处理器,
8086为主处理器其它的为协处理器 。
8086的两种工作模式
8086采用双列直插式封装,有 40个引脚 (如右图所示 ),但总线信号数量却大于
40,故 8086采用了分时复用技术,部分引脚传送两种总线信号 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
GND
AD14
AD13
AD12
AD11
AD10
AD9
AD8
AD7
AD6
AD5
AD4
AD3
AD2
AD1
AD0
NMI
INTR
CLK
GND
VCC
AD15
A16/ S3
A17/ S4
A18/ S5
A19/ S6
BHE/ S7
MN/MX
RD
HOLD (RQ/GT0)
HLDA (RQ/GT1)
WR (LOCK)
M/IO (S2)
DT/R (S1)
DEN (S0)
ALE (QS0)
INTA (QS1)
TEST
READY
RESET
8086
CPU
8086的引脚信号注:括号内为该引脚在最大模式下的名称
8086芯片的引脚图
1,最小模式下引脚信号及功能:
(1) 地址 /数据总线 AD15~ AD0(双向、三态 )
在一个总线周期的第一个时钟周期用于传送低 16bit地址信息,并用地址锁存器锁存以免丢失,
其它时钟周期可用于传送数据信息,分时传送 。
当 8086执行中断响应周期,保持响应周期时,这些引脚处于高阻状态 。
(2) 地址 /状态信号线 A19/S6~ A16/S3(输出、三态 )
在总线周期的第一个时钟周期 (T1)用于输出地址信号的最高 4bit并锁存 。
其它时钟周期中用来输出状态信号 S6~ S3,
其中:
S6— 低电平,表示 8086当前与总线相连。
S5— 表示标志寄存器中“中断允许位”的状态
(IF)。
S4,S3的组合指出了分段情况。如下表所示。
S4和 S3的组合提供的分段信息表
S4 S3 意 义
0
0
1
1
0
1
0
1
当前正在使用 ES附加段当前正在使用 SS堆栈段当前正在使用 CS或者未使用任何段寄存器当前正在使用 DS数据段
当 CPU 处于,保 持 响 应,状态时,
A19/S6~ A16/S3置为高阻状态 。
若执行 I/O指令,则由于 8086只访问 64K个端口,在 T1周期这 4个引脚为低电平 。
(3) BHE/S7高 8bit数据总线允许 /状态线 (输出,三态 )
在 T1 状态,8086在 BHE/S7 引脚输出
BHE信号,表示高 8bit数据总线 D15~ D8上的数据有效,与地址线 A0一起产生存储器的选择逻辑信号 。
在其它时钟周期,输出为状态信号 S7。
但 8086芯片,S7未定义 。
下面介绍引脚中的控制信号。
(4) MN/MX最小 /最大模式控制信息低电平 — 8086处于最大模式。
高电平 — 8086处于最小模式。
(5) RD读信号 (输出,三态 )
低电平有效 。 表示将对内存或 I/O端口读操作 。
(6) M/IO,存储器 /输入输出控制信息
(输出,三态 )
是区分 CPU进行的存储器还是 I/O访问,
见下表。
RDM/IO 操 作
1
0
0
0
读存储器数据读 I / O端口数据
RD与 M/IO的组合及对应的操作表
(7) WR写信号 (输出,三态 )
1
0
0
0
CPU对存储器进行写操作
CPU对 I/O端口进行写操作
WR与 M/IO 的组合及对应的操作表操 作WRM/IO
低电平有效 。 WR与 M/IO的组合对应的操作如下表所示 。
(8) ALE地址锁存允许信号 (输出 )
高电平有效,此信号在 T1状态有效,为地址码锁存的选通信号,送地址锁存器 。
(9) READY准备就绪信号 (输入 )
高电平有效,是从所寻址的 存储器 或 I/O
电路 来的响应信号,用于解决 CPU与慢速存储器或 I/O电路的 同步问题 。 CPU在 T3周期开始采样 READY线,若为低电平,则 T3之后插入 TW等待周期 直到 READY为高电平,进入 T4完成数据传送 。
(10) INTR可屏蔽中断请求信号 (输入 )
高电平有效,8086在每一个指令周期的最后一个 T状态采样这条线,若 IF=1,则
8086在执行完当前指令即响应中断 。
(11) INTA中断响应信号 (输出,三态 )
低电平有效,CPU响应外部 可屏蔽中断请求以后,便发出中断响应信号,作为对中断请求的回答 。 此信号在每一个中断响应周期的 T2,T3和 TW周期均有效,为中断矢量的读选通信号 。
(12) NMI非屏蔽中断请求信号 (输入 )
边沿触发,该线上的中断请求信号不能用软件屏蔽,电平由低到高,便在当前指令结束后引起中断。
(13) RESET系统复位信号 (输入 )
高电平有效,8086要求此信号起码维持
4个时钟周期,若初次加电复位,持续时间不小于 50?s,RESET为高电平时,8086立即结束现行操作,进入内部复位状态,CPU各内部寄存器被设置为 初值,CS=FFFFH,Flag、
IP,DS,ES,SS及其它寄存器均初始化为
0000H。
(14) DT/ R数据收发控制信号 (输出、三态 )
为增强数据总线的驱动能力,8086可外接驱动器 8286,DT/R即为 8086输出的数据到收发器 8286的控制信号 。
DT/R— 高电平,8086输出的数据经 8286
送到数据总线;
8086工作在 DMA方式时,DT/R为高阻状态,
在最小模式时因无 8286而不起作用 。
DT/R— 低电平,收发器 8286则把数据总线上的数据传送到 8086。
高电平有效 。 系统中其他的总线主设备要获得对总线的控制权时,向 8086发出高电平的 HOLD信号,8086在每个时钟周期的上升沿对 HOLD引脚信号进行检测,若为高电平,
则在当前总线周期结束时,予以响应 。
(16) HOLD保持请求信号 (输入 )
(15) DEN数据允许信号 (输出,三态 )
低电平有效,也是 8086控制外接的数据收发器,低电平时开启收发器,传送数据有效;
高电平时,则禁止传送 。
(17) HLDA保持响应信号 (输出 )
高电平有效 。 当 CPU响应保持请求 HOLD时,
便发出 HLDA高电平的应答信号,从而将总线控制权让给发出保持请求的设备,直到该设备又将 HOLD信号变为低电平,CPU才收回总线控制权,将 HLDA信号置为低电平 。
低电平有效 。 与 WAIT等待指令结合使用,
当 CPU执行 WAIT指令时,CPU处于空转状态进行等待直到检测到 TEST信号有效时结束,
CPU继续往下执行指令 。
(18) TEST测试信号 (输入 )
(19) CLK系统时钟输入信号时钟信号为 CPU和总线控制逻辑电路提供定时基准 。 常用 INTEL8284A时钟发生器提供 CLK信号 。
工作在最小模式下
8086的典型配置如右图所示。
8086
地址锁存器
STB
(8286× 2)
OE
(选用 ) 数据总线地址总线
(8282× 3)
READY
RESET
MN/MX
ALE
BHE
A19~ A16
AD15~ AD0
DEN
DT/R
M/IO
WR
RD
HOLD
HLDA
INTR
INTA
(8284A)
X1 X2
CLK
READY
RESET
+5V
BHE
A19~ A0
D15~ D0
2,最大模式下引脚信号及功能若将 8086的 MN/MX引脚接地便工作在最大模式 。 此时仅 24— 31引脚信号与最小模式不同,如下表所示 。
引脚编号 最小模式 最大模式
24
25
26
27
28
29
30
31
QS1
QS0
S0
S1
S2
LOCK
RQ/GT1
RQ/GT0
INTA
ALE
DEN
DT/R
M/IO
WR
HLDA
HOLD
两种模式下 8086的 24~ 31引脚信号表
(1) QS1和 QS0指令队列状态信号 (输出 )
QS1和 QS0编码与队列状态表
QS1 QS0 队列状态
0
0
1
1
0
1
0
1
空操作取走指令的第一个字节队列空从队列里取出的字节是指令的后续字节两信号编码和对应的队列状态如下表所示。
这三个状态信号组成的编码表示了当前总线周期是何种操作周期,如下表所示 。
2,1和 0编码与总线周期表S S S
发中断响应信号读 I/O端口写 I/O端口暂停取指令读存储器写存储器无源状态
0
1
0
1
0
1
0
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
S 总线周期2S 1 0S
(2) S2,S1和 S0总线周期状态信号 (输出,三态 )
(3) LOCK总线封锁信号 (输出,三态 )
低电平有效 。 此信号有效时,系统中其他总线主部件不能占有总线 。 此信号由前缀指令 LOCK使其有效,并保持到 LOCK前缀后的一条指令执行完毕 。 另外 8086在两个中断响应脉冲之间,LOCK信号也自动变为有效电平,以防其它部件占有总线 。
(4) RQ/GT1和 RQ/GT0总线请求 /允许信号 (双向 )
供 CPU以外的两个处理器用以发出使用总线的请求信号和接收 CPU对总线请求信号的回答信号,请求与允许信号在同引脚上传输,但方向相反 。 其中 RQ/GT0优先级较高 。
下图给出了 8086在最大模式下的典型配置。
8086在最大模式下的典型配置
8086
CPU
时钟发生器
(8284A)
8288CLK
DEN
ALE
MN / MX STB
OE
OE
T
IORC
IOWC
数据总线
MRDC
MWTC
BHE
8282× 3
8286× 2
CLK
READY
RESET
BHE
S0
S1
S2
S0
S1
S2
DT/R
A19~ A0
A15~ A0
INTA
A19~ A16
AD15~ AD0
1
READY
RESET
总线控制器地址总线由图可以看出,8086在最大与最小模式下的主要区别是增加了一个 8288总线控制器 。 8288接受 8086CPU的状态信号 S2,S1和
S0,经过变换和组合,由 8288发出对存储器和 I/O端口的读 /写信号,对锁存器 8282及对总线收发器 8286的控制信号 。
3.5 8086存储器管理
8086采用分段管理的办法实现对 1MB存储空间的管理 (物理地址 00000H~ FFFFFH),
16bit的段寄存器存放了该段的 段首址,那么它是怎样产生 20bit的 物理地址 的呢?
我们通常采用在地址编号能被 16整除的地方开始分段,此时地址的低 4bit均为 0,这时段寄存器只用来存放高 16bit即可,以下有几个概念 。
段内偏移量 EA (Effective Address),是指某存储单元离开该段段首址的字节数 。
逻辑地址 (Logical Address),是一对地址,包含段寄存器的内容和段内偏移量,如某条指令的逻辑地址可表达为,CS,IP。
物理地址 PA (Physical Address),是指某个存储单元实际的 20bit的地址,又称绝对地址 。
由上面的定义可知:
物理地址 PA=对应段寄存器 × 10H十段内偏移量 EA。
物理地址的形成如下图所示。
物理地址的形成段寄存器值 0000
20位物理地址
19 0
15 0
15 0
偏移地址加法器
16 位 4位例如,若 CS=FFFFH,IP=0000H,则指令所在存储单元的物理地址为:
PA= (CS) × 10H + IP = FFFF0H
当取指令时,自动选择的段寄存器是 CS,
再加上 IP所决定的 16位偏移量,得到要取出指令具体的物理地址:
当涉及到取一个堆栈操作时,自动选择的段寄存器是 SS,再加上 SP所决定的 16位偏移量,得到堆栈操作所需要的 20位物理地址 。
当涉及到取一个操作数时,自动选择 DS寄存器或 ES附加段寄存器,再加上 16位偏移量,
得到操作数的 20位物理地址 。 16位偏移量取决于指令的寻址方式 。 如下图所示:
IP
CS
SI,DI或 BX
DS
SP或 BP
SS
代码段数据段堆栈段