第三節(jié) 8086的中斷方式
一.8086的中斷源
8086可以處理256種中斷,用中斷類型碼來區(qū)分每一種中斷。這些中斷源可以是硬件,也可以是軟件;有的來自CPU內(nèi)部,有的來自外圍芯片。

二、 中斷矢量表
8086的256種中斷的中斷處理程序的入口地址(起始地址),用表格方式來管理,稱為“中斷矢量表”。
每個中斷處理程序的入口地址占4字節(jié)(段地址:偏移量),256個中斷處理程序的入口地址占1024字節(jié)(1KB),它們存放在存儲器地址的最頂部:00000H~003FFH。

三、 硬件中斷
CPU的硬件中斷請求線有兩條:INTR(可屏蔽中斷請求)和NMI(非屏蔽中斷請求)。
1.可屏蔽中斷請求
INTR請求的特點(diǎn)是:
?、?INTR請求信號是電平觸發(fā)有效的,且必須保持到CPU響應(yīng)該請求。
?、?僅當(dāng)CPU標(biāo)志IF=1時,CPU才響應(yīng)INTR請求,否則,CPU不響應(yīng)。即IF標(biāo)志可以屏蔽INTR請求,因此INTR稱為“可屏蔽中斷請求”。(STI指令使IF=1,CLI指令使IF=0)。
微機(jī)中的多個硬件中斷請求,一般通過"中斷控制器Intel 8259A"管理它們的優(yōu)先權(quán),外設(shè)接口電路的中斷請求信號經(jīng)總線送至8259的IR輸入端,8259把優(yōu)先權(quán)最高的請求送到CPU的INTR引腳。
在IBM PC/AT(80286)及以上微機(jī)中,使用兩片8259級聯(lián),可以管理15個中斷請求(稱為15級中斷請求),其連接情況為:

圖中,IRQ為ISA總線信號名(其中IRQ0、IRQ1、IRQ8、IRQ9、IRQ13不出現(xiàn)在ISA總線上,習(xí)慣上仍以IRQ表示)。
CPU響應(yīng)INTR請求時,執(zhí)行兩個連續(xù)的中斷響應(yīng)周期,每一個中斷響應(yīng)周期發(fā)出INTA負(fù)脈沖信號,第一個INTA負(fù)脈沖通知8259準(zhǔn)備中斷類型碼,8259收到第二個INTA負(fù)脈沖時送出中斷類型碼。
8259中的中斷類型碼可以用程序設(shè)置,缺省類型碼如上圖所示。
中斷類型標(biāo)識請求中斷的設(shè)備,同時,CPU根據(jù)類型碼到中斷矢量表中查得中斷處理程序的入口地址。
8086中斷響應(yīng)時序畫如下圖:

2.非屏蔽中斷NMI
非屏蔽中斷的特點(diǎn)是:
?、?NMI上的正跳變信號為有效的請求信號。
?、?當(dāng)NMI上出現(xiàn)請求時,無論CPU標(biāo)志IF等于什么值,CPU均立即響應(yīng)該請求。即IF不能屏蔽NMI請求,因此NMI請求稱為非屏蔽中斷請求。
?、?CPU響應(yīng)NMI請求時,不發(fā)出 信號。NMI請求的類型碼固定為2。
四.軟件中斷
軟件中斷是軟件執(zhí)行過程產(chǎn)生的,因此不可屏蔽。
1、 除法錯中斷:執(zhí)行除法時,若商超出范圍,則產(chǎn)生該中斷,其類型碼為0。
2、 單步中斷:若TF=1,則產(chǎn)生該中斷,其類型碼為1。
3、 溢出中斷:當(dāng)OF=1時若執(zhí)行INTO指令,則產(chǎn)生該中斷,其類型碼為4。當(dāng)OF=0時執(zhí)行INTO指令,INTO指令不起作用。
4、 中斷指令 "INT n"。
五.8086的中斷響應(yīng)和處理過程
8086CPU在執(zhí)行完一條指令時(指令的最后一個T狀態(tài)),內(nèi)部硬件自動檢測有無中斷請求,其檢測的順序是:
軟件中斷(不含單步中斷)->NMI中斷->INTR中斷->單步中斷
當(dāng)有INTR中斷時,CPU執(zhí)行兩個連續(xù)的中斷響應(yīng)周期,獲得中斷類型碼。對于軟件中斷、NMI中斷,不執(zhí)行中斷響應(yīng)周期,直接獲得中斷類型碼。
CPU獲得中斷類型碼后的中斷處理過程為:
(1) 將類型碼乘以4,作為中斷矢量表的指針。
(2) 將標(biāo)志寄存器(PSW)入棧。
(3) TF標(biāo)志暫存到TEMP,接著使TF=0,使IF=0。
(4) 主程序斷點(diǎn)處的CS和IP入棧,保存返回地址。
(5) 從中斷矢量表取出中斷處理程序的入口地址,送CS和IP。
(6) 執(zhí)行中斷處理程序。
(7) 執(zhí)行中斷處理程序中的IRET指令時返回中斷。

