课件来源:以
ch7_v2020(2020版,111页)为骨架;ch7_v2008(2008版,96页)经逐页比对为2020版的子集,无独有内容,故不另引。本文页码(课件 p.N)均指2020版 Slide 编号。本章是全书命令字最多、编程考点最集中的一章:8259A 初始化/操作命令字、中断向量表计算、中断响应过程几乎必考。课件疑点提示(详见各节「存疑」标注与习题册):p5 输出指令例误写为
IN DX,AX;p65 从片 ICW3 的二进制与十六进制不一致;p95 图与 p96 文字对「缓冲方式」矛盾;p99 例3 的 ICW2=0AH 与类型码 08H–0FH 矛盾;p66 图 ICW4 的 D1 标为「AEDI」(应为 AEOI);p100 数据段结束误写为DATA SEGMENT;p107–111 混入了第二、三章作业答案,非本章内容。
| 考点 | 常见题型 | 重要度 |
|---|---|---|
| 8259A 初始化命令字 ICW1~ICW4 的位含义与初始化编程 | 填空、计算、编程 | ★★★ |
| 8259A 操作命令字 OCW1~OCW3(屏蔽、EOI、优先级循环、特殊屏蔽、读状态) | 选择、填空、编程 | ★★★ |
| 中断向量表结构与向量地址计算(类型码×4) | 计算、填空 | ★★★ |
| 8086 可屏蔽中断响应的 7 个总线周期、压栈顺序、IF/TF 变化 | 排序、简答 | ★★★ |
| 中断分类(内部/外部、NMI/INTR)与各类中断优先权次序 | 选择、填空 | ★★★ |
| 8259A 工作方式(全嵌套/特殊全嵌套、循环、屏蔽、三种结束方式) | 简答、选择 | ★★★ |
| 查询传送的流程与编程(状态口检测、防死循环) | 编程、简答 | ★★ |
| DMA 概念:三种基本方法、三种传送方式、DMAC 功能 | 选择、简答 | ★★ |
| I/O 接口与端口概念、三类信息、IN/OUT 指令 | 填空、选择 | ★★ |
| 中断五过程、保护/恢复现场、IRET 的功能 | 简答、填空 | ★★ |
| 8259A 级联(ICW3、扩至64级、特殊全嵌套下双 EOI) | 计算、简答 | ★★ |
| PC 机中断程序编写方法(DOS 25H/35H 功能、主程序/服务程序结构) | 编程 | ★★ |
| 中断判优:软件查询、菊花链硬件排队 | 简答 | ★ |
概念精讲

CPU 与外设交换的三类信息(课件 p4)
| 信息类型 | 含义 | 细分/说明 |
|---|---|---|
| 数据信息 | 交换的对象 | 数字量(二进制数、ASCII 码表示的数或字符);模拟量(模拟电压电流,经 A/D 转换后输入);开关量(状态量) |
| 状态信息 | 外设当前所处的工作状态 | 如 READY、BUSY,供 CPU 查询 |
| 控制信息 | CPU 发出 | 控制 I/O 接口的工作方式、外设的启动和停止 |
端口访问指令 IN/OUT(课件 p5)
IN AL, 21H ; 直接寻址:把 21H 端口内容读入 AL
MOV DX, 201H ; 端口地址 > FFH 时必须用 DX 间接寻址
IN AX, DX ; 把 DX 所指端口内容读入 AX(16位)
OUT 32H, AL ; 直接寻址:把 AL 内容输出到 32H 端口
MOV DX, 201H
OUT DX, AX ; 把 AX 内容输出到 DX 所指端口
要点:
- IN 的目的操作数、OUT 的源操作数只能是累加器 AL/AX;端口地址可直接给出(8位)或经 DX 间接给出(16位)(直接/间接的地址范围限制为补充常识)。
- 存疑:课件 p5 输出指令第二个例子印为「IN DX,AX」,课件原文如此,存疑:按 OUT 指令格式应为 OUT DX,AX(2008版 p5 同误)。
易错警示:接口≠端口。接口是电路整体,端口是其中可被 CPU 读写的寄存器;一个接口含多个端口。状态口只能读、控制口一般只写(补充常识)。
概念精讲:程序控制传送以 CPU 为中心,控制来自 CPU,通过预先编写好的 I/O 程序实现传送;速度较低,数据经过 CPU 内部寄存器,I/O 响应慢(课件 p6)。含三种:无条件传送、查询传送、中断传送。

