版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IBM-PC汇编语言程序设计第八章·输入输出程序设计(上)Contents本章内容概览系统掌握I/O数据传送的核心机制与编程实践01I/O设备数据传送方式02程序直接控制I/O03中断传送方式04中断向量与中断处理05实例编程与综合应用CHAPTER01I/O设备数据传送方式理解CPU与外设之间的三种基本通信模式ARCHITECTUREI/O系统整体架构CPU通过I/O接口与外设通信,I/O接口作为中间层屏蔽外设差异,使CPU可以用统一的IN/OUT指令操作不同设备。理解CPU-总线-I/O接口-外设的分层结构,是掌握I/O编程的前提。IBMPC主板与8088CPU芯片实物01CPU不直接连接外设,而是通过I/O接口芯片作为桥梁,接口一端连总线、一端连外设8255A/8259A02I/O接口内部包含数据寄存器、状态寄存器和控制寄存器,CPU通过端口地址访问这些寄存器3类寄存器03IN指令从I/O端口读取数据到CPU,OUT指令将CPU数据写入I/O端口,两条指令是I/O编程的最基本途径IN/OUT04DOS功能调用和BIOS例行程序底层也是由IN/OUT指令实现的,只是对程序员做了封装INT21HI/ODATATRANSFER三种I/O数据传送方式对比程序查询方式由CPU主动轮询外设状态,实现简单但效率最低;中断方式由外设主动通知CPU,释放了CPU等待时间;DMA方式让外设与内存直接交换数据,适合大批量高速传输。三种方式效率递增、复杂度也递增。01查询方式(程序控制)CPU循环读取状态寄存器判断外设就绪后传送,全程参与等待,利用率低02中断方式外设准备好后向CPU发中断请求,CPU暂停当前任务处理I/O后返回,显著提升效率03DMA方式DMA控制器接管总线,数据在内存与外设间成组传送,不经CPU,适用大数据量场景04选择依据低速少量用查询,中速交互用中断,高速批量用DMA,实际系统常混合使用8237DMA控制器芯片实物ASSEMBLY·I/OINSTRUCTIONS程序直接控制I/O基础IN和OUT指令是主机与外设通信的最基本途径,所有高级I/O功能底层都由这两条指令实现。端口地址范围和寻址方式决定了CPU可以访问的I/O空间大小。8086CPU芯片引脚·I/O端口物理接口INAL,port—从8位端口地址读取一个字节到AL寄存器,端口地址范围0–255,如INAL,61H读取设备控制寄存器OUTport,AL—将AL中的一个字节写入8位端口地址,如OUT21H,AL向中断命令寄存器发送命令DX间接寻址—端口地址超过255时,需先将地址装入DX寄存器,再用INAL,DX或OUTDX,AL,可访问0–65535全部端口独立编址—I/O端口与内存地址空间独立编址(x86特有),IN/OUT指令不影响内存,避免地址冲突汇编I/O·程序查询循环查询状态寄存器程序查询方式的核心模式是"读状态–测试标志位–未就绪则跳转"的循环结构。该模式通过TEST指令检测状态寄存器的特定位,实现对外设就绪状态的轮询等待。一次完整的查询–传送周期由四个阶段依次构成,以8086汇编指令表达如下。INALAGAIN:INAL,STATUS_PORT从状态端口读取当前设备状态字节到AL寄存器TESTTESTAL,00000100B位与操作测试第2位(就绪标志),不影响AL原值但设置ZFJZJZAGAIN若ZF=1(设备未就绪)则跳回继续查询,形成等待循环MOV/OUTMOVAL,DATA_PORT→OUT就绪后读取数据并输出,完成一次完整的查询–传送过程示波器检测数字信号·实验室实拍I/O轮询机制轮流查询多种I/O设备轮流查询按预设顺序依次检查多个外设状态,排列靠前的设备获得更高优先级。该方式优点在于优先级可编程调整,缺点是CPU在无设备就绪时空转浪费严重,效率低下。01DEV1:INAL,STAT1/TESTAL,STAT1_BIT/JZDEV2—检查设备1状态,未就绪则跳到检查设备2,形成基础轮询循环结构IN→TEST→JZ02就绪后CALLFARPTRPROC1调用设备1的处理程序,处理完后重新开始轮询,实现多设备分时服务与状态切换CALL→RET→重轮询03优先级由代码中设备检查的先后顺序决定,修改代码即可调整优先级,灵活性优于硬件固定优先级方案,适应动态需求变化可编程优先级04核心缺陷:所有设备均未就绪时CPU在轮询循环中空转,无法执行其他有用任务,系统整体效率大幅降低,资源利用率低下CPU空转瓶颈Chapter02程序直接控制I/O深入通过打印机输出和扬声器控制实例掌握端口编程AssemblyI/O·ParallelPort打印机查询输出子程序打印机并行接口使用378H(数据)和379H(状态)两个端口,输出流程为:写数据到数据端口、读状态端口检测ACK应答位、未应答则循环等待。完整展示了查询方式的实际编程模式。01入口:保存AX和DX寄存器(MOVDX,378H),将待打印字符通过OUTDX,AL写入数据端口378H378H02读状态:MOVDX,379H/INAL,DX读取状态端口,TESTAL,8检测ACK应答位(第3位)379H03等待循环:JEwait跳回重新读状态,直到打印机返回应答信号,表示字符已被接收并打印JE04出口:恢复DX和AX寄存器(POP),RET返回调用者,完成一个字符的查询→输出→应答全过程RET中断控制机制8259A中断命令寄存器与EOICPU在处理完一次中断后必须向8259A发送EOI(EndofInterrupt)信号,否则8259A会阻塞后续同级和低级中断请求。018259A中断命令寄存器位于I/O端口20H,CPU通过OUT20H,AL向其发送控制命令。该端口是主控芯片的核心控制接口,所有中断管理操作均通过此端口完成。Port20H02EOI命令值为20H,MOVAL,20H/OUT20H,AL即可通知8259A当前中断已处理完毕。这是中断服务程序中必不可少的标准操作序列。CMD=20H03若不发EOI,8259A内部ISR对应位保持置位,同级和低级中断请求将被屏蔽。这将导致系统无法响应后续关键中断,严重影响实时性和系统稳定性。ISR阻塞04EOI通常放在中断处理程序末尾、IRET指令之前,确保中断返回前8259A已恢复就绪。正确的指令顺序是保证中断系统可靠运行的关键。→IRETInterruptControl中断允许与屏蔽的双重控制中断控制分为CPU层(FLAGS中IF位)和8259A层(中断屏蔽寄存器)两级。STI/CLI控制CPU是否响应中断,8259A的屏蔽寄存器控制哪些设备可以发出中断请求,两级协同实现精细的中断管理。01CPU层:FLAGS寄存器IF位=1允许中断(STI指令),IF位=0禁止中断(CLI指令),决定CPU是否响应INTR引脚的中断请求STI/CLI028259A层:中断屏蔽寄存器位于端口21H,8位分别对应IR0-IR7,某位置1屏蔽该级中断,清0允许该级中断端口21H03两级协同:只有IF=1且对应屏蔽位=0时,设备的中断请求才能最终送达CPU并被响应IF=1&Mask=004临界区保护:在操作共享数据前用CLI禁止中断,操作完后用STI恢复,防止中断处理程序干扰数据一致性CLI→STIHARDWARE·I/OPORTPC扬声器控制原理PC扬声器由端口61H的设备控制寄存器控制,第0位为定时器门控、第1位为扬声器使能。两位同时置1时定时器方波驱动扬声器发声,配合定时器计数值可控制音调频率。设备控制寄存器第0位控制2号定时器(8253)的门控信号,第1位控制扬声器数据输出使能61H发声条件两位同时置1开启定时器门控和扬声器,方波信号经与门和放大器驱动扬声器ALOR3静音条件两位同时清0关闭门控和扬声器,扬声器停止输出声音AND0FCH音调控制通过设置定时器2的计数值改变方波频率,计数值越小频率越高、音调越高8253PORTI/O·汇编实验Sound程序(直接端口操作版)通过直接操作61H端口和控制循环延时实现扬声器发声,是最基础的I/O编程实践。该方法占用CPU做延时,效率低但原理清晰,适合教学演示。01初始化INAL,61H读取当前控制寄存器值,ANDAL,11111100B清除第0和第1位,关闭扬声器和门控IN/AND02发声循环XORAL,2翻转第1位产生方波,OUT61H,AL写回端口,实现扬声器信号的开关交替XOR方波03延时控制内层MOVCX,140H/wait1:LOOPwait1产生固定延时,决定方波频率和音调高低140HLOOP04时长控制外层DECDX/JNEsound循环100次,控制发声持续时间,循环结束后扬声器自动停止DEC100次Assembly·ProcessEncapsulationSound程序(过程封装版)将扬声器控制封装为speaker_on和speaker_off两个独立过程,配合结构化伪指令和DOS中断实现"开启-等待-关闭"的清晰流程,体现了模块化编程思想。01speaker_on过程INAL,61H→ORAL,3→OUT61H,AL,将第0和第1位置1,开启定时器和扬声器ORAL,302speaker_off过程INAL,61H→ANDAL,0FCH→OUT61H,AL,清除第0和第1位,关闭扬声器ANDAL,0FCH03主程序启动.startup初始化后调用speaker_on开启发声,MOVAH,1→INT21H等待用户按键INT21H04退出与复用用户按任意键后调用speaker_off关闭扬声器,.exit0正常退出,结构清晰、过程可独立复用.exit0CHAPTER03中断传送方式从硬件中断源到CPU中断响应的完整机制CPUINTERRUPTSYSTEM中断的基本概念与分类中断是CPU暂停当前程序、转去处理紧急事件、处理完再返回的机制。中断源分为外中断(硬件触发)和内中断(软件/CPU异常触发)两大类,各自有不同的触发条件和处理方式。中断源引起中断的事件或信号,如外设请求、硬件故障、软件指令等,是中断产生的根本原因。中断源决定了中断的类型和优先级,CPU需要识别不同来源以采取相应的处理策略。外中断(硬中断)来自CPU外部硬件,分为可屏蔽中断(INTR引脚,外设I/O请求)和非屏蔽中断(NMI引脚,电源掉电/奇偶错)。可屏蔽中断受IF标志位控制,非屏蔽中断用于处理紧急硬件故障。内中断(软中断)来自CPU内部,包括INTn指令主动触发、除法错(类型0)、溢出(类型4)、单步调试(类型1)等。内中断与当前执行的指令密切相关,通常用于异常处理和系统调用。中断响应条件CPU在每条指令结束时检查是否有中断请求,满足条件(IF=1、无更高优先级中断)则在下一指令周期响应。响应过程包括保护现场、获取中断向量、转去执行中断服务程序。中断系统架构80x86中断源与类型号分配IBM-PC系统中内中断类型号0-4由CPU固定分配,外中断由8259A管理并映射到类型8-15(08H-0FH)。每个类型号对应特定的硬件事件,是中断处理程序定位的唯一依据。01内中断:类型0=除法错,类型1=单步,类型2=NMI,类型3=断点(INT3),类型4=溢出(INTO)。这些中断由CPU内部硬件自动检测并产生,无需外部设备触发,响应优先级最高。TYPE0–4028259A管理8级可屏蔽中断IR0–IR7,对应中断类型08H–0FH。外设通过IRQ请求线向8259A发送中断请求,经判优后向CPU转发。IF标志位控制是否响应,实现中断的灵活开关。IR0–IR70308H=系统定时器(每秒触发18.2次),09H=键盘中断,0AH=彩色图形接口,0EH=软盘控制器,0FH=打印机。这些中断请求构成了PC系统最基本的外设服务框架,支撑系统运行。18.2/S04中断类型号N决定中断向量表中的入口位置:向量地址=N×4,其中低两字节存偏移地址IP,高两字节存段地址CS。CPU据此自动跳转执行对应的中断处理程序,实现快速响应。N×4InterruptResponse中断响应与处理流程CPU响应中断时自动保存现场(FLAGS/CS/IP压栈)、禁止新中断(清IF和TF)、从中断向量表取入口地址跳转。中断处理程序用IRET恢复现场返回,整个过程由硬件自动完成。现场保存:CPU自动将FLAGS、CS(代码段)、IP(指令指针)三个寄存器依次压入堆栈,保护被中断程序的执行状态标志清除:硬件自动清除IF(禁止可屏蔽中断嵌套)和TF(禁止单步),防止中断处理过程中被新中断打断向量获取:根据中断类型号N计算向量地址(4×N),从中断向量表读取4字节:偏移地址→IP,段地址→CS中断返回:IRET指令从堆栈弹出IP、CS、FLAGS恢复现场,CPU回到被中断指令的下一条继续执行CHAPTER04中断向量与中断处理中断向量表结构、DOS功能调用与中断处理程序编写INTERRUPTVECTORTABLE中断向量表结构中断向量表固定位于内存00000H-003FFH,共256个向量、每个4字节(2字节IP+2字节CS)。类型N的向量地址为4×N,CPU响应中断时自动从该地址取出处理程序入口。01表位置:固定在物理内存00000H-003FFH(1KB空间),共256个中断类型,每个类型占4字节02向量内容:低2字节=偏移地址(IP),高2字节=段地址(CS),合起来构成中断处理程序入口地址CS:IP03地址计算:类型号N的向量位于物理地址4×N处,如类型9(键盘)的向量在地址36(24H)处04读取过程:CPU响应中断时,自动将(4×N)处的字装入IP,(4×N+2)处的字装入CS,完成跳转内存布局·00000H–003FFH00000H003FFH地址00000H00004H···003FCHIPCSxxxxHxxxxHxxxxHxxxxH···xxxxHxxxxH类型N=0N=1N=255示例类型9(键盘)→地址4×9=36(24H)每向量=4字节256×4B=1024B(1KB)INTERRUPTVECTOR·DOSAPI设置中断向量:DOS功能调用DOS提供AH=25H功能调用安全地设置中断向量,将DS:DX指向的处理程序入口写入中断向量表。相比直接写内存,该方法自动处理中断屏蔽,是推荐的编程方式。入口参数AH=25H为功能号,AL传入中断类型号N,DS:DX指向中断处理程序的入口地址(段地址:偏移地址),三者缺一不可。AH=25H调用方式设置好寄存器后执行INT21H,DOS自动将DS写入(4×N+2)的段地址位置,DX写入(4×N)的偏移地址位置。INT21H安全优势DOS功能调用在写入过程中自动禁止中断(CLI),写入完毕后恢复,避免写入过程中断导致向量表数据不完整。CLI使用场景安装自定义中断处理程序时,先用AH=25H将处理程序入口注册到中断向量表,系统即可响应该中断请求。中断注册ASSEMBLY·INTERRUPTVECTOR直接写内存设置中断向量通过将ES设为0并用MOV指令直接写入中断向量表,是最底层的中断向量设置方法。需要手动计算地址(N×4)并分两次写入偏移和段地址,适合无DOS环境的场景。01MOVAX,0/MOVES,AX将ES指向物理内存最低端(段地址0),使ES:BX可直接访问中断向量表02MOVBX,N*4计算类型N的向量在表中的偏移地址,作为后续写入的基址03MOVAX,OFFSETINTHAND取中断处理程序偏移地址,通过MOVES:[BX],AX写入向量表低2字节(4×N处)04MOVAX,SEGINTHAND取中断处理程序段地址,通过MOVES:[BX+2],AX写入向量表高2字节(4×N+2处)ISRDevelopment中断处理程序编写规范中断处理程序必须保存和恢复所有使用的寄存器、在退出前发送EOI(硬件中断)、用IRET返回。与普通子程序不同,中断处理程序被异步调用,必须保证对调用者完全透明。Step01入口保存—PUSH所有在处理中用到的寄存器(AX/BX/CX/DX/SI/DI/DS/ES等),防止破坏被中断程序的上下文PUSHALLStep02业务逻辑—执行具体的中断服务功能,如读取键盘扫描码、处理定时器计数、控制外设等SERVICEStep03EOI通知—若为硬件中断,在退出前执行MOVAL,20H/OUT20H,AL通知8259A中断已处理完毕0x20EOIStep04现场恢复与返回—POP所有保存的寄存器(顺序与PUSH相反),最后用IRET弹出IP/CS/FLAGS返回被中断程序IRETINT21H·DOSSYSTEMCALL保存与恢复中断向量安装自定义中断处理前应先用AH=35H获取并保存旧向量,程序退出时用AH=25H恢复,确保不破坏系统原有的中断服务。这是编写驻留程序(TSR)的标准做法。01获取旧向量设置AH=35H、AL=中断类型号,调用INT21H后ES:BX返回当前中断处理程序的入口地址(段:偏移)AH=35H02保存旧向量将ES和BX的值存入内存变量(如OLD_SEG和OLD_OFFSET),供程序退出时恢复使用ES:BX03安装新向量用AH=25H将自定义处理程序入口写入中断向量表,接管该类型的中断处理AH=25H04程序退出恢复用AH=25H将保存的旧向量写回中断向量表,确保系统恢复原始状态,避免崩溃TSR标准做法InterruptSystem可屏蔽中断与非屏蔽中断可屏蔽中断(INTR)受IF位和8259A屏蔽寄存器双重控制,可被STI/CLI开关;非屏蔽中断(NMI)不受IF位影响,CPU必须立即响应,用于处理电源掉电等致命硬件故障。可屏蔽中断通过INTR引脚请求,受IF位(STI允许/CLI禁止)和8259A中断屏蔽寄存器双重控制,外设I/O请求均属此类INTR非屏蔽中断通过NMI引脚请求,不受IF位控制,CPU在当前指令结束后立即响应,类型号固定为2NMINMI典型场景电源掉电预警、内存奇偶校验错误等严重硬件故障,必须立即处理以避免数据丢失Type28259A屏蔽控制端口21H的中断屏蔽寄存器8位对应IR0-IR7,位=1屏蔽该级,位=0允许该级中断请求送达CPU21HCHAPTER05实例编程与综合应用键盘中断、定时器中断及综合I/O编程实践HardwareInterrupt键盘中断(IRQ1/INT09H)处理键盘通过IRQ1触发INT09H中断,CPU从60H端口读取扫描码并处理。自定义键盘中断处理程序可以实现热键拦截、按键过滤等高级功能,是TSR程序的核心技术。01触发机制:按键时键盘硬件向8259A的IR1发送中断请求,中断类型号为09H,CPU响应后跳转到INT09H处理程序IRQ102默认处理:BIOS的INT09H从端口60H读取扫描码,转换为ASCII码存入键盘缓冲区(0040:001E),并更新键盘状态字节60H03自定义拦截:用AH=35H保存原INT09H向量,安装自定义处理程序,在其中读取60H端口判断是否为热键AH=35H04链式调用:自定义处理完后可通过JMPFAR跳转到原INT09H处理程序,保留系统正常键盘功能,实现透明的热键监控JMPFARHardwareInterrupt系统定时器中断(INT08H)8253定时器通道0每秒触发18.2次INT08H中断,是PC系统的时间基准。自定义定时器中断处理程序可实现后台定时任务、动画刷新和系统监控,是TSR程序最常用的钩子。HARDWARETRIGGER8253定时器通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单片技术实践 10
- 口腔护士在根管治疗中的角色与职责
- 《汽车专业英语》-1.9 Starting System 1
- 《城市轨道交通应急处理》试题A及答案
- 大学生劳动教育测试题 (4)电子模板
- 科室特色健康知识
- 刘朝晖安全经验谈讲解
- 2026年新入职工入职安全培训考试试题及答案
- 零坍塌目标安全交底
- 行业研究员职业规划
- 我们的组织我了解(课件)-二年级上册综合实践活动苏少版
- 儿童特应性皮炎护理
- 2023年国家林业和草原局直属事业单位招聘笔试真题
- LY/T 3396-2024植物新品种近似品种筛选指南
- 制造业工厂经营分析报告
- 《元器件焊接》课件
- 煤系固废利用课件
- 审计人员的沟通与心理调适
- 原创蓝色矢量安徽省政区地图模板可编辑中国地图PPT模板
- 田麦久运动训练学
- 白龙江喜儿沟水电站工程移民安置综合监理大纲
评论
0/150
提交评论