一、功能结构类型,寄存器类型
1. 功能结构
功能结构特点:
- BIU和EU并不是同步工作的,它们按指令流水线原则协调管理:两个部件相互独立、相互配合。
- 在时间上它们是并行工作,即CPU的EU在执行指令的同时BIU进行取指操作。
- 提高了CPU的工作效率,充分利用了总线。
(1)执行单元 EU(9个寄存器)
功 能 { 1. E U 负 责 所 有 指 令 的 解 释 ( C U ) 和 执 行 ( A L U ) , 同 时 管 理 有 关 寄 存 器 。 2. 通 过 译 码 电 路 分 析 , 发 出 相 应 控 制 命 令 , 控 制 A L U 数 据 总 线 中 数 据 的 流 向 。 功能\begin{cases} 1.\ EU负责所有指令的解释(CU)和执行(ALU),同时管理有关寄存器。\\ 2.\ 通过译码电路分析,发出相应控制命令,\pmb{控制ALU数据总线中数据的流向}。 \end{cases} 功能{1. EU负责所有指令的解释(CU)和执行(ALU),同时管理有关寄存器。2. 通过译码电路分析,发出相应控制命令,控制ALU数据总线中数据的流向控制ALU数据总线中数据的流向控制ALU数据总线中数据的流向。
ALU:加减乘除逻辑运算(定点运算(88/86)、浮点运算(8087))
CU(控制单元)控制器
(2)总线接口单元 BIU(5个寄存器(4个段寄存器、1个指令指针寄存器))
BIU的功能是负责CPU与主存储器、I/O设备间的数据传送
功
能
{
1.
{
计
算
物
理
地
址
,
负
责
从
内
存
单
元
中
预
取
指
令
,
并
送
到
指
令
队
列
暂
存
2.
{
指
令
流
(
输
入
)
{
C
P
U
执
行
指
令
时
,
B
I
U
要
配
合
E
U
,
从
指
定
的
内
存
单
元
或
I
/
0
端
口
中
取
出
数
据
传
送
E
M
数
据
流
(
输
出
)
{
把
E
U
的
处
理
结
果
传
送
到
指
定
的
内
存
单
元
或
I
/
O
端
口
中
。
功能\begin{cases} 1.\begin{cases}计算\pmb{物理地址},负责从内存单元中预取指令,并送到指令队列暂存\end{cases}\\ 2.\begin{cases} 指令流(输入)\begin{cases} CPU执行指令时,BIU要配合EU,从指定的内存单元或I/0端口中取出数据传送EM\\ \end{cases}\\ 数据流(输出)\begin{cases} 把EU的处理结果传送到指定的内存单元或I/O端口中。 \end{cases} \end{cases} \end{cases}
功能⎩⎪⎪⎪⎨⎪⎪⎪⎧1.{计算物理地址物理地址物理地址,负责从内存单元中预取指令,并送到指令队列暂存2.⎩⎨⎧指令流(输入){CPU执行指令时,BIU要配合EU,从指定的内存单元或I/0端口中取出数据传送EM数据流(输出){把EU的处理结果传送到指定的内存单元或I/O端口中。
- 把16位的段地址和16位的位移量,经过地址加法器 ∑ \sum ∑形成20位的物理地址(地址总线)
- 以此访问 主 存 ( 最 大 寻 址 空 间 2 20 b y t e = 1 M B ) ( 20 根 地 址 线 的 空 间 大 小 ) \pmb{主存(最大寻址空间2^{20}byte=1MB)}(20根地址线的空间大小) 主存(最大寻址空间220byte=1MB)主存(最大寻址空间220byte=1MB)主存(最大寻址空间220byte=1MB)(20根地址线的空间大小)
I / O 接 口 ( 最 大 寻 址 空 间 2 16 b y t e = 64 K B ) \pmb{I/O接口(最大寻址空间2^{16}byte=64KB)} I/O接口(最大寻址空间216byte=64KB)I/O接口(最大寻址空间216byte=64KB)I/O接口(最大寻址空间216byte=64KB)
指令队列(8088:4位,8086:6位):暂存预取指令
每当8086的指令队列中有2个空字节时,BIU就会自动把指令取到指令队列中。
2. 寄存器结构
按功能分为三大类:通用寄存器、控制寄存器、段寄存器
(1)通用寄存器(8个)
通 用 寄 存 器 { A X ( a c u m ) 累 加 器 B X ( b a s e ) 基 址 寄 存 器 C X ( c o u n t ) 计 数 寄 存 器 D X ( d a t a ) 数 据 寄 存 器 } 数 据 寄 存 器 S P ( s t a c k p o i n t e r ) 堆 栈 指 针 寄 存 器 B P ( b a s e p o i n t e r ) 基 址 指 针 寄 存 器 S I ( s o u r c e i n d e x ) 源 变 址 寄 存 器 D I ( D e s t n i n d e x ) 目 标 变 址 寄 存 器 } 地 址 寄 存 器 通用寄存器\begin{cases} \left. \begin{matrix} AX(acum)&累加器\\ BX(base)&基址寄存器\\ CX(count)&计数寄存器\\ DX(data)&数据寄存器\\ \end{matrix} \right\}\pmb{数据}寄存器\\ \left. \begin{matrix} SP(stack\ pointer)&\pmb{堆栈指针}寄存器\\ BP(base\ pointer)&\pmb{基址指针} 寄存器\\ SI(source\ index)&源变址寄存器\\ DI(Destn\ index)&目标变址寄存器\\ \end{matrix} \right\}\pmb{地址}寄存器\\ \end{cases} 通用寄存器⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧AX(acum)BX(base)CX(count)DX(data)累加器基址寄存器计数寄存器数据寄存器⎭⎪⎪⎬⎪⎪⎫数据数据数据寄存器SP(stack pointer)BP(base pointer)SI(source index)DI(Destn index)堆栈指针堆栈指针堆栈指针寄存器基址指针基址指针基址指针寄存器源变址寄存器目标变址寄存器⎭⎪⎪⎬⎪⎪⎫地址地址地址寄存器
AX、BX、CX、DX可以称为数据寄存器
这4个16位寄存器又可分别分成:
{
低
8
位
(
A
L
、
B
L
、
C
L
、
D
L
)
高
8
位
(
A
H
、
B
H
、
C
H
、
D
H
)
\begin{cases} 低8位(AL、BL、CL、DL)\\ 高8位(AH、BH、CH、DH)\end{cases}
{低8位(AL、BL、CL、DL)高8位(AH、BH、CH、DH)
指针寄存器用于寻址内存堆栈内的数据。
{
S
P
堆
栈
指
针
寄
存
器
,
指
示
堆
栈
段
栈
顶
的
位
置
。
(
只
能
指
向
偶
地
址
)
B
P
基
址
指
针
寄
存
器
,
表
示
数
据
在
堆
栈
段
中
的
基
地
址
。
\begin{cases} SP\ \pmb{堆栈指针寄存器},指示堆栈段\pmb{栈顶}的位置。(只能指向偶地址)\\ BP\ \pmb{基址指针寄存器},表示数据在堆栈段中的\pmb{基地址}。\\ \end{cases}
{SP 堆栈指针寄存器堆栈指针寄存器堆栈指针寄存器,指示堆栈段栈顶栈顶栈顶的位置。(只能指向偶地址)BP 基址指针寄存器基址指针寄存器基址指针寄存器,表示数据在堆栈段中的基地址基地址基地址。
变址寄存器常常在变址寻址方式中作为索引指针。
{
S
I
源
变
址
寄
存
器
D
I
目
标
变
址
寄
存
器
\begin{cases} SI\ \pmb{源变址寄存器}\\ DI\ \pmb{目标变址寄存器}\\ \end{cases}
{SI 源变址寄存器源变址寄存器源变址寄存器DI 目标变址寄存器目标变址寄存器目标变址寄存器
8086/8088响应中断时,不能自动压入堆栈的是通用寄存器的内容。
(2)控制寄存器(2个)
控 制 寄 存 器 { I P ( P C ) 指 令 指 针 寄 存 器 F L A G E ( F l a g 、 P S W 、 F R ) 标 志 位 寄 存 器 控制寄存器\begin{cases} IP(PC)&\pmb{指令指针}寄存器\\ FLAGE(Flag、 PSW、FR)&\pmb{标志位}寄存器\\ \end{cases} 控制寄存器{IP(PC)FLAGE(Flag、PSW、FR)指令指针指令指针指令指针寄存器标志位标志位标志位寄存器
① IP 指令指针寄存器
(指示存储器指令的地址)
- 随着指令的执行,IP将自动修改以指示下一条指令所在的存储单元位置。
- IP寄存器是一个专用寄存器。
- IP寄存器与CS段寄存器联合使用以确定下一条指令的存储单元地址:
{ 逻 辑 地 址 : C S ( 段 地 址 ) : I P ( 段 内 偏 移 地 址 ) 物 理 地 址 : C S ∗ 16 + I P \begin{cases} \pmb{逻辑地址}:CS(段地址):IP(段内偏移地址)\\ \pmb{物理地址}:CS*16+IP\\ \end{cases} {逻辑地址逻辑地址逻辑地址:CS(段地址):IP(段内偏移地址)物理地址物理地址物理地址:CS∗16+IP
② Flag 标志位寄存器
用于反映指令执行结果特征或控制指令执行形式.
- 8088处理器的各种标志形成了一个16位的标志寄存器,9位有效位(6位状态位,3位控制位)
- 标志寄存器又称为程序状态字寄存器
- 程序运行需要利用标志的状态
(1) 状 态 标 志 位 \pmb{状态标志位} 状态标志位状态标志位状态标志位:用来记录程序运行结果的状态信息,许多指令的执行都将相应的设置状态位:CF、ZF、SF、PF、OF、AF
{ 0 C F ( C r r a y F l a g ) 进 位 标 志 位 : 最 高 位 往 前 的 进 ( 借 ) 位 C F = 1 2 P F ( P a r i t y F l a g ) 偶 奇 标 志 位 : 运 算 结 果 中 低 8 位 1 的 个 数 { 偶 数 P F = 1 奇 数 P F = 0 4 A F ( A u x i l i a r y C a r r y F l a g ) 辅 助 进 位 标 志 位 : D 3 向 D 4 有 进 ( 借 ) 位 时 , A F = 1 6 Z F ( Z e r o F l a g ) 零 标 志 位 : 运 算 结 果 为 0 时 , Z F = 1 7 S F ( S i g n F l a g ) 符 号 标 志 位 : 最 高 位 为 1 时 , S F = 1 11 O F ( O v e r F l a w f l a g ) 溢 出 标 志 位 : 运 算 结 果 超 过 了 带 符 号 数 的 范 围 时 , O F = 1 \begin{cases} 0\ \pmb{CF}(Crray\ Flag)&\pmb{进位标志位}:\ 最高位往前的进(借)位 CF=1\\ 2\ \pmb{PF}(Parity\ Flag)&\pmb{偶奇标志位}:\ 运算结果中\pmb{低8位}1的个数 \begin{cases} 偶数&PF=1\\ 奇数&PF=0\\ \end{cases}\\ 4\ \pmb{AF}(Auxiliary Carry Flag)&\pmb{辅助进位标志位}:\ D_3向D_4有进(借)位时,AF=1\\ 6\ \pmb{ZF}(Zero\ Flag)&\pmb{零标志位}:\ 运算结果为0时,ZF=1\\ 7\ \pmb{SF}(Sign\ Flag)&\pmb{符号标志位}:\ 最高位为1时,SF=1\\ 11\ \pmb{OF}(OverFlaw\ flag)&\pmb{溢出标志位}:\ 运算结果超过了带符号数的范围时,OF=1\\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧0 CFCFCF(Crray Flag)2 PFPFPF(Parity Flag)4 AFAFAF(AuxiliaryCarryFlag)6 ZFZFZF(Zero Flag)7 SFSFSF(Sign Flag)11 OFOFOF(OverFlaw flag)进位标志位进位标志位进位标志位: 最高位往前的进(借)位CF=1偶奇标志位偶奇标志位偶奇标志位: 运算结果中低8位低8位低8位1的个数{偶数奇数PF=1PF=0辅助进位标志位辅助进位标志位辅助进位标志位: D3向D4有进(借)位时,AF=1零标志位零标志位零标志位: 运算结果为0时,ZF=1符号标志位符号标志位符号标志位: 最高位为1时,SF=1溢出标志位溢出标志位溢出标志位: 运算结果超过了带符号数的范围时,OF=1
(2) 控 制 标 志 位 \pmb{控制标志位} 控制标志位控制标志位控制标志位:可由程序根据需要用指令设置,用于控制处理器执行指令的方式
{ 8 T F ( T r a p F l a g ) 陷 阱 标 志 位 9 I F ( I n t e r r u p t − e n a b l e F l a g ) 中 断 允 许 标 志 位 10 D F ( D i r e c t i o n F l a g ) 方 向 标 志 位 \begin{cases} 8\ \pmb{TF}(Trap\ Flag)&\pmb{陷阱标志位}\\ 9\ \pmb{IF}(Interrupt-enable Flag)&\pmb{中断允许标志位}\\ 10\ \pmb{DF}(Direction\ Flag)&\pmb{方向标志位}\\ \end{cases} ⎩⎪⎨⎪⎧8 TFTFTF(Trap Flag)9 IFIFIF(Interrupt−enableFlag)10 DFDFDF(Direction Flag)陷阱标志位陷阱标志位陷阱标志位中断允许标志位中断允许标志位中断允许标志位方向标志位方向标志位方向标志位
所在位置:
(3)段寄存器(4个)
- 段寄存器保存的是内存逻辑段的段首地址(段基址CS)
- PA(物理地址)=段地址(段基址CS)*16+有效地址(偏移地址IP)
(在BIU的地址加法器 ∑ \sum ∑中完成)
段 寄 存 器 { C S ( c o d e s e g m e n t ) 代 码 段 寄 存 器 D S ( d a t a s e g m e n t ) 数 据 段 寄 存 器 S S ( s t a c k s e g m e n t ) 堆 栈 段 寄 存 器 E S ( e x t r a s e g m e n t ) 附 加 段 寄 存 器 段寄存器\begin{cases} CS(code\ segment)&\pmb{代码}段寄存器\\ DS(data\ segment)&\pmb{数据}段寄存器\\ SS(stack\ segment)&\pmb{堆栈}段寄存器\\ ES(extra\ segment)&\pmb{附加}段寄存器\\ \end{cases} 段寄存器⎩⎪⎪⎪⎨⎪⎪⎪⎧CS(code segment)DS(data segment)SS(stack segment)ES(extra segment)代码代码代码段寄存器数据数据数据段寄存器堆栈堆栈堆栈段寄存器附加附加附加段寄存器
什么是段寄存器?
- 计算机需要对内存分段,以分配给不同的程序使用,每一个段就有一个段基址,而段寄存器保存的就是这个段基址的高16位。
段寄存器是CPU对内存进行分段管理而设置的,当一个程序要执行时,就要决定程序代码、数据或堆栈各要用到内存的哪些位置,通过设定段寄存器指向内存对应段的起始位置。- 段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。(取指令)
- 段寄存器SS指向用于堆栈的内存段,SP是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶单元。另外,当偏移量用到了指针寄存器BP,则其缺省的段寄存器也是SS,并且用BP可访问整个堆栈,不仅仅是只访问栈顶。(堆栈操作)
- 段寄存器DS指向数据段,ES指向附加段,在存取操作数时,二者之一和一个偏移量合并就可得到存储单元的物理地址。该偏移量可以是具体数值、符号地址和指针寄存器的值等之一,具体情况将由指令的寻址方式来决定。
为什么要分段?
- 8086CPU提供了20位的地址总线,可寻址1MB存储空间,而8086内部寄存器都是16位的,寻址能力是64KB。
- 因此,为能实现对存储器寻址20位的物理地址,可将1MB的存储空间划分为若个逻辑段,每个逻辑段可寻址64KB。
- 各逻辑段之间可以部分、完全覆盖,连续、不连续等非常灵活。
二、8088/8086CPU引脚及功能
1. 引脚
8088
{
G
N
D
接
地
线
,
V
c
c
电
源
线
D
0
∼
D
7
数
据
总
线
(
8
位
)
A
0
∼
A
19
地
址
总
线
(
20
位
)
17
∼
34
控
制
总
线
8088\begin{cases} GND接地线,V_{cc}电源线\\ D_{0}\sim D_7\ 数据总线(\pmb{8位})\\ A_{0}\sim A_{19}\ 地址总线(20位)\\ _{17}\sim_{34}\ 控制总线\\ \end{cases}
8088⎩⎪⎪⎪⎨⎪⎪⎪⎧GND接地线,Vcc电源线D0∼D7 数据总线(8位8位8位)A0∼A19 地址总线(20位)17∼34 控制总线
8086
{
G
N
D
接
地
线
,
V
c
c
电
源
总
线
D
0
∼
D
15
数
据
总
线
(
16
位
)
A
0
∼
A
19
地
址
总
线
(
20
位
)
17
∼
34
控
制
总
线
8086\begin{cases} GND接地线,V_{cc}电源总线\\ D_{0}\sim D_{15}\ 数据总线(\pmb{16位})\\ A_{0}\sim A_{19}\ 地址总线(20位)\\ _{17}\sim_{34}\ 控制总线\\ \end{cases}
8086⎩⎪⎪⎪⎨⎪⎪⎪⎧GND接地线,Vcc电源总线D0∼D15 数据总线(16位16位16位)A0∼A19 地址总线(20位)17∼34 控制总线
控
制
线
:
A
L
E
、
I
O
/
M
‾
(
8086
:
M
/
I
O
‾
)
、
W
R
‾
控制线: ALE、IO / \overline{M}(8086:M/ \overline{IO})、\overline{WR}
控制线:ALE、IO/M(8086:M/IO)、WR
R
D
‾
、
R
E
A
D
Y
、
I
N
T
R
、
I
N
T
A
‾
、
N
M
I
\overline{RD}、READY、INTR、\overline{INTA}、NMI
RD、READY、INTR、INTA、NMI
H
O
L
D
、
H
L
D
A
、
R
E
S
E
T
、
V
C
C
、
G
N
D
HOLD、HLDA、RESET、VCC、GND
HOLD、HLDA、RESET、VCC、GND
复
用
{
8086
:
A
D
0
∼
A
D
15
(
16
个
地
址
/
数
据
复
位
引
脚
)
A
16
/
S
3
∼
A
19
/
S
6
8088
:
A
D
0
∼
A
D
7
(
8
个
地
址
/
数
据
复
位
引
脚
)
A
8
∼
A
15
A
16
/
S
3
∼
A
19
∼
A
19
/
S
6
复用\begin{cases} 8086:AD_0 \sim AD_{15}(16个地址/数据复位引脚)& A_{16} /S_3\sim A_{19}/S_6\\ 8088:AD_0 \sim AD_{7}( 8个地址/数据复位引脚)& A_8\sim A_{15}\quad A_{16}/S_3\sim A_{19}\sim A_{19}/S_6 \end{cases}
复用{8086:AD0∼AD15(16个地址/数据复位引脚)8088:AD0∼AD7(8个地址/数据复位引脚)A16/S3∼A19/S6A8∼A15A16/S3∼A19∼A19/S6
分
时
{
(
T
1
)
传
送
地
址
线
(
T
2
T
3
T
4
)
传
送
数
据
线
\pmb{分时}\begin{cases} (T_1)传送地址线\\ (T_2\ T_3\ T_4)传送数据线\\ \end{cases}
分时分时分时{(T1)传送地址线(T2 T3 T4)传送数据线
(8086CPU数据线和地址线是以分时复用方式轮流使用的。)
三
态
{
高
电
平
(
有
效
)
低
电
平
(
有
效
)
高
阻
状
态
(
无
效
、
悬
浮
)
\pmb{三态}\begin{cases} 高电平(有效)\\ 低电平(有效)\\ 高阻状态(无效、悬浮)\\ \end{cases}
三态三态三态⎩⎪⎨⎪⎧高电平(有效)低电平(有效)高阻状态(无效、悬浮)
(CPU在读入数据前,其
D
15
∼
D
0
D_{15}\sim D_0
D15∼D0线先变为了高阻状态。)
2. 控制线
33 M N / M X ‾ { = 1 M N 有 效 最 小 工 作 方 式 = 0 M X ‾ 有 效 最 大 工 作 方 式 _{33}MN/ \overline{MX}\begin{cases} =\pmb1\ MN有效\ \pmb{最小工作方式}\\ =\pmb0\ \overline{MX}有效\ \pmb{最大工作方式} \end{cases} 33MN/MX{=111 MN有效 最小工作方式最小工作方式最小工作方式=000 MX有效 最大工作方式最大工作方式最大工作方式
{
31
H
O
L
D
总
线
保
持
请
求
信
号
(
输
入
)
30
H
L
D
A
总
线
保
持
响
应
信
号
(
输
出
)
\begin{cases} _{31}HOLD&总线保持\pmb{请求}信号(\pmb{输入})\\ _{30}HLDA&总线保持\pmb{响应}信号(\pmb{输出})\\ \end{cases}
{31HOLD30HLDA总线保持请求请求请求信号(输入输入输入)总线保持响应响应响应信号(输出输出输出)
(HLDA是与HOLD配合使用的联络信号;在HLDA有效期间,HLDA引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,CPU让出对总线的控制权,将其交付给申请使用总线的8237A控制器使用,总线使用完后,会使HOLD信号变为低电平,CPU又重新获得对总线的控制权。)
{ 18 I N T R 高 电 平 中 断 请 求 信 号 ( 输 入 ) 24 I N T A ‾ 低 电 平 中 断 响 应 信 号 ( 输 出 ) \begin{cases} _{18}INTR&高电平\pmb{中断请求}信号(\pmb{输入})\\ _{24}\overline{INTA}&低电平\pmb{中断响应}信号(\pmb{输出})\\ \end{cases} {18INTR24INTA高电平中断请求中断请求中断请求信号(输入输入输入)低电平中断响应中断响应中断响应信号(输出输出输出)
25 A L E ( 地 址 锁 存 器 允 许 信 号 ) 为 高 电 平 时 表 明 C P U 地 址 线 上 有 有 效 地 址 。 _{25}ALE(地址锁存器允许信号 )\ 为高电平时 表明CPU地址线上有 有效地址。 25ALE(地址锁存器允许信号) 为高电平时表明CPU地址线上有有效地址。 因 此 , 他 常 作 为 锁 存 控 制 信 号 将 A 0 ∼ A 19 锁 存 到 地 址 锁 存 器 。 因此,他常作为锁存控制信号将A_0\sim A_{19}锁存到地址锁存器。 因此,他常作为锁存控制信号将A0∼A19锁存到地址锁存器。
外部中断请求线 | 17 N M I _{17}\ \pmb{N\ M\ I\ } 17 N M I N M I N M I | 18 I N T R _{18}\ \pmb{I\ N\ T\ R} 18 I N T RI N T RI N T R |
---|---|---|
名称 | 非 屏 蔽 中 断 请 求 信 号 \pmb{非屏蔽中断请求信号} 非屏蔽中断请求信号非屏蔽中断请求信号非屏蔽中断请求信号 | 可 屏 蔽 中 断 信 号 \pmb{可屏蔽中断信号} 可屏蔽中断信号可屏蔽中断信号可屏蔽中断信号 |
中断类型 | 外中断 | 外中断 |
中断类型号 | 2型 | 由外设提供n |
IF | 无关 | I F = 1 开 中 断 I F = 0 关 中 断 \pmb{IF=1开中断 IF=0关中断} IF=1开中断IF=0关中断IF=1开中断IF=0关中断IF=1开中断IF=0关中断 |
触发方式 | 边沿(上升沿) | 高电平有效 |
响应信号 | 无 | I N T A ‾ \overline{INTA} INTA |
响应条件 | 当 前 指 令 执 行 结 束 \pmb{当前指令执行结束} 当前指令执行结束当前指令执行结束当前指令执行结束 | 开 中 断 ( I F = 1 ) ; 指 令 结 束 开中断(IF=1);指令结束 开中断(IF=1);指令结束 |
N
M
I
{
1.
系
统
板
的
R
A
M
在
读
写
时
产
生
奇
偶
校
验
错
2.
I
/
O
通
道
中
的
扩
展
选
件
出
现
奇
偶
校
验
错
3.
协
处
理
器
8087
(
浮
点
处
理
器
)
的
异
常
状
态
产
生
的
中
断
。
4.
N
M
I
(
2
型
中
断
)
以
及
其
他
内
中
断
号
由
系
统
预
设
。
NMI\begin{cases} 1.\ 系统板的RAM在读写时产生奇偶校验错\\ 2.\ I/O通道中的扩展选件出现奇偶校验错\\ 3.\ 协处理器8087(浮点处理器)的异常状态产生的中断。\\ 4.\ NMI(2型中断)以及其他内中断号由系统预设。 \end{cases}
NMI⎩⎪⎪⎪⎨⎪⎪⎪⎧1. 系统板的RAM在读写时产生奇偶校验错2. I/O通道中的扩展选件出现奇偶校验错3. 协处理器8087(浮点处理器)的异常状态产生的中断。4. NMI(2型中断)以及其他内中断号由系统预设。
I
N
T
R
的
中
断
号
由
8259
A
中
断
控
制
器
(
芯
片
)
提
供
INTR的中断号由8259A中断控制器(芯片)提供
INTR的中断号由8259A中断控制器(芯片)提供
26
D
E
N
‾
(
数
据
允
许
信
号
)
{
=
1
数
据
总
线
上
无
有
效
数
据
=
0
数
据
总
线
上
有
有
效
数
据
_{26}\overline{DEN}(_{数据允许信号}) \begin{cases} =1 &数据总线上无有效数据\\=0& \pmb{数据总线上有有效数据}\\\end{cases}
26DEN(数据允许信号){=1=0数据总线上无有效数据数据总线上有有效数据数据总线上有有效数据数据总线上有有效数据
(
D
E
N
‾
向
总
线
收
发
器
8286
发
出
的
信
号
\overline{DEN}向总线收发器8286发出的信号
DEN向总线收发器8286发出的信号)
27 D T / R ‾ ( 数 据 传 送 方 向 ) { = 1 D T 有 效 C P U 向 主 存 或 I / O 接 口 发 送 数 据 ( 输 出 ( 写 操 作 ) ) = 0 R ‾ 有 效 C P U 从 主 存 或 I / O 接 口 接 收 数 据 ( 输 入 ( 读 操 作 ) ) _{27}DT/ \overline{R}(_{数据传送方向}) \begin{cases} =1& DT有效&CPU向主存或I/O接口\pmb{发送}数据(\pmb{输出}(写操作))\\ =0& \overline{R}\ 有效&CPU从主存或I/O接口\pmb{接收}数据(\pmb{输入}(读操作))\\ \end{cases} 27DT/R(数据传送方向){=1=0DT有效R 有效CPU向主存或I/O接口发送发送发送数据(输出输出输出(写操作))CPU从主存或I/O接口接收接收接收数据(输入输入输入(读操作))
( 8088 ) 28 I O / M ‾ { = 1 I O 有 效 访 问 I / 0 接 口 = 0 M ‾ 有 效 访 问 主 存 (_{8088})_{28}IO/\overline{M}\begin{cases} =1& IO有效&访问I/0接口\\ =0& \overline{M}有效&访问主存\\ \end{cases} (8088)28IO/M{=1=0IO有效M有效访问I/0接口访问主存
(
8086
)
28
M
/
I
O
‾
{
=
1
M
有
效
访
问
主
存
=
0
I
O
‾
有
效
访
问
I
/
0
接
口
(_{8086})_{28}M/ \overline{IO}\begin{cases} =1& M有效&访问主存\\ =0& \overline{IO}有效&访问I/0接口\\ \end{cases}
(8086)28M/IO{=1=0M有效IO有效访问主存访问I/0接口
32
R
D
‾
{
=
1
无
读
信
号
=
0
读
信
号
_{32}\overline{RD}\begin{cases} =1&无读信号\\ =0&读信号\\ \end{cases}
32RD{=1=0无读信号读信号
29
W
R
‾
{
=
1
无
写
信
号
=
0
写
信
号
_{29}\overline{WR}\begin{cases} =1&无写信号\\ =0&写信号\\ \end{cases}
29WR{=1=0无写信号写信号
22
R
E
A
D
Y
{
=
1
已
准
备
好
C
P
U
与
外
设
进
行
数
据
传
输
=
0
未
准
备
好
_{22}READY\begin{cases}=1&已准备好_{CPU与外设进行数据传输}\\ =0&未准备好\end{cases}
22READY{=1=0已准备好CPU与外设进行数据传输未准备好
21
R
E
S
E
T
(
复
位
)
{
初
始
化
C
P
U
除
C
S
=
F
F
F
F
H
,
其
他
的
寄
存
器
清
零
_{21}RESET(_{复位})\begin{cases}初始化CPU\\除CS=FFFFH, 其他的寄存器清零\end{cases}
21RESET(复位){初始化CPU除CS=FFFFH,其他的寄存器清零
19
C
L
K
(
时
钟
信
号
输
入
引
脚
)
_{19}CLK(_{时钟信号输入引脚})
19CLK(时钟信号输入引脚)
40
V
c
c
(
5
V
电
源
输
入
引
脚
)
_{40}V_{cc}(_{5V电源输入引脚})
40Vcc(5V电源输入引脚)
1
G
N
D
(
接
地
线
)
_{1}GND(_{接地线})
1GND(接地线)
8088和8086区别:
- 数据总线位数的差别:8088:8位,8086:16位
- 指令队列容量的差别:8088:4字节,8086:6字节
- 引脚的差别: { A D 15 ∼ A D 0 的 定 义 不 同 34 号 引 脚 的 定 义 不 同 。 8086 为 B H E ‾ 28 号 引 脚 不 同 { 8088 : I O / M ‾ ( 低 电 平 ) 8086 : M / I O ‾ ( 低 电 平 ) \begin{cases}AD_{15}\sim AD_0的定义不同\\ 34号引脚的定义不同。 8086为\overline{BHE}\\ 28号引脚不同 \begin{cases} 8088:IO / \overline{M}(低电平)\\ 8086:M / \overline{IO}(低电平)\\ \end{cases} \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧AD15∼AD0的定义不同34号引脚的定义不同。8086为BHE28号引脚不同{8088:IO/M(低电平)8086:M/IO(低电平)
三、8088/8086CPU工作模式
CPU工作模式的选择是由硬件决定的
1.最小工作模式
工作模式: M N / M X ‾ = 1 最 小 工 作 模 式 MN/ \overline{MX} = 1\ 最小工作模式 MN/MX=1 最小工作模式
- 系统中只有一个8088/8086微处理器。
- 最小模式是单处理器系统。
- 系统中所需要的控制信号全部由8088/8086CPU本身直接提供。
(最小模式下的HDLD和HLDA信号支持DMA工作)
(在最小8086模式下,分时使用 A D 0 − A D 15 AD_0 - AD_{15} AD0−AD15,所以必须外接地址锁存器,当总线上为地址信息时,通过ALE信号将地址送入地址锁存器。) - 在8086最小工作模式下,决定CPU最终接受或发送数据的引脚是 D T / R ‾ DT/ \overline{R} DT/R。
- 引脚 M N / M X ‾ MN/\overline{MX} MN/MX接Vcc(高电平有效)
8284:时钟信号发生器
8282:地址锁存器
8286:双向总线收发器( 8086 最 小 工 作 模 式 下 需 要 2 片 8086最小工作模式下需要\pmb{2}片 8086最小工作模式下需要222片)
(为8086/8088增加驱动能力作用的功率放大器。)
2.最大工作模式
工作模式:
M
N
/
M
X
‾
=
0
最
大
工
作
模
式
MN/ \overline{MX} = 0\ 最大工作模式
MN/MX=0 最大工作模式
- 系统中除了主处理器8088/8086,还有协处理器
(8087 算术协处理器 或 8089输入/输出协处理器(IOP)) - 最大模式可构成多处理器系统
- 系统中所需要的控制信号由总线控制器8288和总线仲裁器8289提供。
(最大模式的 R Q 0 / 1 / G T 0 / 1 信 号 支 持 8087 和 8089 RQ_{0/1}/GT_{0/1}信号支持8087和8089 RQ0/1/GT0/1信号支持8087和8089,实现总线的请求和控制) - 引脚 M N / M X ‾ MN/\overline{MX} MN/MX接地(GND)(低电平有效)
四、8088/8086CPU操作时序
1. 基本概念
(1)时钟周期 T ( s ) = 1 f c l k ( H z ) T(s)=\frac{1}{f_{clk}}(Hz) T(s)=fclk1(Hz)
例: f c l k = 5 M H z , T c l k = f_{clk}=5MHz,T_{clk}= fclk=5MHz,Tclk=
T c l k = 1 5 M H z = 1 5 ∗ 1 0 6 H z T_{clk}=\frac{1}{5MHz}=\frac{1}{5*10^6Hz} Tclk=5MHz1=5∗106Hz1
= 1 5 ∗ 1 0 − 6 s =\frac{1}{5}*10^{-6}s =51∗10−6s
= 0.2 ∗ 1 0 − 6 s =0.2*10^{-6}s =0.2∗10−6s
= 0.2 μ s ( 或 200 n s ) =0.2μs(或200ns) =0.2μs(或200ns)
( 1 H z = 1 0 3 K H z ( 千 赫 兹 ) = 1 0 6 M H z ( 兆 赫 兹 ) = 1 0 9 G H z ( 千 兆 赫 兹 ) 1Hz=10^{3}KHz(千赫兹)=10^6MHz(兆赫兹)=10^9GHz(千兆赫兹) 1Hz=103KHz(千赫兹)=106MHz(兆赫兹)=109GHz(千兆赫兹))
( 1 s = 1 0 − 3 m s ( 毫 秒 ) = 1 0 − 6 μ s ( 微 秒 ) = 1 0 − 9 n s ( 纳 秒 ) 1s=10^{-3}ms(毫秒)=10^{-6}\mu s(微秒)=10^{-9}ns(纳秒) 1s=10−3ms(毫秒)=10−6μs(微秒)=10−9ns(纳秒))
主频倒数是时钟周期,例如主频单位MHz,变为时钟周期后对应μs微秒
(2) 总线周期/机器周期
- 基本的总线周期由4个时钟周期( T 1 , T 2 , T 3 , T 4 T_1,T_2,T_3,T_4 T1,T2,T3,T4)
- T 1 状 态 T_1状态 T1状态:CPU输出20位地址信息, B H E ‾ \overline{BHE} BHE和 A L E ALE ALE有效,在 A L E ALE ALE信号下降沿将20位地址和 B H E ‾ \overline{BHE} BHE信号锁存入锁存器8282。
- T 2 状 态 T_2状态 T2状态: S 6 ∼ S 3 S_6\sim S_3 S6∼S3,状态信号有效,保持到读周期结束。 A D 15 ∼ A D 0 AD_{15}\sim AD_0 AD15∼AD0为高阻状态,为读入数据作准备。
R D ‾ \overline{RD} RD有效,送存储器或I/O端口,开始读取数据。 D E N ‾ \overline{DEN} DEN有效,启动收发器8286,准备接收数据。*- T 3 状 态 T_3状态 T3状态:在基本总线周期中,数据准备好,在 T 3 T_3 T3状态期间将数据放到数据总线上,在 T 3 T_3 T3结束时,CPU从 A D 15 ∼ A D 0 AD_{15}\sim AD_0 AD15∼AD0上读取数据。
- T 4 状 态 T_4状态 T4状态:CPU对数据总线进行采样,读取数据。
- 是CPU进行一次读/写的时间,也是启用一次总线进行数据入\出的时间。
- 当外设不能在 T 1 ∼ T 4 T_1\sim T_4 T1∼T4实现数据传输时,要在 T 3 , T 4 T_3,T_4 T3,T4之间插入等待周期 T w T_w Tw
(3)指令周期:完成一条指令的时间
例:MOV AL, 5
- 取指令:MOV → \rightarrow → CPU
- 分析译码
- 执行: 5 → \rightarrow → AL
MOV → \rightarrow → CPU
指 令 周 期 { M O V → C P U } 总 线 周 期 5 → A L } 总 线 周 期 \pmb{指令周期}\begin{cases} \left. \begin{matrix} MOV \rightarrow CPU \\ \end{matrix} \right\}\pmb{总线周期}\\ \left. \begin{matrix} 5 \rightarrow AL\\ \end{matrix} \right\}\pmb{总线周期}\\ \end{cases} 指令周期指令周期指令周期{MOV→CPU}总线周期总线周期总线周期5→AL}总线周期总线周期总线周期MOV指令两个总线周期
例:ADD AX,[3000H]
- 取值:取指令ADD到CPU,分析ADD功能
- 相加:取AX和3000H的内容并相加
- 赋值:结果存入AX寄存器中
ADD指令三个总线周期
HLT (停机)一个总线周期
不同指令,指令周期长度不同,所需周期个数也不同。
时
钟
频
率
又
称
主
频
f
,
它
是
指
C
P
U
内
部
晶
振
的
频
率
,
常
用
单
位
为
M
H
z
,
它
反
映
了
C
P
U
的
基
本
工
作
节
拍
。
时钟频率又称主频 f ,它是指CPU内部晶振的频率,常用单位为MHz,它反映了CPU的基本工作节拍。
时钟频率又称主频f,它是指CPU内部晶振的频率,常用单位为MHz,它反映了CPU的基本工作节拍。
时
钟
周
期
t
:
t
=
1
/
f
;
(
主
频
的
倒
数
)
时钟周期t : t =1/ f; (主频的倒数)
时钟周期t:t=1/f;(主频的倒数)
(总线周期包含4个时钟周期,
t
∗
4
t*4
t∗4)
机
器
周
期
:
m
∗
t
;
一
个
机
器
周
期
包
含
若
干
个
(
m
个
)
时
钟
周
期
机器周期 : m*t ;一个机器周期包含若干个(m个)时钟周期
机器周期:m∗t;一个机器周期包含若干个(m个)时钟周期
指
令
周
期
:
m
∗
t
∗
n
;
执
行
一
条
指
令
所
需
要
的
时
间
,
一
般
包
含
若
干
个
(
n
个
)
机
器
周
期
指令周期:m*t*n; 执行一条指令所需要的时间,一般包含若干个(n个)机器周期
指令周期:m∗t∗n;执行一条指令所需要的时间,一般包含若干个(n个)机器周期
M
I
P
S
=
每
秒
执
行
百
万
条
指
令
数
=
1
/
(
指
令
周
期
×
10
的
6
次
方
)
MIPS = 每秒执行百万条指令数 = 1/(指令周期×10的6次方)
MIPS=每秒执行百万条指令数=1/(指令周期×10的6次方)
( 1 H z = 1 0 3 K H z ( 千 赫 兹 ) = 1 0 6 M H z ( 兆 赫 兹 ) = 1 0 9 G H z ( 千 兆 赫 兹 ) 1Hz=10^{3}KHz(千赫兹)=10^6MHz(兆赫兹)=10^9GHz(千兆赫兹) 1Hz=103KHz(千赫兹)=106MHz(兆赫兹)=109GHz(千兆赫兹))
( 1 s = 1 0 − 3 m s ( 毫 秒 ) = 1 0 − 6 μ s ( 微 秒 ) = 1 0 − 9 n s ( 纳 秒 ) 1s=10^{-3}ms(毫秒)=10^{-6}\mu s(微秒)=10^{-9}ns(纳秒) 1s=10−3ms(毫秒)=10−6μs(微秒)=10−9ns(纳秒))
主频倒数是时钟周期,例如主频单位MHz,变为时钟周期后对应μs微秒
(4)等待周期( T w T_w Tw)
READY=1(或H(高电平)):外设就绪,CPU继续读/写。
READY=0(或L(低电平)):未就绪(CPU要在
T
3
T_3
T3之后插入多个等待周期
T
w
T_w
Tw)
(5)空闲周期( T i T_i Ti)
总线周期之间插入的空闲时间。
2. 基本操作
- RESET(复位) 高电平有效(CPU初始化), 低电平无效
- 8086时钟信号CLK和刚上电时的复位信号RESET应该由8284时钟发生器来产生。
- 由低到高(时序图)才是复位
- 至少需要4个 T c l k T_{clk} Tclk高电平
- 除CS=FFFFH,其他的寄存器都要清零。所以程序入口在物理地址 0FFFF0H 位置处
逻 辑 地 址 ( C S : I P ) : ( F F F F H : 0000 H ) 逻辑地址 (CS:IP) :(FFFFH:0000H) 逻辑地址(CS:IP):(FFFFH:0000H)
物 理 地 址 ( 20 位 ) ( C S ∗ 16 + I P ) : F F F F H ∗ 16 + 0 = F F F F 0 H 物理地址(20位)(CS*16+IP):FFFFH*16 +0 = FFFF0H 物理地址(20位)(CS∗16+IP):FFFFH∗16+0=FFFF0H
(0FFFF0H是CPU复位以后执行的第一条指令()的地址。)
- 在复位后由于标志寄存器的各位均被清零,使IF=0,处于关中断状态,8086/8088CPU不能响应可屏蔽的中断请求。
- 因而在系统程序的初始化时,用指令STI使标志寄存器中的IF=1(开中断),以使CPU能够响应可屏蔽中断请求。(允许高一级中断产生)
五、中断
1. 基本概念
当CPU执行主程序时,由内/外事件使得CPU暂时中止当前程序的运行,转而去执行中断服务子程序,当子程序执行完后,返回主程序的过程。
中
断
源
{
外
部
中
断
内
部
中
断
中断源\begin{cases} 外部中断\\ 内部中断 \end{cases}
中断源{外部中断内部中断
(1) 外部中断(外设产生的中断)
外部中断是由于86/88外部提出中断请求引起的程序中断。
利用外部中断,微机系统可以实时响应,能够及时处理外部意外或紧急事件。
外部中断是外设随机产生的,是真正的中断(Interrupt)。
1. 可屏蔽中断请求信号:INTR
可屏蔽中断特点:
{
①
外
设
通
过
I
N
T
R
向
微
处
理
器
提
出
中
断
请
求
,
在
允
许
中
断
、
并
且
当
前
指
令
执
行
结
束
后
予
以
响
应
,
输
出
I
N
T
A
。
②
I
F
=
1
,
开
中
断
,
允
许
响
应
;
I
F
=
0
,
禁
止
中
断
。
③
中
断
向
量
号
由
中
断
控
制
器
8259
(
接
口
芯
片
)
提
供
。
④
可
屏
蔽
中
断
主
要
用
于
主
机
与
外
设
交
换
数
据
。
\begin{cases}①外设通过INTR向微处理器提出中断请求,在允许中断、并且当前指令执行结束后予以响应,输出INTA。\\ ②IF=1,开中断,允许响应;IF=0,禁止中断。\\ ③中断向量号由中断控制器8259(接口芯片)提供。\\ ④可屏蔽中断主要用于主机与外设交换数据。\end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧①外设通过INTR向微处理器提出中断请求,在允许中断、并且当前指令执行结束后予以响应,输出INTA。②IF=1,开中断,允许响应;IF=0,禁止中断。③中断向量号由中断控制器8259(接口芯片)提供。④可屏蔽中断主要用于主机与外设交换数据。
中断标志IF状态:
- I F = 1 : 可 屏 蔽 中 断 会 被 响 应 { 开 中 断 、 允 许 中 断 、 中 断 开 放 执 行 指 令 S T I , 使 I F = 1 IF=1:可屏蔽中断会被响应\begin{cases} 开中断、允许中断、中断开放\\ 执行指令STI,使IF=1\end{cases} IF=1:可屏蔽中断会被响应{开中断、允许中断、中断开放执行指令STI,使IF=1
- I F = 0 : 可 屏 蔽 中 断 不 会 被 响 应 { 关 中 断 、 禁 止 中 断 、 中 断 屏 蔽 系 统 复 位 , 使 I F = 0 任 何 一 个 中 断 被 响 应 , 使 I F = 0 执 行 指 令 C L I , 使 I F = 0 IF=0:可屏蔽中断不会被响应\begin{cases}\\ 关中断、禁止中断、中断屏蔽\\ 系统复位,使IF=0\\ 任何一个中断被响应,使IF=0\\ 执行指令CLI,使IF=0 \end{cases} IF=0:可屏蔽中断不会被响应⎩⎪⎪⎪⎨⎪⎪⎪⎧关中断、禁止中断、中断屏蔽系统复位,使IF=0任何一个中断被响应,使IF=0执行指令CLI,使IF=0
- 执 行 指 令 I R E T 恢 复 原 I F 状 态 执行指令IRET恢复原IF状态 执行指令IRET恢复原IF状态
可屏蔽中断的响应条件:
-
现
行
指
令
结
束
:
现行指令结束:
现行指令结束:
88/86CPU在当前指令的最后一个机器周期的最后一个T状态采样INTR线,查看是否有; -
C
P
U
开
放
中
断
:
CPU开放中断:
CPU开放中断:
CPU中标志寄存器的F位为1,中断开放; -
没
有
更
高
优
先
级
的
请
求
没有更高优先级的请求
没有更高优先级的请求
没有复位RESET信号、DMA、内部中断和不可屏蔽中断请求; - C P U 没 有 正 在 为 高 级 的 可 屏 蔽 中 断 服 务 CPU没有正在为高级的可屏蔽中断服务 CPU没有正在为高级的可屏蔽中断服务
2. 非屏蔽中断请求信号:NMI
{ ① 通 过 N M I 向 微 处 理 器 提 出 的 中 断 请 求 。 ② 微 处 理 器 无 法 禁 止 ( 非 屏 蔽 ) 。 ③ 在 当 前 指 令 执 行 结 束 后 予 以 响 应 。 ④ 中 断 向 量 号 为 2 ⑤ 主 要 用 于 处 理 系 统 的 意 外 或 故 障 。 { 电 源 掉 电 前 的 数 据 保 护 存 储 器 读 写 错 误 的 处 理 \begin{cases}①通过NMI向微处理器提出的中断请求。\\ ②微处理器无法禁止(非屏蔽)。\\ ③在当前\pmb{指令执行结束后予以响应。}\\ ④中断向量号为2\\ ⑤主要用于处理系统的意外或故障。 \begin{cases} 电源掉电前的数据保护\\ 存储器读写错误的处理 \end{cases} \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧①通过NMI向微处理器提出的中断请求。②微处理器无法禁止(非屏蔽)。③在当前指令执行结束后予以响应。指令执行结束后予以响应。指令执行结束后予以响应。④中断向量号为2⑤主要用于处理系统的意外或故障。{电源掉电前的数据保护存储器读写错误的处理
(2)内部
中断(软件中断、程序指令中断)
内部中断是由于8088内部执行程序出现异常引起的程序中断。
例如:ROM-BIOS和DOS系统利用内部中断为程序员提供了各种功能调用。
内部中断是执行程序出现异常,经常被称为异常(Exception)。
1. 除法出错中断(0型中断)
在执行除法指令时,若除数为О或商超过了寄存器所能表达的范围,则产生一个向量号为0的内部中断,称为除法错中断。
2. 单步中断(1型中断)
若单步中断TF为1,则在每条指令执行结束后产生一个向量号为1的内部中断,称为单步中断。
3. 断点中断(3型中断)
向量号为3的指令中断比较特别,常用于程序调试,被称为断点中断。
4. 溢出中断(4型中断)
在执行溢出中断指令INTO时,若溢出标志OF为1,则产生一个向量号为4的内部中断,被称为溢出中断。
5. 指令中断(n型中断)
在执行中断调用指令IN工时产生的一个向量号为n (0~255)的内部中断,称为指令中断。
2. 中断类型码(中断向量码)
- n:0,1,2,3,4
- 为区别不同类型的中断,系统为每个中断源设置的编号
- 用 0 ∼ 255 ( 00 H ∼ F F H ) 表 示 ( 8086 中 断 系 统 可 处 理 256 种 不 同 的 中 断 ) 0\sim 255(00H\sim FFH)表示(8086中断系统可处理256种不同的中断) 0∼255(00H∼FFH)表示(8086中断系统可处理256种不同的中断)
- I N T n = 21 H INT\ n=21H INT n=21H :DOS功能调用中断
- I N T n 的 中 断 号 由 指 令 直 接 给 出 INT\ n的中断号由指令直接给出 INT n的中断号由指令直接给出
- 每 个 中 断 类 型 码 与 一 个 中 断 向 量 相 对 应 每个中断类型码与一个中断向量相对应 每个中断类型码与一个中断向量相对应。
3. 中断向量
中断向量的逻辑地址(入口地址)由CS:IP表示。
例:CS=1000H,IP=1230H
逻 辑 地 址 : C S : I P 1000 H : 1230 H 逻辑地址:CS:IP\qquad 1000H:1230H 逻辑地址:CS:IP1000H:1230H
物 理 地 址 : C S ∗ 16 + I P 1000 H ∗ 16 + 1230 H = 11230 H 物理地址: CS*16+IP\qquad 1000H*16+1230H=11230H 物理地址:CS∗16+IP1000H∗16+1230H=11230H
4. 中断向量表
- 存放中断向量(中断服务程序的入口地址)内存空间。
- 88/86系统内存中共存放256个中断向量,每个中断向量(低字单元是偏移地址IP、高字单元是段地址CS)占4个字节,共占用1KB
- 物理地址0000H ~ 03FF地址中依次安排各个中断向量,向量号从0开始
5. 向量表地址
- 中断向量在中断向量表中的位置
- 向 量 表 的 入 口 { n 型 中 断 ∗ 4 从 此 处 读 出 4 字 节 内 容 即 为 中 断 向 量 向量表的入口\begin{cases}\pmb{n型中断*4}\\ 从此处读出4字节内容即为中断向量\end{cases} 向量表的入口{n型中断∗4n型中断∗4n型中断∗4从此处读出4字节内容即为中断向量
例:中断类型码21H,求中段向量表地址
① 21 H ∗ 4 = 84 H ①21H*4 = 84H ①21H∗4=84H
② 中 断 向 量 表 地 址 : 84 H ∼ 87 H ②中断向量表地址:84H\sim87H ②中断向量表地址:84H∼87H
例:已知中断类型码0BH,则中断向量CS=2030H,IP=4050H在内存中存放地址是多少
① 0 B H ∗ 4 = 2 C H ①0BH*4=2CH ①0BH∗4=2CH
② 存 放 地 址 是 : 2 C H ∼ 2 F H ②存放地址是:2CH\sim2FH ②存放地址是:2CH∼2FH
例:8086微机系统中,NMI中断向量的位置(B)。
A. 由程序指定
B. 固定在00008H开始的4个字节中
C. 由操作系统自动分配
D. 固定在中断向量的表首地址中
①NMI(2型中断)2H*4=8H
例:根据下面所提供的某80X86微机内存中的数据,判断INT 11H中断服务程序的入口地址是(F000H:F84DH)
0000 : 0040 B 3 18 8 A C C 4 D F 8 00 F 0 41 F 8 00 F 0 C 5 18 8 A C C 0000:0040\quad B3\ 18\ 8A\ CC\ 4D\ F8\ 00\ F0\ 41\ F8\ 00\ F0\ C5\ 18\ 8A\ CC 0000:0040B3 18 8A CC 4D F8 00 F0 41 F8 00 F0 C5 18 8A CC
0000 : 0050 39 E 7 00 F 0 A 0 19 8 A C C 2 E E 8 00 F 0 D 2 E F 00 F 0 0000:0050\quad 39\ E7\ 00\ F0\ A0\ 19\ 8A\ CC\ 2E\ E8\ 00\ F0\ D2\ EF\ 00 F0 0000:005039 E7 00 F0 A0 19 8A CC 2E E8 00 F0 D2 EF 00F0
① n = 11 H ① n=11H ①n=11H
② 11 H ∗ 4 = 44 H ②11H*4=44H ②11H∗4=44H
③ 从 0044 H 去 两 个 字 分 别 给 C S : I P , 得 C S = F 000 H , I P = F 84 D H ③ 从0044H去两个字分别给CS:IP,得CS=F000H,IP=F84DH ③从0044H去两个字分别给CS:IP,得CS=F000H,IP=F84DH
④ C S : I P = F 000 H : F 84 D H ( 逻 辑 ( 入 口 ) 地 址 ) ④CS:IP=F000H:F84DH(逻辑(入口)地址) ④CS:IP=F000H:F84DH(逻辑(入口)地址)
4.8086内存的前1k字节建立了中断向量表。如果有中断向量表指针是004CH,假设由该指针起的四个内存单元中顺序存放着12H,34H,56H,78H
则中断服务程序入口地址是 __ 7856H:3412H ___
中断向量号是 __ 13 ___
n ∗ 4 = 004 C H n*4=004CH n∗4=004CH
n = 13 n=13 n=13
6. 中断嵌套
- 优点
提高中断响应的实时性,保证系统能够及时响应优先级较高的请求。 - 实现条件
{ ① 中 断 请 求 的 优 先 级 高 于 正 在 执 行 的 中 断 处 理 程 序 的 优 先 级 。 ② 如 果 是 外 中 断 , C P U 的 P S W 的 I F = 1 开 中 断 。 ③ 没 有 不 可 屏 蔽 中 断 请 求 和 总 线 请 求 。 \begin{cases}①中断请求的优先级高于正在执行的中断处理程序的优先级。\\ ②如果是外中断,CPU的PSW的IF=1开中断。\\ ③没有不可屏蔽中断请求和总线请求。\end{cases} ⎩⎪⎨⎪⎧①中断请求的优先级高于正在执行的中断处理程序的优先级。②如果是外中断,CPU的PSW的IF=1开中断。③没有不可屏蔽中断请求和总线请求。
7. 中断过程
五个步骤:
1. 中 断 请 求 \pmb{中断请求} 中断请求中断请求中断请求
2. 中 断 优 先 级 判 定 \pmb{中断优先级判定} 中断优先级判定中断优先级判定中断优先级判定
中断优先级:
{
软
件
(
内
)
中
断
{
除
法
错
中
断
(
0
型
中
断
)
高
指
令
中
断
(
3
型
中
断
)
↓
溢
出
中
断
(
4
型
中
断
)
↓
非
屏
蔽
中
断
N
M
I
(
2
型
)
↓
可
屏
蔽
中
断
I
N
T
R
↓
单
步
中
断
(
1
型
)
低
\begin{cases} 软件(内)中断 \begin{cases} 除法错中断(0型中断)\quad\ 高\\ 指令中断(3型中断)\quad\quad\ \downarrow\\ 溢出中断(4型中断)\quad\quad\ \downarrow\\ \end{cases}\\ 非屏蔽中断NMI(2型)\qquad\qquad\qquad\qquad\quad\downarrow\\ 可屏蔽中断INTR\quad\qquad\qquad\qquad\qquad\qquad\quad\downarrow\\ 单步中断(1型)\quad\quad\qquad\qquad\qquad\qquad\qquad\ 低 \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧软件(内)中断⎩⎪⎨⎪⎧除法错中断(0型中断) 高指令中断(3型中断) ↓溢出中断(4型中断) ↓非屏蔽中断NMI(2型)↓可屏蔽中断INTR↓单步中断(1型) 低
3. 中 断 响 应 \pmb{中断响应} 中断响应中断响应中断响应
响 应 条 件 : { 1. C P U 必 须 执 行 完 当 前 的 指 令 2. C P U 处 于 开 中 断 3. 不 能 有 更 高 级 ( 优 先 级 ) 的 中 断 请 求 响应条件:\begin{cases}1.\ CPU必须执行完当前的指令\\ 2.\ CPU处于开中断\\ 3.\ 不能有更高级(优先级)的中断请求\end{cases} 响应条件:⎩⎪⎨⎪⎧1. CPU必须执行完当前的指令2. CPU处于开中断3. 不能有更高级(优先级)的中断请求
中断响应过程:
CPU在每执行完一条指令后,如果允许CPU响应,则CPU自动完成以下工作:
①取中断类型号N。启动中断响应总线操作,在第2个中断响应总线周期读取中断类型号N。
②标志寄存器入栈。执行1个总线写周期,将PSW的内容压入堆栈。
③清除IF和TF标志。禁止硬件中断和单步中断,使IF=0和TF=0。
④CS和IP入栈。执行2个总线写周期,依次将CS和lP内容压入堆栈。
⑤获取中断向量。执行2个总线读周期,在中断向量表中的N×4开始的单元取两个字分别送IP和CS,获取中断处理程序入口地址。CPU从新的CS:IP值开始执行中断处理子程序。
中断响应流程图:
中断响应时序图
4. 中 断 处 理 \pmb{中断处理} 中断处理中断处理中断处理
5. 中 断 返 回 \pmb{中断返回} 中断返回中断返回中断返回
中断服务子程序的一般构成
本文仅供本人学习总结使用,文中观点,均为本人拙见,如有 错误或不妥之处,请及时指正。