均需 CPU 作中介:软件上外设与内存间的数据传送靠 CPU 执行程序完成(PIO 方式);硬件上接口与存储器的读写控制信号、地址信号都由 CPU 发出。缺点:程序执行速度限定传送最大速度,约为几十 KB/s。
对比表
| 方式 | 何时传送 | CPU 效率 | 实时性 | 硬件/软件 | 适用 |
|---|---|---|---|---|---|
| 无条件 | 执行到 I/O 指令即传 | 低 | 差 | 都简单 | 总是就绪的简单外设 |
| 查询 | 状态就绪才传 | 低(踏步) | 差 | 软件简单、需状态口 | 中低速、不总就绪 |
| 中断 | 外设请求才传 | 高 | 好 | 软件复杂 | 随机、中低速外设 |
易错警示:查询方式 CPU 仍在「忙等」,并没有与外设并行;只有中断和 DMA 才实现并行。
概念精讲:DMA(直接存储器存取)= 外设与内存之间直接传送数据,不需 CPU 干预、不需软件介入;控制该过程的硬件称 DMA 控制器(DMAC)。传送期间总线由 DMAC 控制(CPU 放弃总线控制权),内存/外设的地址和读写控制信号均由 DMAC 提供(课件 p15)。
| 方法 | 做法 | 代价/特点 |
|---|---|---|
| 周期挪用 Cycle Stealing | 利用 CPU 不访问存储器的周期让 DMAC 用总线 | 不减慢 CPU,但需复杂时序电路,传送不连续、不规则 |
| 周期扩散 | 时钟电路把供 CPU 的时钟周期加宽(存储器/DMAC 时钟不变),在加宽周期内 DMA | 减慢 CPU,一次只传一个字节 |
| CPU 停机方式 | DMAC 发请求,CPU 在现行总线周期结束后让地址/数据/部分控制总线呈高阻,让出总线并给响应信号;DMA 完成后 CPU 恢复控制权 | 降低 CPU 利用率,但最常用、最简单,大部分 DMAC 采用 |
(补充常识:CPU 停机方式即 HOLD/HLDA 握手过程。)
| 传送方式 | 总线占用规则 |
|---|---|
| 单字节传送 | 每个 DMA 周期只传一个字节就立即释放总线;再测 DREQ,有效才再进入 DMA 周期 |
| 成组传送 | 申请到总线后把一组数据传完才释放,不管中间 DREQ 是否有效 |
| 请求传送(查询传送) | 成组传送,但每传一个字节后查 DREQ:有效继续传,无效挂起 |
① 接收外设请求,向 CPU 发 DMA 请求;② 接到 CPU 的 DMA 响应后接管总线;③ 能寻址存储器(输出并修改地址);④ 向存储器和外设发读/写控制信号;⑤ 控制传送字节数、判断 DMA 是否结束;⑥ 传送结束后撤销 DMA 请求、释放总线,使 CPU 恢复正常工作。
易错警示:DMA 期间 CPU 只是让出总线,并不执行 I/O 程序;「CPU 停机」停的是总线使用权,不是断电停机。DMA 以总线周期为让出单位,中断响应以指令为边界,二者不要混。
概念精讲
中断请求 → 中断判优 → 中断响应 → 中断处理 → 中断返回。中断过程由硬件和软件共同实现。

