1、程序查询方式
程序查询方式是由CPU通过程序不断查询I/O设备是否已做好准备,从而控制I/O设备与主机交换信息。采用这种方式实现主机和I/O设备交换信息,要求I/O接口内设置一个能反映I/O设备是否准备就绪的状态标记,CPU通过对此标记的检测,可得知I/O设备的准备情况。
下图所示为CPU从某一I/O设备读数据块至主存的查询方式流程。当现行程序需启动某I/O设备工作时时,即将此程序流程插入到运行的程序中。由图中可知,CPU启动I/O设备后便开始对I/O设备的状态进行查询。若查得I/O设备未准备就绪,就继续查询;或查得I/O设备准备就绪,就将数据从I/O接口送至CPU,再由CPU送至主存。这样一个字一个字地传送,直至这个数据块的数据全部传送结束,CPU又重新回到原现行程序。

由这个查询过程可见,只要一启动I/O设备,CPU便不断查询I/O设备的准备情况,从而终止了原程序的执行。CPU在反复查询过程中,犹如原地踏步。另一方面,I/O设备准备就绪后,CPU要一个字一个字地从I/O设备取出,经CPU送至主存,此刻CPU也不能执行原程序,可见这种方式使CPU和I/O设备处于串行工作状态,CPU的工作效率不高。
由以上过程可总结程序查询的基本思想如下:
由CPU执行一段输入输出程序来实现主机与外设之间数据传送,为了保证数据传送的正确进行,就要求CPU在程序中查询外设的工作状态。如果外设尚未准备就绪,CPU就循环等待,只有当外设已作好准备,CPU才能执行I/O指令进行数据传送,这就是程序查询方式。
它的核心问题在于需要不断地查询I/O设备是否准备就绪。
1、查询流程
下图1所示是单个设备的查询流程。

图1:单个设备的查询流程
当I/O设备较多时,CPU需按各个I/O设备在系统中的优先级别进行逐级查询,其流程图如下图2所示。图中设备的优先顺序按1至N降序排列。

图2 多个设备的查询流程
为了正确完成这种查询,通常要执行如下3条指令。
(1)测试指令,用来查询I/O设备是否准备就绪。
(2)传送指令,当I/O设备已准备就绪时,执行传送指令。
(3)转移指令,若I/O设备未准备就绪,执行转移指令,转至测试指令,继续测试I/O设备的状态。
2、程序流程
下图所示为单个I/O设备程序查询方式的程序流程。当需要启动某一I/O设备时,必须将该程序插入到现行程序中。

①预置传送参数。在传送数据之前,由CPU执行一段初始化程序,预置传送参数。传送参数包括存取数据的主存缓冲区首地址和传送数据的个数。
②向外设接口发出命令字。当CPU选中某台外设时,执行输出指令向外设接口发出命令字启动外设,为接收数据或发送数据做应有的操作准备。
③从外设接口取回状态字。CPU执行输入指令,从外设接口中取回状态字并进行测试,判断数据传送是否可以进行。
④查询外设标志。CPU不断查询状态标志。如果外设没有准备就绪,CPU就踏步进行等待,一直到这个外设准备就绪,并发出“外设准备就绪”信号为止。
⑤传送数据。只有外设准备好,才能实现主机与外设间的一次数据传送。输入时,CPU执行输入指令,从外设接口的数据缓冲寄存器中接收数据;输出时,CPU执行输出指令,将数据写入外设接口的数据缓冲寄存器中。
⑥修改传送参数。每进行一次数据传送之后必须要修改传送参数,其中包括主存缓冲区地址加1,传送个数计数器减1。
⑦判断传送是否结束。如果传送个数计数器不为0,则转第③步,继续传送,直到传送个数计数器为0,表示传送结束。
3、程序查询方式的特点
(1)何时对何设备输入/输出操作完全由CPU控制
(2)外设与CPU处于异步工作方式
(3)数据的输入/输出要经过CPU,至少要几条指令
(4)CPU利用率低,但控制简单
当前实际应用中,除了单片机,已很少使用程序查询方式
由程序查询流程和接口的功能和组成,得出程序查询方式接口电路的基本组成如下图所示:

图中设备选择电路用以识别本设备地址,当地址线的设备号与本设备号相符时,SEL有效,可以接收命令;数据缓冲寄存患有和于存放欲传送的数据;D是完成触发器,B是工作触发器。