say-fall个人主页专栏《手把手教你学会C》 | 《系统深入Linux操作系统》 | 《数据结构与算法》 | 《小游戏与项目》格言做好你自己才能吸引更多的人与他们共赢这才是最好的成长方式。 前言CPU再强大也需要和外设打交道——键盘输入、屏幕显示、磁盘读写、网络通信……但CPU的速度是外设的成千上万倍它们之间怎么对话谁来充当翻译官如果多个外设同时喊CPUCPU该先响应谁这些问题的答案都指向一个核心概念——输入输出I/O技术。它不仅是微机原理课程的考试重点更是理解计算机系统如何与外部世界交互的关键。本文将系统讲解I/O接口原理、简单接口电路设计、四种I/O传输方式、中断技术以及8259A可编程中断控制器的完整知识体系。通过本文你将掌握技能应用场景I/O接口与端口的分类及编址方式理解CPU与外设通信的基本框架简单接口电路三态门/锁存器设计基本的输入输出接口四种I/O传输方式的选择与程序设计根据外设特点选择合适的传输方式8086中断系统与中断向量表编写中断服务程序处理中断事件8259A的初始化编程与操作控制管理多个外设的中断请求 前置知识掌握8086指令系统、汇编语言程序设计基础了解段寄存器和内存寻址。文章目录 前言一、 I/O接口与端口基础1️⃣ 为什么需要I/O接口2️⃣ I/O端口的分类3️⃣ 8088系统I/O总线信号4️⃣ I/O端口编址方式1独立编址I/O映射方式—— 8088采用2统一编址存储器映射方式5️⃣ I/O地址译码二、 简单接口电路1️⃣ 输入接口—— 三态门2️⃣ 输出接口—— 锁存器3️⃣ 典型芯片74LS373**最常用的简单接口芯片**4️⃣ 综合应用开关控制7段数码管三、 四种基本输入输出方式1️⃣ 无条件传送2️⃣ 查询式传送条件传送3️⃣ 中断控制方式4️⃣ DMA方式直接存储器存取5️⃣ 四种方式综合对比四、⚡ 中断技术详解1️⃣ 中断的基本概念2️⃣ 8088/8086的中断分类1内部中断不受IF影响不可屏蔽2外部中断3️⃣ 可屏蔽中断的完整响应过程4️⃣ 中断向量表5️⃣ 中断优先级五、️ 可编程中断控制器8259A1️⃣ 主要功能2️⃣ 主要引脚3️⃣ 内部核心寄存器4️⃣ 8259A的工作方式1中断优先级方式2中断嵌套方式3中断结束方式EOI4中断触发方式5中断屏蔽方式5️⃣ 8259A的编程1初始化命令字ICW—— 按固定顺序写入2操作命令字OCW—— 任意时刻写入3编程示例六、 几个思考题1️⃣ 为什么输入接口需要三态门输出接口需要锁存器2️⃣ 查询式传送和中断方式各适用于什么场景3️⃣ 中断向量表中类型码21H的中断向量存放在哪个地址4️⃣ 8259A的中断结束EOI有哪几种方式为什么非自动EOI方式下必须在服务程序中发送EOI命令5️⃣ DMA方式和中断方式的核心区别是什么 学习总结与建议重点掌握内容学习建议一、 I/O接口与端口基础1️⃣ 为什么需要I/O接口CPU不能直接连接外设必须通过I/O接口中转原因主要有四点问题说明速度不匹配CPU速度远高于外设键盘、打印机等信号格式不匹配外设可能是模拟信号、串行信号或不同电平时序不匹配外设工作时序与CPU总线时序不同数据格式不匹配外设数据宽度、编码方式可能与CPU不同I/O接口就是解决这些矛盾的桥梁它的主要功能包括数据缓冲与锁存、信号转换、地址译码、提供握手信号、中断管理和错误检测。2️⃣ I/O端口的分类CPU与外设之间传输的信息分为三类对应三种独立的端口端口类型传输方向功能特点数据端口双向传输实际数据支持8位或16位可读可写状态端口输入传输外设工作状态只读反映外设是否准备好控制端口输出传输CPU发出的控制命令只写设置外设工作方式 一个接口电路可以包含多个端口例如串行接口可能同时有数据输入端口、数据输出端口、状态端口和控制端口3️⃣ 8088系统I/O总线信号总线类型信号数量说明地址总线A15~A016根指定I/O端口地址寻址范围64K个端口数据总线D7~D08根双向传输数据、状态和控制信息控制总线#IOR、#IOW、IO/#M、ALE—控制读/写操作和地址锁存4️⃣ I/O端口编址方式1独立编址I/O映射方式—— 8088采用I/O端口地址空间与存储器地址空间完全分开有专门的IN、OUT指令译码电路简单但I/O指令功能有限代表Intel x86系列2统一编址存储器映射方式I/O端口与存储器单元共用地址空间可以用所有存储器指令访问I/O端口指令功能丰富但占用存储器地址空间代表ARM、MIPS等RISC处理器5️⃣ I/O地址译码与存储器译码类似I/O地址译码将高位地址信号转换为接口芯片的片选信号。端口地址 片选地址高位 片内地址低位I/O与存储器译码的对比对比项I/O译码存储器译码地址线最多16位A15~A020位A19~A0常用方式部分地址译码全地址译码控制信号#IOR、#IOW#MEMR、#MEMW指令IN、OUTMOV地址空间64KB1MB⚠️ I/O译码的输入信号必须包含#IOR和#IOW——只有当CPU真正访问I/O端口时译码电路才输出有效片选信号二、 简单接口电路简单接口电路功能固定、不能通过编程改变工作方式由基本逻辑门电路组成。1️⃣ 输入接口—— 三态门输入接口必须具备数据控制能力因为数据总线是共享资源同一时刻只能有一个设备向总线发送数据。当控制端有效时输入数据送到数据总线当控制端无效时输出高阻态与数据总线断开典型芯片74LS244八缓冲器/三态门两个独立的4位三态缓冲器#G0时YA数据通过#G1时Y高阻态断开只能用作输入接口2️⃣ 输出接口—— 锁存器输出接口必须具备数据锁存能力因为CPU输出的数据在总线上只存在很短时间外设来不及读取。当时钟端有效时将总线数据锁存到输出端锁存后输出保持不变直到下一次锁存典型芯片74LS273八D触发器/锁存器CP上升沿到来时QD其他时间Q保持不变只能用作输出接口不具备三态控制3️⃣ 典型芯片74LS373最常用的简单接口芯片74LS373是带三态输出的8路D锁存器既可用作输入接口也可用作输出接口LE#OE输出状态10QD透明模式00Q保持锁存模式×1高阻态4️⃣ 综合应用开关控制7段数码管这是经典的简单接口应用——读取开关状态在数码管上显示对应的十六进制数字。7段显示编码表共阴极显示gfeedcba十六进制显示gfeedcba十六进制0001111113FH8011111117FH10000011006H90110011167H2010110115BHA0111011177H3010011114FHB011111007CH40110011066HC0011100139H5011011016DHD010111105EH6011111017DHE0111100179H70000011107HF0111000171H程序实现; 7段显示编码表 Seg7 DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 67H, 77H, 7CH, 39H, 5EH, 79H, 71H ; 主程序读开关状态 → 查表 → 输出显示 START: LEA BX, Seg7 ; BX指向编码表首地址 LOOP: IN AL, 0F1H ; 读取开关状态输入口地址F1H AND AL, 0FH ; 屏蔽高4位保留低4位 XLAT ; 查表AL [BX AL] OUT 0F0H, AL ; 输出到数码管输出口地址F0H JMP LOOP ; 循环三、 四种基本输入输出方式CPU与外设之间的数据传输有四种基本方法从简单到复杂依次为1️⃣ 无条件传送最简单的方式CPU不查询外设状态直接执行IN/OUT指令传输数据。假设外设总是准备好的。优点软硬件最简单缺点适用范围极窄适用外设开关、拨码盘、LED数码管、继电器2️⃣ 查询式传送条件传送CPU传输前先读取外设状态准备好才传输未准备好则继续查询等待。读状态端口 → 就绪 → 否 → 继续查询 ↓是 进行数据传输 → 传送完 → 否 → 继续 ↓是 结束优点软硬件较简单可靠性高缺点CPU效率极低大部分时间在查询等待适用外设打印机、串口、键盘程序示例查询式输出100个字节; 状态端口03FBHbit51表示忙bit50表示准备好 ; 数据端口03F8H LEA SI, DATA MOV CX, 100 AGAIN: MOV DX, 03FBH WAIT: IN AL, DX ; 读状态端口 TEST AL, 20H ; 测试bit5是否为1忙 JNZ WAIT ; 忙则继续等待 MOV DX, 03F8H MOV AL, [SI] ; 取数据 OUT DX, AL ; 输出数据 INC SI LOOP AGAIN ; CX-1不为0则继续 HLT3️⃣ 中断控制方式外设准备好后主动向CPU发中断请求CPU暂停当前程序转去执行中断服务程序完成数据传输。优点CPU效率高实时性好可同时管理多个外设缺点程序编制复杂每次中断有保护和恢复现场的开销适用外设键盘、鼠标、串口、硬盘4️⃣ DMA方式直接存储器存取由**DMA控制器DMAC**控制总线实现外设与存储器之间直接数据传输CPU不参与。工作过程外设请求DRQ → DMAC请求HOLD → CPU响应HLDA → DMAC控制传输 → 传输结束 → CPU收回总线优点传输速度极快CPU效率最高缺点硬件复杂成本高适用外设磁盘、光盘、显卡、网卡5️⃣ 四种方式综合对比对比项无条件传送查询式中断方式DMA方式CPU干预程度无全程仅开始和结束无传输控制者CPUCPUCPUDMACCPU效率低极低高最高传输速度慢慢较快极快硬件复杂度最简单简单复杂最复杂适用外设总是准备好低速有状态中速实时高速大批量 选择原则简单外选用无条件低速外选用查询中速多用中断高速大批量用DMA四、⚡ 中断技术详解1️⃣ 中断的基本概念中断是指CPU执行程序时由于某种随机事件暂时中断当前程序转去执行中断服务程序处理该事件处理完后再返回原程序继续执行的过程。核心术语术语含义中断源引起中断的事件中断向量中断服务程序的入口地址中断向量表存放所有中断向量的表格中断优先级多个中断同时请求时的响应顺序中断嵌套在中断处理中响应更高优先级的中断2️⃣ 8088/8086的中断分类共支持256个中断源类型码0~255分为两大类1内部中断不受IF影响不可屏蔽中断类型码触发条件除法错0除数为0或商溢出单步中断1TF1时每执行一条指令产生断点中断3INT 3指令用于调试溢出中断4INTO指令且OF1软件中断nINT n指令n为任意值2外部中断中断引脚特点非屏蔽中断NMINMI引脚类型码固定为2不受IF影响处理紧急事件可屏蔽中断INTRINTR引脚类型码由8259A提供受IF控制IF1允许IF0禁止3️⃣ 可屏蔽中断的完整响应过程这是考试中最常考的知识点之一必须完整掌握外设发INTR → 8259A判优 → CPU响应条件满足 → 硬件自动完成 ├─ 第1个总线周期CPU发#INTA信号 ├─ 第2个总线周期8259A将类型码送上数据总线CPU读取 ├─ 关中断IF0, TF0 ├─ FLAGS压栈 → CS压栈 → IP压栈 ├─ 计算向量地址类型码×4 ├─ 从向量表取入口地址低2字节→IP高2字节→CS └─ 转入中断服务程序执行 中断服务程序 ├─ 保护现场PUSH寄存器 ├─ 中断处理数据传输等 ├─ 发送EOI命令非自动EOI时 ├─ 恢复现场POP寄存器 └─ IRET弹出IP、CS、FLAGS返回原程序⚠️ 内部中断和NMI不需要#INTA总线周期类型码固定或由指令给出不受IF影响——这是它们与可屏蔽中断的核心区别4️⃣ 中断向量表中断向量表位于内存最低1KB00000H~003FFH每个向量占4字节向量地址 中断类型码 × 4 偏移量0~1中断服务程序的偏移地址IP 偏移量2~3中断服务程序的段地址CS设置中断向量的程序; 设置类型码60H的中断向量 CLI ; 关中断 MOV AX, 0 MOV ES, AX ; ES指向0段 MOV DI, 60H * 4 ; DI 向量地址 MOV AX, OFFSET INT60 ; 取偏移地址 STOSW ; 写入IPES:[DI]←AX, DI2 MOV AX, SEG INT60 ; 取段地址 STOSW ; 写入CS STI ; 开中断 INT60 PROC FAR ; 中断处理代码 IRET INT60 ENDP5️⃣ 中断优先级8088/8086系统中断优先级从高到低内部中断除法错、INTO、INT n 非屏蔽中断NMI 可屏蔽中断INTR 单步中断五、️ 可编程中断控制器8259A8259A是8088/8086系统中最常用的中断控制器用于管理可屏蔽中断。1️⃣ 主要功能管理8个中断源级联可扩展至64个可编程设置每个中断源的优先级可编程设置中断触发方式边沿/电平可编程设置中断结束方式自动/非自动EOI支持中断嵌套2️⃣ 主要引脚引脚说明D7~D0双向数据总线#RD、#WR读/写信号#CS片选信号A0端口选择A00偶地址A01奇地址INT中断请求输出连CPU的INTR#INTA中断响应输入连CPU的#INTAIR0~IR7中断请求输入连外设CAS0~CAS2级联线#SP/#EN缓冲方式为输出非缓冲方式为输入1主片0从片3️⃣ 内部核心寄存器寄存器功能IRR中断请求寄存器保存IR0~IR7的中断请求对应位1表示有请求ISR中断服务寄存器记录正在服务的中断对应位1表示正在服务IMR中断屏蔽寄存器对应位1表示屏蔽该中断4️⃣ 8259A的工作方式1中断优先级方式固定优先级默认IR0最高IR7最低循环优先级被服务后自动降为最低轮流当最高2中断嵌套方式普通全嵌套默认只有更高优先级能打断当前中断特殊全嵌套同级或更高优先级都能打断仅用于级联主片3中断结束方式EOI服务结束时必须将ISR对应位清零否则8259A将不再响应同级别及以下中断方式说明适用场景自动EOIAEOI第二个#INTA结束时自动清零不能用于中断嵌套非指定EOICPU发命令清最高优先级的ISR位普通全嵌套指定EOI命令中指明要清哪一位特殊屏蔽/循环优先级4中断触发方式方式说明边沿触发IRi出现上升沿表示有请求电平触发IRi出现高电平表示有请求须保持到#INTA结束5中断屏蔽方式普通屏蔽IMR对应位1则屏蔽该中断特殊屏蔽除当前服务的中断外允许低优先级中断打断——用于特殊场景5️⃣ 8259A的编程1初始化命令字ICW—— 按固定顺序写入ICW1写偶地址A00D7 D6 D5 D4 D3 D2 D1 D0 x x x 1 LTIM x SNGL IC4 ↑标志 ↑触发 ↑单片 ↑需要ICW4LTIM1电平触发0边沿触发SNGL1单片0级联IC41需要写ICW4ICW2写奇地址A01—— 中断向量码D7 D6 D5 D4 D3 D2 D1 D0 T7 T6 T5 T4 T3 x x xT7T3为向量码高5位低3位由8259A自动填入000111对应IR0~IR7ICW3仅级联时写—— 级联控制字ICW4仅IC41时写—— 中断结束方式D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 SFNM BUF M/S AEOI 1 ↑特殊 ↑缓冲 ↑自动 全嵌套2操作命令字OCW—— 任意时刻写入OCW1写奇地址A01—— 中断屏蔽字D7 D6 D5 D4 D3 D2 D1 D0 M7 M6 M5 M4 M3 M2 M1 M0Mi1屏蔽对应IRi0允许OCW2写偶地址D40, D30—— EOI和优先级循环D7 D6 D5 D4 D3 D2 D1 D0 R SL EOI 0 0 L2 L1 L0常用组合20H00100000B非指定EOI命令最常用A0H10100000B非指定EOI 优先级自动循环OCW3写偶地址D40, D31—— 特殊屏蔽和读寄存器控制3编程示例题目接口地址20H/21H边沿触发单片需ICW4IR0IR7对应08H0FH屏蔽IR4~IR7。INIT8259A: MOV DX, 20H ; A00 MOV AL, 00010011B ; ICW1边沿触发单片需ICW4 OUT DX, AL MOV DX, 21H ; A01 MOV AL, 08H ; ICW2向量码高5位00001B OUT DX, AL MOV AL, 00000001B ; ICW4普通全嵌套非缓冲非自动EOI OUT DX, AL MOV AL, 11110000B ; OCW1屏蔽IR4~IR7 OUT DX, AL中断服务程序模板INT0 PROC FAR PUSH AX ; 保护现场 PUSH DX ; 中断处理代码 MOV AL, 20H ; 非指定EOI命令 MOV DX, 20H OUT DX, AL ; 发送EOI POP DX ; 恢复现场 POP AX IRET ; 中断返回 INT0 ENDP⚠️ 中断服务程序中发送EOI命令OUT 20H, 20H是非常关键的一步如果忘记发送8259A的ISR对应位不会被清零后续同级及更低优先级的中断将永远不会被响应六、 几个思考题学完本文来试试回答这些问题1️⃣ 为什么输入接口需要三态门输出接口需要锁存器答因为数据总线是共享资源同一时刻只能有一个设备向总线发送数据。输入接口用三态门控制不访问时输出高阻态断开访问时才将数据送上总线。输出接口用锁存器是因为CPU输出数据在总线上只存在极短时间外设来不及读取锁存器可以记住数据并持续输出。2️⃣ 查询式传送和中断方式各适用于什么场景答查询式适用于低速外设且CPU利用率要求不高的场合实现简单可靠。中断方式适用于中速外设、需要实时响应和同时管理多个外设的场合CPU效率高但程序复杂。3️⃣ 中断向量表中类型码21H的中断向量存放在哪个地址答向量地址 类型码 × 4 21H × 4 0084H。0084H0085H存放IP偏移地址0086H0087H存放CS段地址。4️⃣ 8259A的中断结束EOI有哪几种方式为什么非自动EOI方式下必须在服务程序中发送EOI命令答三种方式自动EOI#INTA结束时自动清ISR、非指定EOI清ISR中最高优先级位、指定EOI清指定位。非自动EOI方式下中断服务结束后ISR的对应位仍为18259A认为该中断仍在服务中会屏蔽同级和更低优先级的中断因此必须通过软件发送EOI命令将ISR位清零。5️⃣ DMA方式和中断方式的核心区别是什么答核心区别在于数据传输由谁控制。中断方式下数据传输由CPU控制中断服务程序中执行IN/OUT指令CPU仍需参与每次传输。DMA方式下数据传输由DMACDMA控制器控制CPU完全不参与将总线控制权交给DMAC因此DMA方式适合高速大批量传输。 学习总结与建议重点掌握内容I/O接口基础三种端口的功能、独立编址与统一编址的区别简单接口电路三态门输入和锁存器输出的原理与应用四种I/O方式各自的工作原理、优缺点、适用场景中断技术中断响应过程、中断向量表的使用、中断优先级8259AIRR/ISR/IMR三大寄存器、ICW和OCW的格式与编程学习建议对比记忆四种I/O方式、两种编址方式、两种触发方式——用对比表格整理画流程图中断响应过程、DMA传输过程——画出来比背文字有效得多动手编程重点练习8259A初始化编程和中断服务程序的编写理解为什么不要只背结论理解三态门为什么必要、EOI为什么必须发等底层原因✅ 本节完 作者say-fall | 编辑say-fall | 原创不易如果对你有帮助记得 点赞 ⭐ 收藏哦