| 阶段 | 做什么 | 实现者 |
|---|---|---|
| 中断请求 | 请求信号存于接口电路的中断请求触发器,经 INTR 或 NMI 引入 CPU(p27) | 硬件 |
| 中断判优 | 同时请求:先服务优先级高者,同级先来先服务;非同时:低级服务程序可被高级打断=中断嵌套(p28) | 硬件/软件 |
| 中断响应 | 每条指令执行完查询请求;有请求且 IF=1 才响应。响应后:① 自动关中断(IF 清 0);② 保存 FR 和断点(CS、IP 压栈);③ 经中断矢量查表形成入口地址(p29) | 硬件 |
| 中断处理 | 服务程序开头 PUSH 保护现场,结束前 POP 恢复现场(p30) | 软件 |
| 中断返回 | 返回前先开中断,再执行 IRET:弹出断点送 IP、CS 并恢复 FR(p31) | 软件指令+硬件动作 |
保护现场 → 开中断(STI,允许嵌套)→ 中断处理(服务主体)→ 关中断(CLI)→ 恢复现场 → 中断返回(IRET)。
易错警示:「保护断点」(CS/IP/FR 压栈)由硬件在响应时自动完成;「保护现场」(通用寄存器压栈)由服务程序用 PUSH 完成,两者不是一回事。IRET 一次弹出 IP、CS、FR 三个字,不能用 RET 代替。
各中断源的请求线接到一个状态端口的各位(图中端口地址 20H),同时经门电路汇总产生 INTR。CPU 响应后读该状态口,按事先排定的次序逐位查询,先查到的先服务——查询顺序即优先级。流程:保留现场 → A 申请服务? → B? → C? … → 恢复现场。


易错警示:软件查询的优先级由查询次序决定,可灵活修改但响应慢;菊花链优先级由物理位置决定,硬件简单但链长受限、故障影响后级(补充常识)。
共 256 种中断源,类型码 0~255。
中断 ─ 硬件中断(外部) ─ 非屏蔽中断 NMI(类型2)
│ └ 可屏蔽中断 INTR(经8259A)
└ 软件中断(内部) ─ 除法错(0)、单步(1)、断点(3)、溢出(4)、INT n


| 类型码 | 向量地址 | 用途 |
|---|---|---|
| 0 | 00000H | 除法出错 |
| 1 | 00004H | 单步 |
| 2 | 00008H | NMI |
| 3 | 0000CH | 断点 |
| 4 | 00010H | 溢出(INTO) |
| 5~31 | 00014H~0007FH | 系统备用 |
| 32~255 | 00080H~003FFH | 供用户使用 |
例(课件 p42):类型码 20H → 指针 = 4×20H = 0080H。若 (0080H)=10H、(0081H)=20H、(0082H)=30H、(0083H)=40H,则 IP=2010H、CS=4030H,入口地址 4030:2010H。
易错警示:① 乘 4 不是乘 2;② 低地址放 IP 不是 CS;③ 字节序是小端(10H、20H 拼成 2010H 而非 1020H);④ 向量表在内存 0 段,不是 I/O 空间。
类型码获取:专用中断自动形成(0、1、3、4);INT n 的类型码即指令中的 n。取得类型码后六步(p45):
① 类型码×4 → 向量表指针;② FR 入栈;③ 清 IF 和 TF(屏蔽新的 INTR 和单步);④ 保存断点:先压 CS 后压 IP;⑤ 从向量表取入口地址送 IP 和 CS;⑥ 按新地址执行服务程序。
| 序号 | 总线周期 | 动作 |
|---|---|---|
| ⑴ | INTA 周期1 | 发第一个 INTA(通知 8259A 准备) |
| ⑵ | INTA 周期2 | 发第二个 INTA,外设经 D0~D7 送类型码 n;CPU 将 n 左移两位(×4)形成向量表指针存暂存器 |
| ⑶ | 写周期 | FR 压栈;同时 IF=0、TF=0 |
| ⑷ | 写周期 | CS 压栈 |
| ⑸ | 写周期 | IP 压栈 |
| ⑹ | 读周期 | 从向量表取入口偏移量送 IP |
| ⑺ | 读周期 | 从向量表取入口段值送 CS |
非屏蔽中断与软中断跳过⑴⑵,从⑶执行到⑺(5 个总线周期)(p51)。

