查询方式是CPU通过程序来实现与外设的数据传送。前面已经叙述查询方式的核心问题是每时每刻都在不断地查询I/O设备是否准备就绪(输入时,数据缓冲寄存器“满”吗?输出时,数据缓冲寄存器“空”吗?)?否,即没有准备就绪,继续查询;是,即准备就绪了,开始传送数据,如图7-3所示。
图7-3 查询方式
查询程序中应该有如下三条指令。
①测试指令。测试指令测试状态寄存器中对应数据缓冲寄存器“满”或对应数据缓冲寄存器“空”的标志位是1还是0。
②转移指令。若I/O设备未准备就绪,则转至测试指令,继续测试I/O设备的状态;若I/O设备准备就绪,则执行传送指令。
③传送指令。I/O设备的输入或输出指令。
例如
IN AL,DATA-PORT
OUT DATA-PORT,AL
完成CPU中的通用寄存器AL和I/O接口中的数据缓冲寄存器DATA-PORT之间的数据传送,参见总线接口。(www.xing528.com)
下面以输入过程为例,给出查询方式的程序流程图,如图7-4所示。
图7-4 查询方式的程序流程图(以输入过程为例)
①由于传送的往往是一批数据,因此需要设置计数器的初值(用来计数已经交换了多少个数据)和欲传送数据在内存缓冲区的首地址。
②CPU启动I/O设备。例如,通过状态寄存器的启动标志位置1来启动I/O设备。
③CPU执行测试指令和转移指令。若数据缓冲寄存器“满”标志位是0,表示数据没有准备好,则继续测试,直到数据缓冲寄存器“满”标志位是1为止。若数据缓冲寄存器“满”标志位是1,表示数据已经准备好,则传送一个数据。
④CPU执行传送指令。CPU把数据缓冲寄存器中的数据输入到CPU中的寄存器,同时把状态寄存器中的数据缓冲寄存器“满”的标志位置0,通知I/O设备准备下一个数据。
⑤修改内存地址和计数器的值。
⑥根据计数器的值,判断是否一批数据传送完毕?若没有完成,转到第三步,继续传送下一个数据;若完成,传送完毕结束。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。