微机原理与接口技术 第二章 十六位微处理器(河北专升本计算机)

一、功能结构类型,寄存器类型

1. 功能结构

在这里插入图片描述

功能结构特点:

  1. BIU和EU并不是同步工作的,它们按指令流水线原则协调管理:两个部件相互独立、相互配合。
  2. 在时间上它们是并行工作,即CPU的EU在执行指令的同时BIU进行取指操作
  3. 提高了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.(){CPUBIUEUI/0EM(){EUI/O

  1. 把16位的段地址和16位的位移量,经过地址加法器 ∑ \sum 形成20位的物理地址(地址总线)
  2. 以此访问 主 存 ( 最 大 寻 址 空 间 2 20 b y t e = 1 M B ) ( 20 根 地 址 线 的 空 间 大 小 ) \pmb{主存(最大寻址空间2^{20}byte=1MB)}(20根地址线的空间大小) 220byte=1MB主存(最大寻址空间220byte=1MB220byte=1MB20线
    I / O 接 口 ( 最 大 寻 址 空 间 2 16 b y t e = 64 K B ) \pmb{I/O接口(最大寻址空间2^{16}byte=64KB)} I/O216byte=64KBI/O接口(最大寻址空间216byte=64KBI/O216byte=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} {8ALBLCLDL8AHBHCHDH

指针寄存器用于寻址内存堆栈内的数据
{ 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(FlagPSWFR)指令指针标志位

① IP 指令指针寄存器

(指示存储器指令的地址)

  1. 随着指令的执行,IP将自动修改以指示下一条指令所在的存储单元位置。
  2. IP寄存器是一个专用寄存器
  3. IP寄存器与CS段寄存器联合使用以确定下一条指令的存储单元地址
    { 逻 辑 地 址 : C S ( 段 地 址 ) : I P ( 段 内 偏 移 地 址 ) 物 理 地 址 : C S ∗ 16 + I P \begin{cases} \pmb{逻辑地址}:CS(段地址):IP(段内偏移地址)\\ \pmb{物理地址}:CS*16+IP\\ \end{cases} {逻辑地址CS():IP()物理地址CS16+IP
② Flag 标志位寄存器

用于反映指令执行结果特征控制指令执行形式.

  1. 8088处理器的各种标志形成了一个16位的标志寄存器,9位有效位(6位状态位,3位控制位)
  2. 标志寄存器又称为程序状态字寄存器
  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偶奇标志位 8881{PF=1PF=0辅助进位标志位 D3D4AF=1零标志位 0ZF=1符号标志位 1SF=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(InterruptenableFlag)10 DFDFDF(Direction Flag)陷阱标志位中断允许标志位方向标志位
所在位置:
在这里插入图片描述

(3)段寄存器(4个)

  1. 段寄存器保存的是内存逻辑段的段首地址(段基址CS)
  2. 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)代码数据堆栈附加

什么是段寄存器

  1. 计算机需要对内存分段,以分配给不同的程序使用,每一个段就有一个段基址,而段寄存器保存的就是这个段基址的高16位。
    段寄存器是CPU对内存进行分段管理而设置的,当一个程序要执行时,就要决定程序代码、数据或堆栈各要用到内存的哪些位置,通过设定段寄存器指向内存对应段的起始位置。
  2. 段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。(取指令
  3. 段寄存器SS指向用于堆栈的内存段,SP是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶单元。另外,当偏移量用到了指针寄存器BP,则其缺省的段寄存器也是SS,并且用BP可访问整个堆栈,不仅仅是只访问栈顶。(堆栈操作
  4. 段寄存器DS指向数据段,ES指向附加段,在存取操作数时,二者之一和一个偏移量合并就可得到存储单元的物理地址。该偏移量可以是具体数值、符号地址和指针寄存器的值等之一,具体情况将由指令的寻址方式来决定。

为什么要分段?

  1. 8086CPU提供了20位的地址总线,可寻址1MB存储空间,而8086内部寄存器都是16位的,寻址能力是64KB。
  2. 因此,为能实现对存储器寻址20位的物理地址,可将1MB的存储空间划分为若个逻辑段,每个逻辑段可寻址64KB。
  3. 各逻辑段之间可以部分、完全覆盖,连续、不连续等非常灵活。

二、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} 8088GND线Vcc线D0D7 线888A0A19 线201734 线
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} 8086GND线Vcc线D0D15 线161616A0A19 线201734 线

控 制 线 : A L E 、 I O / M ‾ ( 8086 : M / I O ‾ ) 、 W R ‾ 控制线: ALE、IO / \overline{M}(8086:M/ \overline{IO})、\overline{WR} 线ALEIO/M(8086M/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 RDREADYINTRINTANMI
H O L D 、 H L D A 、 R E S E T 、 V C C 、 G N D HOLD、HLDA、RESET、VCC、GND HOLDHLDARESETVCCGND

复 用 { 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} {8086AD0AD1516/8088AD0AD78/A16/S3A19/S6A8A15A16/S3A19A19/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 D15D0线先变为了高阻状态。)

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}锁存到地址锁存器。 A0A19

外部中断请求线 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=1IF=0IF=1开中断IF=0关中断IF=1IF=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} NMI1. RAM2. I/O3. 8087()4. NMI2
I N T R 的 中 断 号 由 8259 A 中 断 控 制 器 ( 芯 片 ) 提 供 INTR的中断号由8259A中断控制器(芯片)提供 INTR8259A

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=0DTR CPUI/O发送(输出())CPUI/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=0IOM访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=0MIO访访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=0CPU
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(){CPUCS=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区别:

  1. 数据总线位数的差别:8088:8位,8086:16位
  2. 指令队列容量的差别:8088:4字节,8086:6字节
  3. 引脚的差别: { 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} AD15AD0348086BHE28{8088IO/M8086M/IO

三、8088/8086CPU工作模式

CPU工作模式的选择是由硬件决定的

1.最小工作模式

在这里插入图片描述

工作模式: M N / M X ‾ = 1   最 小 工 作 模 式 MN/ \overline{MX} = 1\ 最小工作模式 MN/MX=1 

  1. 系统中只有一个8088/8086微处理器。
  2. 最小模式是单处理器系统
  3. 系统中所需要的控制信号全部由8088/8086CPU本身直接提供。
    (最小模式下的HDLD和HLDA信号支持DMA工作)
    (在最小8086模式下,分时使用 A D 0 − A D 15 AD_0 - AD_{15} AD0AD15,所以必须外接地址锁存器,当总线上为地址信息时,通过ALE信号将地址送入地址锁存器。)
  4. 在8086最小工作模式下,决定CPU最终接受或发送数据的引脚是 D T / R ‾ DT/ \overline{R} DT/R
  5. 引脚 M N / M X ‾ MN/\overline{MX} MN/MX接Vcc(高电平有效)

8284:时钟信号发生器
8282:地址锁存器
8286:双向总线收发器( 8086 最 小 工 作 模 式 下 需 要 2 片 8086最小工作模式下需要\pmb{2}片 8086222
(为8086/8088增加驱动能力作用的功率放大器。)

2.最大工作模式

在这里插入图片描述
工作模式: M N / M X ‾ = 0   最 大 工 作 模 式 MN/ \overline{MX} = 0\ 最大工作模式 MN/MX=0 

  1. 系统中除了主处理器8088/8086,还有协处理器
    (8087 算术协处理器 或 8089输入/输出协处理器(IOP))
  2. 最大模式可构成多处理器系统
  3. 系统中所需要的控制信号总线控制器8288总线仲裁器8289提供
    (最大模式的 R Q 0 / 1 / G T 0 / 1 信 号 支 持 8087 和 8089 RQ_{0/1}/GT_{0/1}信号支持8087和8089 RQ0/1/GT0/180878089,实现总线的请求和控制)
  4. 引脚 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=5MHzTclk=
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=5106Hz1
= 1 5 ∗ 1 0 − 6 s =\frac{1}{5}*10^{-6}s =51106s
= 0.2 ∗ 1 0 − 6 s =0.2*10^{-6}s =0.2106s
= 0.2 μ s ( 或 200 n s ) =0.2μs(或200ns) =0.2μs200ns
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=103ms=106μs=109ns
主频倒数是时钟周期,例如主频单位MHz,变为时钟周期后对应μs微秒

(2) 总线周期/机器周期

  1. 基本的总线周期由4个时钟周期 T 1 , T 2 , T 3 , T 4 T_1,T_2,T_3,T_4 T1,T2,T3,T4
  1. 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。
  2. T 2 状 态 T_2状态 T2 S 6 ∼ S 3 S_6\sim S_3 S6S3,状态信号有效,保持到读周期结束。 A D 15 ∼ A D 0 AD_{15}\sim AD_0 AD15AD0高阻状态,为读入数据作准备。
    R D ‾ \overline{RD} RD有效,送存储器或I/O端口,开始读取数据。 D E N ‾ \overline{DEN} DEN有效,启动收发器8286,准备接收数据。*
  3. 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 AD15AD0上读取数据。
  4. T 4 状 态 T_4状态 T4:CPU对数据总线进行采样,读取数据。
  1. CPU进行一次读/写的时间,也是启用一次总线进行数据入\出的时间
  2. 当外设不能在 T 1 ∼ T 4 T_1\sim T_4 T1T4实现数据传输时,要在 T 3 , T 4 T_3,T_4 T3,T4之间插入等待周期 T w T_w Tw

(3)指令周期:完成一条指令的时间

例:MOV AL, 5

  1. 取指令:MOV → \rightarrow CPU
  2. 分析译码
  3. 执行: 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} 指令周期{MOVCPU}线总线周期线5AL}线总线周期线

MOV指令两个总线周期

例:ADD AX,[3000H]

  1. 取值:取指令ADD到CPU,分析ADD功能
  2. 相加:取AX和3000H的内容并相加
  3. 赋值:结果存入AX寄存器中

ADD指令三个总线周期

HLT (停机)一个总线周期

不同指令,指令周期长度不同,所需周期个数也不同。

时 钟 频 率 又 称 主 频 f , 它 是 指 C P U 内 部 晶 振 的 频 率 , 常 用 单 位 为 M H z , 它 反 映 了 C P U 的 基 本 工 作 节 拍 。 时钟频率又称主频 f ,它是指CPU内部晶振的频率,常用单位为MHz,它反映了CPU的基本工作节拍。 fCPUMHzCPU
时 钟 周 期 t : t = 1 / f ; ( 主 频 的 倒 数 ) 时钟周期t : t =1/ f; (主频的倒数) t:t=1/f
(总线周期包含4个时钟周期, t ∗ 4 t*4 t4
机 器 周 期 : m ∗ t ; 一 个 机 器 周 期 包 含 若 干 个 ( m 个 ) 时 钟 周 期 机器周期 : m*t ;一个机器周期包含若干个(m个)时钟周期 :mtm
指 令 周 期 : m ∗ t ∗ n ; 执 行 一 条 指 令 所 需 要 的 时 间 , 一 般 包 含 若 干 个 ( n 个 ) 机 器 周 期 指令周期:m*t*n; 执行一条指令所需要的时间,一般包含若干个(n个)机器周期 mtnn
M I P S = 每 秒 执 行 百 万 条 指 令 数 = 1 / ( 指 令 周 期 × 10 的 6 次 方 ) MIPS = 每秒执行百万条指令数 = 1/(指令周期×10的6次方) MIPS==1/×106

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=103ms=106μs=109ns
主频倒数是时钟周期,例如主频单位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. 基本操作

  1. RESET(复位) 高电平有效(CPU初始化), 低电平无效
  2. 8086时钟信号CLK和刚上电时的复位信号RESET应该由8284时钟发生器来产生。
  3. 由低到高(时序图)才是复位
  4. 至少需要4个 T c l k T_{clk} Tclk高电平
  5. 除CS=FFFFH,其他的寄存器都要清零。所以程序入口在物理地址 0FFFF0H 位置处
    逻 辑 地 址 ( C S : I P ) : ( F F F F H : 0000 H ) 逻辑地址 (CS:IP) :(FFFFH:0000H) CS:IPFFFFH: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 20CS16+IPFFFFH16+0=FFFF0H
    (0FFFF0H是CPU复位以后执行的第一条指令()的地址。)
  1. 在复位后由于标志寄存器的各位均被清零,使IF=0,处于关中断状态,8086/8088CPU不能响应可屏蔽的中断请求。
  2. 因而在系统程序的初始化时,用指令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} INTRINTAIF=1IF=08259

中断标志IF状态:

  1. I F = 1 : 可 屏 蔽 中 断 会 被 响 应 { 开 中 断 、 允 许 中 断 、 中 断 开 放 执 行 指 令 S T I , 使 I F = 1 IF=1:可屏蔽中断会被响应\begin{cases} 开中断、允许中断、中断开放\\ 执行指令STI,使IF=1\end{cases} IF=1:{STI使IF=1
  2. 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=0CLI使IF=0
  3. 执 行 指 令 I R E T 恢 复 原 I F 状 态 执行指令IRET恢复原IF状态 IRETIF

可屏蔽中断的响应条件:

  1. 现 行 指 令 结 束 : 现行指令结束:
    88/86CPU在当前指令的最后一个机器周期的最后一个T状态采样INTR线,查看是否有;
  2. C P U 开 放 中 断 : CPU开放中断: CPU
    CPU中标志寄存器的F位为1,中断开放;
  3. 没 有 更 高 优 先 级 的 请 求 没有更高优先级的请求
    没有复位RESET信号、DMA、内部中断和不可屏蔽中断请求;
  4. 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. 中断类型码(中断向量码)

  1. n:0,1,2,3,4
  2. 为区别不同类型的中断,系统为每个中断源设置的编号
  3. 0 ∼ 255 ( 00 H ∼ F F H ) 表 示 ( 8086 中 断 系 统 可 处 理 256 种 不 同 的 中 断 ) 0\sim 255(00H\sim FFH)表示(8086中断系统可处理256种不同的中断) 025500HFFH8086256
  4. I N T   n = 21 H INT\ n=21H INT n=21H :DOS功能调用中断
  5. I N T   n 的 中 断 号 由 指 令 直 接 给 出 INT\ n的中断号由指令直接给出 INT n
  6. 每 个 中 断 类 型 码 与 一 个 中 断 向 量 相 对 应 每个中断类型码与一个中断向量相对应

3. 中断向量

中断向量的逻辑地址(入口地址)由CS:IP表示。

例:CS=1000H,IP=1230H
逻 辑 地 址 : C S : I P 1000 H : 1230 H 逻辑地址:CS:IP\qquad 1000H:1230H CS:IP1000H1230H
物 理 地 址 : C S ∗ 16 + I P 1000 H ∗ 16 + 1230 H = 11230 H 物理地址: CS*16+IP\qquad 1000H*16+1230H=11230H CS16+IP1000H16+1230H=11230H

4. 中断向量表

  1. 存放中断向量(中断服务程序的入口地址)内存空间
  2. 88/86系统内存中共存放256个中断向量,每个中断向量(低字单元是偏移地址IP、高字单元是段地址CS)占4个字节,共占用1KB
  3. 物理地址0000H ~ 03FF地址中依次安排各个中断向量,向量号从0开始

5. 向量表地址

  1. 中断向量在中断向量表中的位置
  2. 向 量 表 的 入 口 { n 型 中 断 ∗ 4 从 此 处 读 出 4 字 节 内 容 即 为 中 断 向 量 向量表的入口\begin{cases}\pmb{n型中断*4}\\ 从此处读出4字节内容即为中断向量\end{cases} {n4n型中断4n44

例:中断类型码21H,求中段向量表地址
① 21 H ∗ 4 = 84 H ①21H*4 = 84H 21H4=84H
② 中 断 向 量 表 地 址 : 84 H ∼ 87 H ②中断向量表地址:84H\sim87H 84H87H

例:已知中断类型码0BH,则中断向量CS=2030H,IP=4050H在内存中存放地址是多少
① 0 B H ∗ 4 = 2 C H ①0BH*4=2CH 0BH4=2CH
② 存 放 地 址 是 : 2 C H ∼ 2 F H ②存放地址是:2CH\sim2FH 2CH2FH

例: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 11H4=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 0044HCS:IPCS=F000HIP=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 n4=004CH
n = 13 n=13 n=13

6. 中断嵌套

  1. 优点
    提高中断响应的实时性,保证系统能够及时响应优先级较高的请求。
  2. 实现条件
    { ① 中 断 请 求 的 优 先 级 高 于 正 在 执 行 的 中 断 处 理 程 序 的 优 先 级 。 ② 如 果 是 外 中 断 , C P U 的 P S W 的 I F = 1 开 中 断 。 ③ 没 有 不 可 屏 蔽 中 断 请 求 和 总 线 请 求 。 \begin{cases}①中断请求的优先级高于正在执行的中断处理程序的优先级。\\ ②如果是外中断,CPU的PSW的IF=1开中断。\\ ③没有不可屏蔽中断请求和总线请求。\end{cases} CPUPSWIF=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 NMI2INTR1 

3. 中 断 响 应 \pmb{中断响应} 中断响应

响 应 条 件 : { 1.   C P U 必 须 执 行 完 当 前 的 指 令 2.   C P U 处 于 开 中 断 3.   不 能 有 更 高 级 ( 优 先 级 ) 的 中 断 请 求 响应条件:\begin{cases}1.\ CPU必须执行完当前的指令\\ 2.\ CPU处于开中断\\ 3.\ 不能有更高级(优先级)的中断请求\end{cases} 1. CPU2. CPU3. 

中断响应过程:

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{中断返回} 中断返回

中断服务子程序的一般构成
在这里插入图片描述

本文仅供本人学习总结使用,文中观点,均为本人拙见,如有 错误或不妥之处,请及时指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值