从高到低:除法出错 → INT n → INTO → NMI → INTR → 单步中断。即除单步外的内部中断最高,其次非屏蔽,再次可屏蔽,单步最低。
易错警示:单步中断优先级最低(保证调试时其他中断仍能进入);INT n 与 INTO 同属内部但排在 NMI 之前;响应 INTR 的前提是 IF=1 且当前指令执行完。
① 8 级优先权控制,级联可扩展至 64 级;② 每一级中断都可屏蔽或允许;③ 中断响应周期提供中断向量号(类型号);④ 工作方式可编程选择。
| 部件 | 功能 |
|---|---|
| 中断请求寄存器 IRR(8位) | 与 IR7~IR0 相接,某源申请则相应位置 1;最多同时接收 8 个申请 |
| 中断屏蔽寄存器 IMR(8位) | 第 i 位置 1 则 IRi 被屏蔽,不能向 CPU 发 INT;软件设置;改 IMR 也可改变优先级效果 |
| 中断服务寄存器 ISR(8位) | 第 i 位置 1 表示 CPU 正为 IRi 服务,保持到服务结束前用指令清除;可被 CPU 读出;多位置 1 = 发生中断嵌套 |
| 优先权电路 PR | 对 IRR 中的请求判优,选出最高者,在响应周期选通送 ISR |
| 数据总线缓冲器 | 8 位双向三态,接系统数据总线:收控制字、发类型码和状态 |
| 读/写逻辑 | 接收 CPU 读/写命令;CS 与 A0 决定访问哪个寄存器 |
| 级联缓冲/比较器 | 多片连接,8 级扩到 64 级 |

关键引脚:IR0~IR7(请求输入)、INT(接 CPU 的 INTR)、INTA(接 CPU 响应信号)、A0(区分奇/偶端口)、CAS2~CAS0(级联线)、SP/EN 双功能:缓冲方式下作输出控制缓冲器传送方向;非缓冲方式下作输入规定主片(=1)/从片(=0)(p55)。
通电后先初始化(CPU 写命令字规定工作状态)。处理过程: ① IR0~IR7 某线变高 → IRR 相应位置 1;② 至少一条请求未被屏蔽 → INT 引脚向 CPU 发请求;③ CPU 开中断则当前指令执行完后以 INTA 响应;④ 8259A 接到第一个 INTA:最高优先权的 ISR 位置 1、相应 IRR 位复位,此周期不向数据总线送内容;⑤ 第二个 INTA 期间向数据总线送 8 位类型码,CPU 以类型码×4 查向量表取入口;⑥ 若 AEOI 方式,第二个 INTA 结束时 ISR 相应位自动复位;否则直到服务程序发 EOI 命令才复位。
易错警示:IRR=「在排队」,ISR=「正在服务」,IMR=「不让进」;第一个 INTA 不送类型码,第二个才送。
编程分两部分:初始化编程写 ICW1~ICW4(2~4 字节,写入后工作中不再改变);工作方式编程写 OCW1~OCW3(初始化后任何时间可写、可多次改写)(p58–59)。

ICW1 写偶地址(A0=0),ICW2/ICW3/ICW4 写奇地址(A0=1);单片(SNGL=1)跳过 ICW3;IC4=0 跳过 ICW4(8086 系统必须写 ICW4)。
| 位 | 名称 | 含义 |
|---|---|---|
| D7 D6 D5 | — | 0,对 8086/8088 无效 |
| D4 | 识别位 | 1(ICW1 标志) |
| D3 | LTIM | 1=电平触发,0=边沿触发 |
| D2 | — | 0(服务程序间隔 4/8,对 8086 无效) |
| D1 | SNGL | 1=单片,0=多片级联 |
| D0 | IC4 | 1=需要 ICW4,0=不需要 |
例:边沿触发、单片、需 ICW4 → 00010011B = 13H;电平触发其余同 → 00011011B = 1BH。
D7~D3 = T7~T3,定义类型码高 5 位(用户决定);D2~D0 由中断源引脚序号自动填入(IR0=000 … IR7=111)。故 IRi 的类型码 = 高5位拼接 i 的三位二进制。例:高5位=00001 → IR0~IR7 类型码 08H~0FH。

| 位 | 名称 | 1 | 0 |
|---|---|---|---|
| D7 D6 D5 | — | 0 | 0 |
| D4 | SFNM | 特殊全嵌套 | 普通全嵌套 |
| D3 | BUF | 缓冲方式 | 非缓冲方式 |
| D2 | M/S | 主片 | 从片(缓冲方式下有效) |
| D1 | AEOI | 自动 EOI | 正常 EOI |
| D0 | μPM | 8086/8088 | 8080/8085 |
(存疑:p66 图中 D1 印为「AEDI」,应为 AEOI。)例:全嵌套+缓冲+主片+正常EOI+8086 = 00001101B = 0DH;非缓冲其余同 = 01H。
即 IMR 的内容:Mi=1 屏蔽 IRi,Mi=0 允许。例:只允许 IR0、IR1、IR4 → 11101100B = 0ECH(p97)。

