- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]汇编第五章
第五章 输入输出与中断 第五章 输入输出与中断 5.1 I/O概述 CPU与外部设备交换信息是计算机系统中十分重要和十分频繁的操作。 对于系统中的每一台外设,都需要通过I/O接口实现与CPU的连接。I/O接口通常含有三类寄存器:设备状态寄存器、设备控制寄存器和设备数据寄存器。 5.1 I/O概述 数据寄存器——它保存处理器与外设间交换的数据; 控制寄存器——处理器通过它对外设进行控制,也称命令寄存器; 状态寄存器——外设的当前工作状态通过它向处理器提供。 5.1 I/O概述 5.1 I/O概述 I/O端口是CPU与输入输出设备的交换数据的场所。 端口在I/O空间中均被指定一固定地址,这种寻址方式就被称为端口寻址。在80x86微机中,I/O端口与存储器地址完全分开,编址在一个独立的地址空间中,端口地址为0000H~FFFFH ,目前大多数微机所用的端口地址都在0~3FFH范围之内。 5.1 I/O概述 5.1 I/O概述 (1)输入指令 格式:IN? AL/AX, PortNo/DX 作用:从端口中读入一个字节或字,并保存在寄存器AL或AX中。如果某输入设备的端口地址在0~255范围之内,那么,可在指令IN中直接给出,否则,要把该端口地址先存入寄存器DX中,然后在指令中由DX来给出其端口地址。 5.1 I/O概述 例: in al, 35h ;从端口35h读入一个字节到al中 in ax, 0a8h ;把端口0a8h、0a9h组成的字读入ax mov dx, 312h in al, dx ;从端口312h读入一个字节到al中 in ax, dx ;把端口312h、313h组成的字读入ax 5.1 I/O概述 (2)输出指令 格式:OUT? PortNo/DX, AL/AX 作用:把寄存器AL或AX的内容输出到指定端口。如果某输出设备的端口地址在0~255范围之内,那么,可在指令OUT中直接给出,否则,要把该端口地址先存入寄存器DX中,然后在指令中由DX来给出其端口地址。 5.1 I/O概述 例: out 40h, al ;把al的内容输出到端口40h中 out 30h, ax ;把ax的内容输出到端口30h、 ;31h中 mov dx, 310h out dx, al ;把al的内容输出到端口310h中 out dx, ax ;把ax的内容输出到端口310h、 ;311h中 5.1 I/O概述 外设通过端口与CPU交换数据,有四种数据传送方式: 主要由软件程序控制的无条件传送方式 查询传送方式 中断方式 主要由硬件完成的DMA方式。 5.1 I/O概述 (1)无条件传送方式 CPU不需要查询外设的状态,I/O操作可以随时进行,这种方式称为无条件传送或称为程序直接控制输入输出方式 。 特点:无条件传送是最简单的数据传送方式,它所需要的硬件和软件都是最节省的,但这种方式必须在已知并确信外设已处于准备就绪的情况下才能使用,否则就会出错。 5.1 I/O概述 (2)查询传送方式 无条件传送方式虽然简单,但是只适用于特定场合,如果采用无条件方式传送数据,而没有准确地知道外设是否真正做好了接收或发送数据的准备工作,就可能产生数据的误传。 可在数据传送前,对外设的状态先进行检测,只有在确认外设准备就绪后,才进行数据的传送;否则,就应等待外设达到“就绪”状态,再进行数据传送。这就是查询传送方式。 5.1 I/O概述 5.1 I/O概述 例: 如从外围设备端口输入并存入内存一组数据,外设中数据寄存器用来存放要传送的数据,而状态寄存器用来存放表示设备所处状态的信息,其第7位为就绪位(READY)。当“READY”为1时,表明要输入的数据已准备好,此时可以从数据寄存器输入数据到AL中,用IN指令从数据寄存器输入数据,“READY”立即自动变为0,以便下一次输入数据。 5.1 I/O概述 mov cx, 100 mov bx, 0100H L1: in al, status_port ;从状态寄存器输入状态信息 test al, 80h ;检查“READY”位是否就绪 jz L1 ;未就绪,转L1等待 in al, data_port ;就绪,从数据寄存器读入数据
文档评论(0)