每一种输入设备都要通过硬件接口或控制器与CPU相连,程序利用I/0指令,存取接口上的寄存器,获得外部设备的状态信息,从而实现输入输出
I/O的地址:在8086家族中,I/O端口地址和存储单元的地址是相互独立的,各自占用不同的地址空间,8086提供的I/O端口地址达64K
I/O指令
【1】输入指令:IN
格式:IN 累加器,端口地址
端口地址可以采用直接表示的方式,也可以采用间接表示的方式,当采用直接表示的方式是,端口地址仅仅是8位,采用简洁表示端口地址是,端口地址存放在DX中,可以存放16位
例如MOV DX,2FCH
IN AX,DX
【2】输出指令:OUT
格式:OUT 端口地址,累加器
端口地址可以采用直接表示的方式,也可以采用间接表示的方式,当采用直接表示的方式是,端口地址仅仅是8位,采用简洁表示端口地址是,端口地址存放在DX中,可以存放16位
例如:MOV DX,2FCH
OUT DX,AX
CPU 与外部设备之间进行信息交换,
包括数据,控制盒状态信息,尽管他们的性质不同,但他们都是通过IN和OUT指令在数据总线上进行传递,通常采用分配不同的端口的方法将他们加以区分
数据是CPU和外设真正想要交换的信息,数据通常是8位或者是16位,可以分为不同的类型,不同的外设输出的数据类型也不同
控制信息输出到I/O口,是烤熟设备要做什么工作
从接口输入的状态信息表示I/o设备当前的状态,这也就是我们经常要判 ’忙‘
数据传送的方式
(1)无条件传送方式
这种方式是已经知道外设已经准备好,这种方式软件实现简单,只要在指令中指明端口位置,就可指定外设进行输入输出
无条件传送方式是方便的,但是要就外设工作能够与cpu同步,否则就可能出错
(2)查询方式
查询方式适合CPU与外设不同步的情况,也就是要进行判 “忙”,通常外设速度远远忙于CPU速度,于是查询过程将花费大量时间
(3)中断方式
为了提高CPU的效率,可采用中断方式,当外设准备号,外设向CPU发送中断请求,CPU转入中断处理程序,完成输入与输出工作
(4)直接存储方式
由于高速I/O设备,如磁盘机准备的时间段,要求传送的速度快,所以一般采用字节存储方式,高速设备与内存存储器直接进行数据交换,这种方式传送数据是分组的
其过程是:先把数据在高速外设中存放的起始位置,数据在内存中存放的起始地址,传送数据长度等参数输出到连接高速外设的接口,然后启动外设,设备准备开始直接传送数据,当高速外设字节传送准备好之后,向处理机发送一个直接传送的数据请求,处理机以最短的时间批准进行字节传送,并让出总线控制权,高速设备在控制器下交换数据,数据交换完毕之后,有高速设备发出完成中断请求,并交出总线控制权,处理机响应上述中断,由对应的中断处理程序对告诉设备进行控制或对已经传送的数据进行处理,中断返回后,源程序继续运行
版权所有,转载请注明链接地址:http://www.cnblogs.com/fengdashen/p/3715680.html
原文:http://www.cnblogs.com/fengdashen/p/3715680.html