程序查询和程序中断方式的区别
程序查询和程序中断方式都是cpu和IO设备进行交互的方式:
1、程序查询方式:
程序查询方式是由CPU不断查询I/O设备是否已做好准备,从而控制I/O设备与主机交换信息。
2、程序中断方式:
CPU在启动I/O设备后,不查询设备是否已准备就绪,继续执行原来的程序,只是当I/O设备准备就绪并向CPU发出中断请求后才给予响应。
我们考察下面程序中断的工作方式:

主程序中,首先设定主程序与中断程序进行通信的变量counter初值0。

接下来主程序就进入循环等待的状态,不断查询变量counter的值是否为10,这个查询的过程就是等待中断发生的过程。

上图的new08h就是中断程序的入口地址。这个入口地址什么时候装入cpu得以运行呢?

上图表明,中断程序的入口地址要得以运行,必须由芯片8259向cpu发出中断请求信号,也就是一个高电平信号。

当芯片8259向cpu发出中断请求信号以后,中断入口地址new08h就被装入到cpu的CS和IP寄存器,包括段地址和偏移地址。

这个中断程序每执行一次,变量counter就加1,同时每执行一次就打印出一个字符串。

打印10次以后,counter将变为10,从而使得图1中的主程序的循环等待状态结束,并执行主程序后面的语句。
再看看程序查询方式:
以串口通信为例:

注意上图8251芯片中的引脚TxRDY和RxRDY。

上图是相应的寄存器。

当进行双机通信的时候,
将一方定义为发送方,发送方CPU查询到TxRDY有效时,则CPU向8251A并行输出一个待发送的字节数据;
L1: MOV DX,3F9H
IN AL,DX
AND AL,01H ;查询TxRDY是否有效
JZ L1 ;无效则等待
MOV DX,3F8H
MOV AL,[DI] ;向8251A输出一个字节数据
OUT DX,AL
INC DI ;修改地址指针
LOOP L1 ;未传送完,则继续下一个
上面语句中,每发送一个字节的数据,都必须查询一次引脚TxRDY的状态。如果无效,则循环查询;如有效,则发送数据。但与程序中断方式相比,不存在将中断程序入口地址装入
cpu寄存器的动作。
两者区别简单概括:
1:程序中断方式必须有一个中断程序的入口地址,当中断发生时,这个地址被装入cpu,从而使得相应的中断程序得以运行;
2:程序查询方式没有中断程序,只是不断地查询某个引脚,有效则执行相应的指令,否则循环查询;
3:程序中断方式的程序一般分为主程序和中断程序两部分;
4:两种方式都有一个循环查询的指令部分。