R SL EOI 八种组合(p71):
| R SL EOI | 功能 |
|---|---|
| 0 0 1 | 一般 EOI(全嵌套/固定优先级下清最高 ISR 位) |
| 0 1 1 | 特殊 EOI:按 L2~L0 复位指定 ISR 位 |
| 1 0 1 | 一般 EOI + 优先级自动循环 |
| 1 0 0 | 设置「自动 EOI 时循环」(配合 AEOI) |
| 0 0 0 | 取消自动 EOI 循环(恢复固定优先级) |
| 1 1 1 | 特殊 EOI + 特殊循环(L2~L0 设为最低优先级) |
| 1 1 0 | 特殊循环:L2~L0 设为最低优先级(不发 EOI) |
| 0 1 0 | 无意义 |
典型命令字(p72–74):
- 一般 EOI:MOV AL,20H / OUT 20H,AL / IRET(00100000B)。
- 特殊 EOI 清 ISR4:01100100B = 64H(L=100)。
- 自动循环+EOI:当前 IR4 服务完,MOV AL,0A0H / OUT 20H,AL(10100000B)→ ISR4 清 0,优先级变为 IR5 IR6 IR7 … IR4。
- 特殊循环+EOI:MOV AL,0E3H / OUT 20H,AL(11100011B,L=011)→ ISR3 清 0 且 IR3 降为最低。

| 位段 | 取值与功能 |
|---|---|
| D6 D5(ESMM SMM) | 0×=无作用;10=撤销特殊屏蔽;11=设置特殊屏蔽 |
| D2(P) | 1=查询命令;0=非查询 |
| D1 D0(RR RIS) | 0×=无作用;10=下一个 RD 读 IRR;11=下一个 RD 读 ISR |
读状态示例(p78):读 ISR → MOV AL,0BH / OUT 20H,AL / NOP / IN AL,20H;读 IRR → MOV AL,0AH / OUT 20H,AL / NOP / IN AL,20H。读 IMR 直接对奇地址 IN(p93)。
特殊屏蔽示例(p76–77):正为 IR3 服务又想响应更低级中断 → CLI → OCW3=68H(D6D5=11)写 20H → 读 IMR、OR AL,08H 写 21H 屏蔽 IR3 → STI;退出时 CLI → 读 IMR、AND AL,0F7H 写 21H 解除屏蔽 → OCW3=48H(D6D5=10)写 20H → STI → … → IRET。
易错警示:OCW2/OCW3 靠 D3 区分、与 ICW1 靠 D4 区分;写错端口(奇偶)命令字无效。一般 EOI=20H 只清「当前最高」的 ISR 位,不指定级别。
一般用于多于 64 级中断的场合。写 OCW3 令 P=1(D2=1)发查询命令,随后一条 IN(偶地址)读查询字:D7=1 有中断请求、=0 无;D2D1D0(W2W1W0)= 当前请求中级别最高者的编号。8259A 内部仍做 8 级判优与屏蔽管理。
| 方式 | 设置 | ISR 清零时机 | 适用 |
|---|---|---|---|
| 自动结束 AEOI | ICW4 D1=1 | 第二个 INTA 结束时硬件自动清 | 不要求嵌套 |
| 正常(一般)EOI | ICW4 D1=0;服务程序发 OCW2=20H(D7D6D5=001) | 执行 EOI 命令时清最高 ISR 位 | 只能用于全嵌套;级联发 2 个 |
| 特殊 EOI | ICW4 D1=0;OCW2 D7D6D5=011 或 111,L2~L0 指定级别 | 清指定 ISR 位 | 任何情况(含循环方式) |
一般 EOI 不能用于循环方式的原因:它结束的是「尚未处理完的级别最高者」,优先级一旦循环改变就会清错位、使中断过程混乱(p91)。
先写 OCW3:RR=1,RIS=0(D1D0=10)→ 再 IN 偶地址读 IRR;RR=1,RIS=1(D1D0=11)→ 读 ISR;直接 IN 奇地址读 IMR。
易错警示:AEOI 在第二个 INTA 就清 ISR,故服务期间 8259A 认为「无人在服务」,低级中断可长驱直入 → 不能嵌套。特殊屏蔽「屏蔽本级却放低级进来」靠的是 ISR 本级位被清 0,而不是仅靠 IMR。
中断源多于 8 个必须级联:一片主 8259A + 若干从片,最多 1 主 8 从 = 64 级。从片 INT 接主片某 IRi;主片 INT 接 CPU INTR;CAS2~CAS0 级联线并联;缓冲方式下主片 SP/EN 作输出驱动总线缓冲器,从片 SP/EN 接地表示从片。


