版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章应用篇-输入输出程序设计在微机系统中,外设是以实现人机交互间通讯为目的的一些机电设备;计算机系统通过硬件接口以及I/O控制程序对外设进行控制,使其能协调、有效地完成输入/输出工作。故在对外设的控制过程中,主机不可防止地,要对设备接口进行联络和控制。因此能直接控制硬件的汇编语言就成了编写高性能I/O程序最有效的程序设计语言。本章将以一些常用的I/O设备为例,着重讨论I/O程序设计的几种方法。每种输入/输出设备都要通过一个硬件接口或控制器和CPU相连:软盘←→软盘控制器←→CPU,终端显示器数据接口CPU。这些接口和控制器都能支持输入/输出指令IN,OUT与外设交换信息-----包括控制、状态和数据三种不同性质的信息,它们必须按不同的端口地址分别传送。不同的I/O设备要求传送的数据类型也是不同的。如:终端显示器交换的数据必须是ASCII码。控制信息:输出到I/O接口,告诉接口和设备要做什么工作。状态信息:从接口输入,表示I/O设备当前的状态数据信息:I/O设备和CPU真正要交换的信息。IBMPC具有一系列简单而又灵活的输入/输出方式:①用IN,OUT指令直接在端口级上处理输入/输出的程序直接控制I/O的方式;②中断的传送方式:③DMA方式(直接存储器存取方式):主要由硬件DMA控制器实现其传送功能。
DMA控制器存储器
I/O设备DMA控制器接口一般包括四种存放器:状态控制、数据存放器、地址存放器和字节计数器。这些存放器能在信息传送之前进行初始化,每个字节传送后,地址存放器增1,字节计数器减1。DMA方式的步骤如下:①DMA控制器向CPU发出HOLD信号请求使用总线;②CPU发出响应信号HLDA给DMA控制器,并让出总线,DMA获得总线控制权;③传输数据的存储器地址〔在地址存放器中〕—通过地址总线发出;④传输的数据字节,通过数据总线传送;⑤地址存放器增1,字节计数器减1;⑥如字节计数器非0=>转向③;⑦DMA控制器撤消总线请求信号HOLD,传送结束。I/O接口都有①状态存放器—保存设备和接口的状态信息供CPU对外设进行测试;②数据存放器—用作数据缓冲;③命令存放器—保存CPU发出的命令以控制接口和设备。每一个存放器都分配有一个称为I/O端口的地址编码。IBMPC机的I/O空间允许设置64K个8位端口〔65535〕或32K〔37768〕个16位端口。对不同型号的计算机及其接口,I/O端口的编码有时不完全相同。I/O指令:程序直接控制I/O方式,所用的指令是IN和OUT利用存放器AL或AX来完成任务。INAL,PORT;〔AL〕 〔PORT〕INAX,PORT;〔AX〕 〔PORT+1,PORT〕INAL,DX;〔AL〕〔〔DX〕〕INAX,DX;〔AX〕 〔〔DX〕+1,〔DX〕〕OUTPORT,AL;〔PORT〕〔AL〕 OUTPORT,AX;〔PORT+1,PORT〕〔AL〕OUTDX,AL;〔〔DX〕〕〔AL〕OUTDX,AX;〔〔DX〕+1,〔DX〕〕〔AL〕如果端口地址是八位的,可采用直接寻址方式。例: out 21h, al如果端口地址是十六位的,那么需采用间接寻址方式。例: mov dx, 378h out dx, al使用I/O指令对端口地址进行直接的输入,比调用DOS功能或BIOS例行程序更能提高数据的传送速度和吞吐量,但同时也要求程序员对计算机的硬件结构有一定的了解,其程序对硬件的依赖性也大,因此,对于一般的程序设计,我们还是尽可能使用DOS或BIOS功能调用〔它们也是用IN,OUT指令与外设交换信息的〕
关于INS8250串行通讯口I/O的例子。
数据存放器的端口地址是03F8H
状态存放器的端口地址是03FDH,其中0位是输入数据准备位,5位是输出数据准备位。COM_IN PROC FAR PUSH DX MOV DX, 03FDHCOM_IN1: IN AL, DX TEST AL, 01 JE COM_IN1 MOV DX, 03F8H IN AL, DX RETCOM_IN ENDPCOM_OUT PROC FAR PUSH DX PUSH AX MOV DX, 03FDHCOM_OUT: IN AL, DX TEST AL, 20H JE COM_OUT POP AX MOV DX, 03F8HOUT DX, ALPOP DXRETCOM_OUTENDP注意:用TEST指令对状态存放器进行反复的测试查询等待,在依据状态是否满足要求来确定是否进行数据的传送
查询方式〔或等待方式〕:CPU对外设的状态不断检查直到到达要求,再作数据的传送,当外设还未准备好以前,CUP就要等待,不能做别的操作有时系统中同时有几个设备要求输入/出数据,那么对每个设备都要编写一段执行输入/出数据的程序,然后轮流查询这些设备的准备位,当某一设备准备好允许输入/出数据时,就调用这个设备的I/O程序完成数据传输,否那么依次查询下一个设备是否准备好例如:CUP要从3个设备轮流输入数据。PROC1,PROC2,PROC3分别是设备1,2,3的数据输入程序,它们的状态存放器端口地址分别用STA1,STA2,STA3表示,这三个状态存放器的第5位是输入准备位。INPUT: IN AL,STAT1 TEST AL,20H JZ DEV2 CALL FARPTRPROC1DEV2: IN AL, STAT2 TEXT AL, 20H JZ DEV3 CALL FARPTRPROC2DEV3: IN AL, STAT3 TEST AL, 20H JZ NO-INPUT CALL FARPTRPROC3NO-INPUT: JMP INPUT注意:①查询方式,规定了个设备的优先级:②查询过程中,浪费了CPU原本可执行大量指令的时间中断是CPU和外部设备进行输入/出的有效方法,它可以防止大反复查询外部设备的状态而浪费的时间,从而提高了CPU的效率。中断:是CPU终止正在执行的程序而转去处理特殊事件的操作。中断源:引起中断的事件。它们可能是来自外设的输入/出请求。也可能是计算机的一些异常事故或其它内部原因非屏蔽中断NMI请求中断逻辑IRO8259A可编程控制器PICIRTINTN溢出除法单步指令错误IF=18086/8088中断源如下图电源错,内存或I/O总线的奇偶错等2NMIN401INTR系统定时器打印机内中断内中断又称为软件中断,它通常由三种情况引起:
①由中断指令INT引起:INT指令可以指定0~0FFH中的任何类型号,除系统占用的类型号外,用户可利用为用户保存的类型号扩充新的中断功能。②由CPU的某些错误而引起,在执行程序时,当某些运算错误〔如除法错为中断INTO;溢出为4类型中断〕发现错误后,以中断方式中止正在进行的程序,待程序员改正错误后,重新运行程序。③为调试程序〔DEBUG〕设置的中断:
单步中断:当标志位TF置为1时,每条指令执行后,CPU自动产生类型1中断——单步中断断点中断:中断类型为3。断点可以设置在程序的任何地方,设置断点时,只要将指令INT3插入程序中,CPU每执行到断点处的INT3指令便产生一个中断。
INTO、INT指令以及除法错误中断都不能被屏蔽,并且比任何外部中断的优先级都高。外中断与中断优先级来自处理机的外部条件〔如I/O设备或其它处理机等〕,经完全随机的方式中断现行程序而转向另一处理程序。
外设通过8259A可编程中断控制器和CPU相连,8259A可接受来自外设的中断请求信号,并把中断源的中断类型号送CPU,如果CPU响应外设的中断请求,就自动转入响应的中断处理程序。条件:1、外设的中断请求是否屏蔽=>由8259A中的中断屏蔽存放器控制。
2、CPU是否允许响应中断=>由中断允许位〔PSW〕IF控制。中断屏蔽存放器的I/O端口地址是21H,它的8位对应控制8个外部设备。某位为0=>允许某外设中断某位为1=>禁止某外设中断例如:只允许键盘中断,那么可设置如下中断屏蔽字: MOV AL,11111101B OUT 21H,AL21H打印机软盘硬盘串行通讯口1串行通讯口2保存键盘定时器屏蔽存放器在主程序的初始化局部设中断屏蔽存放器,以确定允许用中断方式工作的外部设备。
CPU是否响应中断得看标志位IF
IF=1〔STI〕开中断允许外设中断
IF=0〔CTI〕关中断禁止外设中断在一次外中断处理结束之前,还应给8259A可编程中断控制器的中断命令存放器发出中断结束命令EOI〔EOI=1〕即: MOV AL, 20H OUT 20H, AL中断命令存放器
〔I/O〕端口20HRSLEOI00L2L1L0R,SL组合控制各中断请求端的优先级次序我们知道,当有多个中断源同时向CPU请求中断时,可以先给各中断源事先设定一个优先级次序,当中断到来时,CPU先比较它们的优先级,然后从高到低依次处理各中断请求。IBMPC规定的中断优先次序〔从高到低〕为:
内中断〔除法错,INTO,INT〕非屏蔽中断〔NMI〕可屏蔽中断〔INTR〕单步中断IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7定时器键盘打印机INTR的优先级可分为8级,在正常方式下,优先级次序是:R和SL可对它们这个次序进行编排:L2,L1,L0指定IR0~IR7中具有最低优先级的中断请求,EOI为中断结束位。中断结束时,必须将EOI置1,否那么以后将屏蔽掉同级中断或低级中断的处理;在必要的时候在中断处理程序中也可利用EOI命令去除当前的中断请求,使得在中断过程中又能响应同级或低级中断例: MOV AL, 11100100B
OUT 20H, AL其中:RSL=11,EOI=1,L2L1L0=100含义:将IR4变成最低级的中断请求:IR5,IR6,IR7,IR0,IR1,IR2,IR3,IR4中断处理操作的步骤〔以BIOS中断INT4AH为例〕
1.取中断类型号N
2.标志存放器〔PSW〕内容入栈3.当前代码段存放器〔CS〕内容入栈
4.当前指令存放器〔IP〕内容入栈5.屏蔽外部中断和单步中断〔IF=0,TF=0〕6.从中断向量表中取中断向量,4*N的字内容送IP,取4*N+2中的字内容入CS
7.转中断处理程序,中断返回时使用指令IRET向量地址=4AH*4=128HINT4BH向量12812912A12BIPCSF000:1805中断处理程序INT4AH中断嵌套也要递循中断优先级的次序:例如:有IR2与IR4同时申请,而后又有IR1,到达最后IR3的中断请求也到达。主程…....IR2,IR4IR2处理STI...〔EOI〕...IRETIR1IR1处理...STI...〔EOI〕IRETIR4处理...STI...〔EOI〕IRETIR3请求...STI...〔EOI〕IRETIR3处理8086/8088INTR
主IR0—8059AIR1—IR2—INTIR3—IR4—IR5—IR6—IR7—
IR0’—IR1’—INTIR2’—
从1IR3’—8059AIR4’—IR5’—IR6’—IR7’—
IR0’’—
从2IR1’’—8059AIR2’’—IR3’’—INTIR4’’—IR5’’—IR6’’—IR7’’—优先级如下:1R0〔1RO’,1R1’,1R2’…1R7’〕,〔1R0’’,1R1’’…1R7’’〕,1R3,1R4,1R5,1R6,1R7对多级的中断系统〔主8259A,8259A〕中断向量表IBMPC机共能支持256种类型的中断,中断类型号依次为0~0FFH,中断向量表存放在最底1K字节,地址从0到3FFH。低两字节偏移量高两字节段地址设置中断向量可以利用保存的中断类型号,扩充自己需要的中断功能,对新增加的中断处理程序要在中断向量表中建立相应的中断向量。用户在设计新的中断功能时或是用自己编写的中断处理程序代替系统中的中断处理功能时,要注意保存原中断向量,再设置新的中断向量,在程序结束之前恢复原中断向量。
在实际工作中,我们总是防止直接使用中断向量的绝对地址,而是使用DOS功能调用〔21H〕来存取中断向量。1、绝对地址方式
MOV AX, 0
MOV ES, AX
MOV BX, N*4
MOV AX, OFFSETinth MOV ES:wordPTR[BX],AX
MOV AX, SEGinth MOV ES:wordPTR[BX+2],AX
inth:
IRET::2、功能调用方式:方法:①设置中断向量:〔把由AL指定的中断类型的中断向量DS:DX放置在中断向量表中〕预置:AH=25H
AL=中断类型号
DS:DX=新增的中断处理程序的地址
执行:INT21H②取中断向量〔把由AL指定的中断类型的中断向量从中断向量表中取到ES:BX中〕
预置: AH=35H
AL=中断类型号
执行: INT21H
返回时送:ES:BX=中断向量中断处理程序的编写(1)保存存放器的内容(2)如允许嵌套,那么开中(STI)(3)处理中断(4)关中断(5)恢复存放器内容(6)送中断结束命令(EOI)给中断命令存放器(7)返回被中断的程序(IRET)中断程序举例TITLE TIMER_INT-EXAMPLE8-1dseg segmentcount dw182mess db‘Thebellisring!',0dh,0ah,'$'dseg endscseg segmentmain procfarassume cs:cseg,ds:dseg,es:dsegstart: push ds sub ax, ax push axmov ax, dsegmov ds, axmov al, 1chmov ah, 35h
int 21hpush espush bxp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理伦理原则
- 护理安全创新管理模式
- 护理研究项目申报的沟通技巧
- 护理工作中的伦理考量
- 旅游行业酒店用品采购策略
- 基于大数据的智能教学系统设计与实施
- 人教版四年级下册数学第九单元测试卷(含答案解析)
- 大理市海南片区入湖沟渠(凤仪镇18条沟渠)水生态环境保护修复项目水土保持方案报告表
- 旅游景区人事部面试全攻略
- 零售业人力资源部招聘全攻略
- 2025至2030中国有机芝麻行业产业运行态势及投资规划深度研究报告
- 低空经济试题及答案
- (高清版)DB11∕T 1455-2025 电动汽车充电基础设施规划设计标准
- 养老院安全生产教育培训内容
- 设备设施停用管理制度
- 学会宽容第3课时-和而不同 公开课一等奖创新教案
- 山东高考英语语法单选题100道及答案
- 职业道德与法治知识点总结中职高教版
- 2025年绿色低碳先进技术示范工程实施方案-概述及范文模板
- 2025上半年广西现代物流集团社会招聘校园招聘149人笔试参考题库附带答案详解
- 高值耗材点评制度
评论
0/150
提交评论