- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章输入输出序设计
第八章 输入/输出程序设计 在广泛使用的微型机系统中,外部设备是以实现人机交互和机间通信为目的的一些机电设备。计算机系统通过硬件接口以及I/O控制程序对外部设备的控制过程中,主机不可避免地,有时甚至要很频繁地对设备接口进行联络和控制,因此,能直接控制硬件的汇编语言就成了编写高性能I/O程序最有效的程序设计语言。 §8.1 I/O设备的数据传送方式 CPU与外设 每种输入输出设备都要通过一个硬件接口或控制器和CPU相连。这些接口和控制器都能支持输入输出指令IN,OUT与外部设备交换信息。这些信息包括控制、状态和数据三种不同性质的信息,他们必须按不同的端口地址分别传送 控制信息输出到I/O接口,通知接口和设备要做什么动作。 状态信息从I/O接口输入到CPU,表示I/O设备当前所处的状态 数据信息是I/O设备和CPU真正要交换的信息。 §8.1 I/O设备的数据传送方式 程序直接控制I/O方式 中断传送方式 DMA(Direct Memory Access)方式 §8.1 I/O设备的数据传送方式 DMA(Direct Memory Access)方式 也称为成组数据传送方式。主要是用于一些高速的I/O设备,如磁带、磁盘模数转换器(A/D)等设备。这些设备传输字节或字的速率非常快。对这类高速I/O设备,用执行输入输出指令的方式或完成一次次中断序列的方法来传输字节,将造成数据的丢失,而DMA方式能使I/O设备直接和存储器进行成批数据的快速传输。 §8.1 I/O设备的数据传送方式 DMA(Direct Memory Access)方式 DMA控制器(Intel8237A)一般包括四个寄存器:控制寄存器、状态寄存器、地址寄存器和字节计数器,这些寄存器在信息传送之前应进行初始化,即系统程序在地址寄存器中设置要传送的数据的首地址,在字节寄存器中设置要传送的数据长度(字节数),在状态控制寄存器中设置控制字,指出数据是输入还是输出,并启动DMA操作。 §8.1 I/O设备的数据传送方式 DMA(Direct Memory Access)方式 DMA控制器向CPU发出HOLD信号请求使用总线。 CPU发出响应信号HOLD给DMA控制器,并将总线让出,这时CPU放弃了对总线的控制,而DMA控制器获得了总线控制权。 传输数据的存储器地址(在地址寄存器中)通过地址总线发出。 传输的数据字节通过数据总线进行传送。 地址寄存器增1,以指向下一个要传送的字节。 字节计数器减1。 如字节计数器非0,转向第3步。 否则,DMA控制器撤销总线请求信号HOLD,传送结束。 §8.2 程序直接控制I/O方式 I/O端口 计算机的外部设备和大容量存储设备都是通过接口连接到系统上,每个接口由一组寄存器组成,这些寄存器都分配有一个称为I/O端口的地址编码。计算机的CPU和内存就是通过这些端口和外部设备进行通信的。 I/O接口部件中一般有三种寄存器:数据寄存器、状态寄存器、控制寄存器 §8.2 程序直接控制I/O方式 I/O端口 在80x86微机中,I/O端口编址在一个独立的地址空间中,这个I/O空间允许设置64K(65536)个8位端口或32K个(32768)16位端口,这些端口地址实际上只用了其中很小一部分。 §8.2 程序直接控制I/O方式 I/O指令 IN(input)输入 OUT(output)输出 这组指令只限于使用累加器EAX,AX,AL传送信息 §8.2 程序直接控制I/O方式 I/O指令 IN输入 长格式:IN AL,PROT(字节) IN AX,PROT(字) IN EAX,PROT(双字) 执行的操作:(AL)?(PORT) (字节) (AX)?(PORT+1,PROT) (字) (EAX)?(PORT+3,PORT+2,POTR+1,PROT) (双字) §8.2 程序直接控制I/O方式 I/O指令 IN输入 短格式:IN AL,DX(字节) IN AX,DX(字) IN EAX,DX(双字) 执行的操作:(AL)?((DX)) (字节) (AX)?((DX)+1, (DX)) (字) (EAX)?((DX)+3, (DX)+2, (DX)+1,(DX)) (双字) §8.2 程序直接控制I/O方式 I/O指令 OUT输出 长格式:OUT PROT,AL(字节)
文档评论(0)