条件:单片、端口 20H/21H、边沿触发、缓冲方式、正常 EOI、全嵌套、类型码 08H–0FH。
MOV AL, 13H ; ICW1: 00010011 边沿触发、单片、需ICW4
OUT 20H, AL ; 偶地址
MOV AL, 08H ; ICW2: 高5位00001 → IR0~IR7 = 08H~0FH
OUT 21H, AL ; 奇地址
MOV AL, 0DH ; ICW4: 00001101 全嵌套、缓冲、主片、正常EOI、8086
OUT 21H, AL
初始化后:允许时钟(IR0)、键盘(IR1)、COM1(IR4) → OCW1 = 11101100B = 0ECH 写 21H;正常 EOI 故服务程序返回前 MOV AL,20H / OUT 20H,AL / IRET(p97)。
存疑:p95 图中 SP/EN 接 +5V 属非缓冲方式主片接法(对应 ICW4 应为 01H),而 p96 文字与命令字按缓冲方式(0DH)给出,图与文矛盾;课件原文如此,存疑。答题以课件文字要求为准。
例1(p98):端口 1CE0H/1CE2H,电平触发、单片、类型码高5位 00010、源接 IR3、非特殊全嵌套、非自动结束、非缓冲 → ICW1=00011011B=1BH,ICW2=00010011B(高5位 00010,低3位任意),ICW4=00000001B=01H;单片无 ICW3。代码见习题册题10。
例3(p99–104):PC/XT,20H/21H,边沿、缓冲、非自动结束、全嵌套,类型码 08H–0FH;利用 IR2 中断 10 次、每次输出 'ABC'。命令字:ICW1=13H、ICW2=0AH(存疑,见下)、ICW4=0DH、OCW1=FBH(只开 IR2)、OCW2=20H。主程序:初始化 → CLI → 用 DOS 35H 功能取原 0AH 号向量存 M2(段)/M3(偏移) → 用 25H 功能装入新向量 INT2 → 读 IMR AND AL,0FBH 开放 IR2 → BX=10 → 循环 STI / HLT / DEC BX / JNZ → 恢复原向量 → 4C00H 退出。服务程序 INT2:显示 'ABC$'(AH=09H)→ 发 EOI 20H → IRET。
存疑:课件给 ICW2=0AH 与「类型码 08H–0FH」矛盾:若类型码 08H–0FH 则 ICW2 应为 08H、IR2 类型码=0AH(与程序用 350AH/250AH 一致);若 ICW2=0AH 则 IR2 类型码=0CH,程序应改用 0CH。课件原文如此,存疑。另 p100 数据段结束误印为第二个 DATA SEGMENT,应为 DATA ENDS。p99 的「例2 P203」仅指教材页码,课件未给题面。
| DOS 功能(INT 21H) | 入口 | 出口 |
|---|---|---|
| 取中断向量 AH=35H | AL=类型号 | ES:BX=入口地址 |
| 置中断向量 AH=25H | AL=类型号,DS:DX=入口地址 | — |
易错警示:改向量前必须保存原向量、退出前恢复;开放设备中断是清 IMR 对应位(AND 掩码),不是置 1;HLT 前必须 STI,否则睡死。
例A(向量表计算,课件 p42 改编):某系统 1CH 号中断服务程序入口为 F000:1234H,问向量表中哪四个单元存什么? 解:指针 = 1CH×4 = 28×4 = 112 = 0070H。低字 IP=1234H → (0070H)=34H、(0071H)=12H;高字 CS=F000H → (0072H)=00H、(0073H)=F0H。反向题型(给字节求入口)即课件 p42 原题:20H→0080H,字节 10H,20H,30H,40H → IP=2010H、CS=4030H → 4030:2010H。教学要点:先乘 4 定地址,再「低低高高、字节小端」拼字。
例B(8259A 初始化推导,课件 p98 例1):端口 1CE0H/1CE2H、电平触发、单片、类型码高5位 00010、非特殊全嵌套、非自动结束、非缓冲。 解:ICW1:D4=1、LTIM=1、SNGL=1、IC4=1 → 00011011B=1BH,写 1CE0H;ICW2:高5位 00010 → 写 00010000B=10H 即可(课件写 00010011B,低3位无关),写 1CE2H;单片跳过 ICW3;ICW4:SFNM=0、BUF=0、AEOI=0、μPM=1 → 00000001B=01H,写 1CE2H。教学要点:把题目每个形容词翻译成一个 bit,再拼字节;偶奇端口交替。
例C(OCW2 特殊循环,课件 p85):要求设 IR5 为最低优先级,写出 OCW2 并说明此后优先级次序。 解:特殊循环 R=1、SL=1、不发 EOI → EOI=0;L2L1L0=101(IR5)。OCW2 = 110 00 101B = C5H,写偶地址。IR5 最低 → 其次序循环为 IR6 最高,IR6 IR7 IR0 IR1 IR2 IR3 IR4 IR5(高→低)。教学要点:L 码指定的是最低优先级,最高是它的下一个(模8加1)。
公式 - 中断向量地址指针 = 4 × 中断类型码;入口 = (指针+2 字):(指针字),即 CS:IP。 - 向量表范围 00000H~003FFH,1KB,256 入口×4B。 - IRi 类型码 = ICW2 高5位 ‖ i(3位)。
8086 专用向量:0→0000H 除法错;1→0004H 单步;2→0008H NMI;3→000CH 断点;4→0010H 溢出。 优先权:除法错 > INT n > INTO > NMI > INTR > 单步。 可屏蔽响应 7 周期:INTA1、INTA2(取n×4)、写FR(IF=TF=0)、写CS、写IP、读IP、读CS;NMI/软中断省前两个。
8259A 命令字速查
| 字 | 端口 | 关键位 | 常用值 |
|---|---|---|---|
| ICW1 | 偶 | D4=1;D3 LTIM;D1 SNGL;D0 IC4 | 13H 边沿单片;1BH 电平单片 |
| ICW2 | 奇 | D7-D3 类型码高5位 | 08H→08H-0FH |
| ICW3 | 奇 | 主:接从片的 IR 位=1;从:D2-D0=主片 IR 号 | 主20H/从05H(IR5) |
| ICW4 | 奇 | D4 SFNM;D3 BUF;D2 M/S;D1 AEOI;D0=1 | 01H 非缓冲;0DH 缓冲主片 |
| OCW1 | 奇 | =IMR,1 屏蔽 | 0ECH 开 IR0/1/4;0FBH 只开 IR2 |
| OCW2 | 偶 | R SL EOI + L2L0 | 20H 一般EOI;64H 特殊EOI清ISR4;0A0H 循环EOI;0E3H 特殊循环EOI清ISR3;0C5H 设IR5最低 |
| OCW3 | 偶 | D6D5 特殊屏蔽;D2 P;D1D0 RR RIS | 68H 设特殊屏蔽;48H 撤销;0AH 读IRR;0BH 读ISR;0CH 查询 |
识别位:A0=0 时 D4=1→ICW1;D4=0,D3=0→OCW2;D4=0,D3=1→OCW3。 PC/XT IRQ:0 日时钟、1 键盘、2 保留、3 通信、4 串行口(COM1)、5 硬盘、6 软盘、7 打印机;端口 20H/21H,类型码 08H–0FH。 DOS 向量功能:35H 取(AL=类型,出 ES:BX);25H 置(AL=类型,入 DS:DX)。 服务程序骨架:PUSH 保护现场 → STI → 服务 → 发 EOI(20H→偶口) → CLI → POP 恢复现场 → IRET。