欢迎来到天天文库
浏览记录
ID:42818604
大小:1.14 MB
页数:57页
时间:2019-09-23
《应用篇-输入输出程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第七章应用篇-输入输出程序设计在微机系统中,外设是以实现人机交互间通讯为目的的一些机电设备;计算机系统通过硬件接口以及I/O控制程序对外设进行控制,使其能协调、有效地完成输入/输出工作。故在对外设的控制过程中,主机不可避免地,要对设备接口进行联络和控制。因此能直接控制硬件的汇编语言就成了编写高性能I/O程序最有效的程序设计语言。本章将以一些常用的I/O设备为例,着重讨论I/O程序设计的几种方法。每种输入/输出设备都要通过一个硬件接口或控制器和CPU相连:软盘←→软盘控制器←→CPU,终端显示器数据接口
2、CPU。这些接口和控制器都能支持输入/输出指令IN,OUT与外设交换信息-----包括控制、状态和数据三种不同性质的信息,它们必须按不同的端口地址分别传送。不同的I/O设备要求传送的数据类型也是不同的。如:终端显示器交换的数据必须是ASCII码。控制信息:输出到I/O接口,告诉接口和设备要做什么工作。状态信息:从接口输入,表示I/O设备当前的状态数据信息:I/O设备和CPU真正要交换的信息。IBMPC具有一系列简单而又灵活的输入/输出方式:①用IN,OUT指令直接在端口级上处理输入/输出的程序直接控制I/
3、O的方式;②中断的传送方式:③DMA方式(直接存储器存取方式):主要由硬件DMA控制器实现其传送功能。DMA控制器存储器I/O设备DMA控制器接口一般包括四种寄存器:状态控制、数据寄存器、地址寄存器和字节计数器。这些寄存器能在信息传送之前进行初始化,每个字节传送后,地址寄存器增1,字节计数器减1。DMA方式的步骤如下:①DMA控制器向CPU发出HOLD信号请求使用总线;②CPU发出响应信号HLDA给DMA控制器,并让出总线,DMA获得总线控制权;③传输数据的存储器地址(在地址寄存器中)—通过地址总线发出;
4、④传输的数据字节,通过数据总线传送;⑤地址寄存器增1,字节计数器减1;⑥如字节计数器非0=>转向③;⑦DMA控制器撤消总线请求信号HOLD,传送结束。I/O接口都有①状态寄存器—保存设备和接口的状态信息供CPU对外设进行测试;②数据寄存器—用作数据缓冲;③命令寄存器—保存CPU发出的命令以控制接口和设备。每一个寄存器都分配有一个称为I/O端口的地址编码。IBMPC机的I/O空间允许设置64K个8位端口(65535)或32K(37768)个16位端口。对不同型号的计算机及其接口,I/O端口的编码有时不完全相
5、同。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)如果端口地址是八位的,可采用直接寻址方式。例:
6、out21h,al如果端口地址是十六位的,则需采用间接寻址方式。例:movdx,378houtdx,al使用I/O指令对端口地址进行直接的输入,比调用DOS功能或BIOS例行程序更能提高数据的传送速度和吞吐量,但同时也要求程序员对计算机的硬件结构有一定的了解,其程序对硬件的依赖性也大,因此,对于一般的程序设计,我们还是尽可能使用DOS或BIOS功能调用(它们也是用IN,OUT指令与外设交换信息的)关于INS8250串行通讯口I/O的例子。数据寄存器的端口地址是03F8H状态寄存器的端口地址是03FDH,其
7、中0位是输入数据准备位,5位是输出数据准备位。COM_INPROCFARPUSHDXMOVDX,03FDHCOM_IN1:INAL,DXTESTAL,01JECOM_IN1MOVDX,03F8HINAL,DXRETCOM_INENDPCOM_OUTPROCFARPUSHDXPUSHAXMOVDX,03FDHCOM_OUT:INAL,DXTESTAL,20HJECOM_OUTPOPAXMOVDX,03F8HOUTDX,ALPOPDXRETCOM_OUTENDP注意:用TEST指令对状态寄存器进行反复的测试查
8、询等待,在依据状态是否满足要求来确定是否进行数据的传送查询方式(或等待方式):CPU对外设的状态不断检查直到达到要求,再作数据的传送,当外设还未准备好以前,CUP就要等待,不能做别的操作有时系统中同时有几个设备要求输入/出数据,那么对每个设备都要编写一段执行输入/出数据的程序,然后轮流查询这些设备的准备位,当某一设备准备好允许输入/出数据时,就调用这个设备的I/O程序完成数据传输,否则依次查询下一个设备是否准备好例如:CUP要
此文档下载收益归作者所有