程序查詢(xún)和程序中斷方式的區(qū)別
程序查詢(xún)和程序中斷方式都是cpu和IO設(shè)備進(jìn)行交互的方式:
1、程序查詢(xún)方式:
程序查詢(xún)方式是由CPU不斷查詢(xún)I/O設(shè)備是否已做好準(zhǔn)備,從而控制I/O設(shè)備與主機(jī)交換信息。
2、程序中斷方式:
CPU在啟動(dòng)I/O設(shè)備后,不查詢(xún)?cè)O(shè)備是否已準(zhǔn)備就緒,繼續(xù)執(zhí)行原來(lái)的程序,只是當(dāng)I/O設(shè)備準(zhǔn)備就緒并向CPU發(fā)出中斷請(qǐng)求后才給予響應(yīng)。
我們考察下面程序中斷的工作方式:

主程序中,首先設(shè)定主程序與中斷程序進(jìn)行通信的變量counter初值0。

接下來(lái)主程序就進(jìn)入循環(huán)等待的狀態(tài),不斷查詢(xún)變量counter的值是否為10,這個(gè)查詢(xún)的過(guò)程就是等待中斷發(fā)生的過(guò)程。

上圖的new08h就是中斷程序的入口地址。這個(gè)入口地址什么時(shí)候裝入cpu得以運(yùn)行呢?

上圖表明,中斷程序的入口地址要得以運(yùn)行,必須由芯片8259向cpu發(fā)出中斷請(qǐng)求信號(hào),也就是一個(gè)高電平信號(hào)。

當(dāng)芯片8259向cpu發(fā)出中斷請(qǐng)求信號(hào)以后,中斷入口地址new08h就被裝入到cpu的CS和IP寄存器,包括段地址和偏移地址。

這個(gè)中斷程序每執(zhí)行一次,變量counter就加1,同時(shí)每執(zhí)行一次就打印出一個(gè)字符串。

打印10次以后,counter將變?yōu)?0,從而使得圖1中的主程序的循環(huán)等待狀態(tài)結(jié)束,并執(zhí)行主程序后面的語(yǔ)句。
再看看程序查詢(xún)方式:
以串口通信為例:

注意上圖8251芯片中的引腳TxRDY和RxRDY。

上圖是相應(yīng)的寄存器。

當(dāng)進(jìn)行雙機(jī)通信的時(shí)候,
將一方定義為發(fā)送方,發(fā)送方CPU查詢(xún)到TxRDY有效時(shí),則CPU向8251A并行輸出一個(gè)待發(fā)送的字節(jié)數(shù)據(jù);
L1: MOV DX,3F9H
IN AL,DX
AND AL,01H ??;查詢(xún)TxRDY是否有效
JZ L1 ;無(wú)效則等待
MOV DX,3F8H
MOV AL,[DI] ;向8251A輸出一個(gè)字節(jié)數(shù)據(jù)
OUT DX,AL
INC DI ??;修改地址指針
LOOP L1 ;未傳送完,則繼續(xù)下一個(gè)
上面語(yǔ)句中,每發(fā)送一個(gè)字節(jié)的數(shù)據(jù),都必須查詢(xún)一次引腳TxRDY的狀態(tài)。如果無(wú)效,則循環(huán)查詢(xún);如有效,則發(fā)送數(shù)據(jù)。但與程序中斷方式相比,不存在將中斷程序入口地址裝入
cpu寄存器的動(dòng)作。
兩者區(qū)別簡(jiǎn)單概括:
1:程序中斷方式必須有一個(gè)中斷程序的入口地址,當(dāng)中斷發(fā)生時(shí),這個(gè)地址被裝入cpu,從而使得相應(yīng)的中斷程序得以運(yùn)行;
2:程序查詢(xún)方式?jīng)]有中斷程序,只是不斷地查詢(xún)某個(gè)引腳,有效則執(zhí)行相應(yīng)的指令,否則循環(huán)查詢(xún);
3:程序中斷方式的程序一般分為主程序和中斷程序兩部分;
4:兩種方式都有一個(gè)循環(huán)查詢(xún)的指令部分。