中斷及中斷控制器課件_第1頁
中斷及中斷控制器課件_第2頁
中斷及中斷控制器課件_第3頁
中斷及中斷控制器課件_第4頁
中斷及中斷控制器課件_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

6.2中斷及中斷控制器82596.2.1中斷的基本概念(1)什么是中斷

在日常生活中,中斷現(xiàn)象俯拾皆是……在計算機系統(tǒng)中,一個CPU要處理若干事務:數(shù)據(jù)采集,運算,顯示,處理突發(fā)事件,通信,打印…….。這就要求采用中斷技術,才能作到面面俱到而又不誤突發(fā)事件的處理時機。計算機用于測控領域,必然涉及中斷。在計算機中,中斷的含義很狹窄:從程序執(zhí)行的角度看:CPU正在執(zhí)行的當前程序被外設打斷,轉而執(zhí)行為外設服務的所謂“中斷服務程序”(ISR:InterruptServiceRoutine)。

當前程序外設n的中斷服務程序CPUINTR中斷請求觸發(fā)器

外設n當前程序:CALLSUBR:子程序*外設隨機誘發(fā)中斷,轉入中斷服務程序*硬、軟件配合尋找入口地址*由CALL指令引起轉入子程序*預知何時轉入子程序*入口地址直接從CALL中取得SUBR

從數(shù)據(jù)傳送的角度看,是主機與外設交換信息的一種方式。6.2中斷及中斷控制器82596.2.1中斷的基本概念(2)中斷源與中斷向量表中斷源:能夠引發(fā)CPU中斷的信息源,稱為中斷源。80X86微機系統(tǒng)中最多允許有256種中斷源,其中中斷源類型編號為0~255。*中斷系統(tǒng):為了實現(xiàn)中斷而配置的硬件和軟件構成的系統(tǒng)1)內中斷(軟中斷)指CPU執(zhí)行某些特殊操作或由INT指令引起的中斷,通常分為以下三類:①執(zhí)行INTn指令引起的中斷,n=00~FFH②CPU中斷在執(zhí)行指令的過程中出現(xiàn)某些需要處理的異常而產(chǎn)生的中斷。③使用調試程序中的單步或斷點設置操作引起的中斷.①INTn指令(n=0~255)如INT21H執(zhí)行該指令后,轉入系統(tǒng)的“21H型中斷服務程序”,執(zhí)行由AH指定的子程序

21H型中斷服務程序根據(jù)AH內容進入某一子程序AH=01

AH=02

AH=09

AH=0AAH=4C01H功能02H功能09H功能0AH功能4CH功能:::(2)中斷源與中斷向量表1)內中斷(軟中斷)①INTn②CPU中斷

此類中斷使用了0、1、3、4、6、7中斷號*1除法錯中斷(屬于CPU的0型中斷)除數(shù)為0或商超過有關寄存器所能表示的最大值,產(chǎn)生除法錯中斷*2INTO指令溢出中斷指令(屬于CPU的4型中斷)例:ADDAL,BL

INTO;當OF=0,不引起INTO操作;當OF=1時,引起溢出中斷*BOUND指令(數(shù)組邊界檢查指令)中斷檢查帶符號的數(shù)組下標是在由包含上界和下界的存儲器塊所限定的范圍內。下標超出范圍就產(chǎn)生中斷。

③單步調試中斷

當標志寄存器中的自陷位TF=1且中斷允許標志位IF=1時,CPU處于單步工作方式。在TD環(huán)境下,F(xiàn)7,F(xiàn)8鍵作為設定功能鍵,在這兩個鍵的處理程序中,使TF=1,IF=1。在TD環(huán)境中,可以在程序中需要的位置處插入INT3指令,執(zhí)行到該指令處,CPU中斷正常執(zhí)行過程,便于調試程序。在用戶程序中執(zhí)行INT3無意義。

②CPU中斷③單步調試中斷(2)外中斷(重點)由外設向CPU發(fā)出中斷請求。1)非屏蔽中斷NMI(Non-MaskableInterrupt)不受CPU內部中斷允許標志IF的屏蔽2)可屏蔽中斷INTR(maskableINTRrupt)

受CPU內部中斷允許標志IF的屏蔽

STI指令,使IF=1,CPU可以接受來自INTR引腳上的中斷請求。術語:開中斷/中斷允許/允中CLI指令,

使IF=0,CPU不接受來自INTR引腳上的中斷請求。術語:關中斷/中斷禁止

CPU

NMI

INTR當NMI上有正跳變信號時,即產(chǎn)生一個內部引導的類型2中斷。NMI引腳上的中斷請求不受IF標志的控制,IF不能屏蔽NMI引腳上的中斷請求。IF=1,CPU響應INTR引腳上的中斷請求;IF=0,CPU不響應INTR引腳上的中斷請求通過INTR引腳傳遞到CPU的可屏蔽中斷,中斷類型號可以為6~255*中斷系統(tǒng):為了實現(xiàn)中斷而配置的硬件和軟件構成的系統(tǒng)

(2)外中斷(重點)CPU當NMI上有正跳變信號時,即(3)中斷向量表(P166)(注意內容的展開)1)中斷源的識別中斷技術的核心問題——尋找中斷服務程序的入口地址*識別中斷源和尋找入口地址的復雜性在INTR引腳上可以連接250(6~255)個中斷源。CPUINTR08號中斷源09號中斷源0A號中斷源FF號中斷源08號中斷服務程序09號中斷服務程序0A號中斷服務程序FF號中斷服務程序ADDR00ADDR01ADDR02:ADDR08:ADDRFF中斷向量表中斷控制器中斷向量表是中斷源與中斷服務程序之間的“紐帶”。ADDR08ADDR09ADDR02ADDRFF::(3)中斷向量表(P166)(注意內容的展開)1)中斷源的任何一個中斷源發(fā)出中斷請求,CPU必須能夠迅速、準確地找到為該中斷源服務的中斷服務程序的入口地址,怎么找?

從應用角度看,很多中間過程并不需要用戶通過編程來完成,因而可以大大簡化中斷索引過程的敘述。這里,分四步(#1、#2、#3、#4)來敘述識別中斷源和尋找入口地址的問題。#1

識別中斷源及尋找入口地址概要從編程角度看,為了識別中斷源及尋找入口地址,外設與CPU必須進行如圖所示的交流。CPU向外設索取的中斷向量號,實際上就是索取中斷源的“身份證號”——標識符。CPU取得它,也就識別了中斷源。當CPU取得中斷向量號以后,又如何取得相應中斷源的中斷服務程序的入口地址呢?必須借助于中斷向量表。

*識別中斷源及尋找入口地址概要示意任何一個中斷源發(fā)出中斷請求,CPU必須能夠迅INTRCPU

中斷源N*1請求中斷當前程序,執(zhí)行N的中斷服務程序*2接受中斷請求。但不知道入口地址,請送標識碼(中斷向量號)!*3標識碼是N,請按規(guī)則,在中斷向量表中獲取N的中斷服務程序的入口地址。什么是“中斷向量表”,如何根據(jù)標識碼從中查找入口地址?#2中斷向量表

①中斷類型號:即中斷源標識碼或中斷向量號。80X86給每一個中斷源分配了一個序號,從00—FFH,共256個。

在80X86中是通過中斷類型號來識別中斷源的。INTR*1請求中斷當前程序,*2接受中斷請求。但不知道入口②中斷向量:中斷服務程序的入口地址

③中斷向量表:*80X86在內存0段0000H—03FFH這1K字節(jié)中建立了一個中斷向量表,用以存放256個中斷向量。*各中斷源的中斷服務程序入口地址在內存中斷向量表中有固定的存放位置——以中斷類型號X4開始的連續(xù)四個字節(jié)單元中,前兩個字節(jié)存放中斷服務程序的入口地址的偏移量,后兩個字節(jié)存放中斷服務程序的入口地址的段基址。對于0號中斷而言,設其中斷服務程序的入口地址是:

UUVV:XXYY(其物理地址是UUVV0+0XXYY),則有: 0000:0000YY 0000:0001XX 0000:0002VV 0000:0003UU對于0aH號中斷而言,設其中斷服務程序的入口地址是:0100:0051(其物理地址是

01000+0051),則有:

0ax4=0028H中斷向量0000:0028510000:0029000000:002A000000:002B01中斷向量地址②中斷向量:中斷服務程序的入口地址③中斷向量表:*80X8④中斷向量地址:存放中斷向量(入口地址)的存儲單元的地址,即N×4、N×4+1、N×4+2、N×4+3

#3如何根據(jù)中斷類型號在中斷向量表中尋找入口地址?

CPU在響應中斷時,根據(jù)中斷類型號,從中斷向量表中取出高兩個字節(jié)(入口地址的段基址)裝入代碼段寄存器CS;低兩個字節(jié)(入口地址的偏移量)裝入指令指針寄存器IP中,轉入中斷服務程序。

中斷響應時,CPU將有以下操作:把F寄存器、IP寄存器和CS寄存器的內容壓入堆棧;把0:N×4和0:N×4+1的內容送入IP;把0:N×4+2和0:N×4+3的內容送入CS;跳到CS:IP去執(zhí)行中斷服務程序。設某中斷源的中斷類型號為0aH,執(zhí)行中斷時,CPU根據(jù)0aH,得到28H,從0028H,0029H,002AH和002BH這四個單元中取得

0100:0051

并把前兩個字節(jié)0051H送入IP,后兩個字節(jié)0100H送入CS。物理地址為01000H+00051H=01051H,即中斷服務程序的人口地址。

誰提供中斷類型號?當中斷是由指令INTn產(chǎn)生時,

指令直接提供中斷向量;

④中斷向量地址:存放中斷向量(入口地址)的存儲單元的地址,#當中斷是由外設產(chǎn)生時,應由該外設向CPU提供中斷向量YYXXVVUU

51000001CPU響應中斷,則把中斷服務程序入口地址送入IP和CS0000:0000H

IP

IP

CSCS

IP

CS中斷號N

N×4內存地址中斷向量表

00H

00H

0000:0004H

01H

04H

0AH

28H

0000:0028H

0000:0029H

0000:002AH

0000:002BH

N

N×4

FFH

03FCH

0000:03FCH

0000:03FFH

CPU根據(jù)中斷源提供的標識碼(即:中斷類型號,中斷向量號)即可在中斷向量表中找到該中斷源的中斷服務程序入口地址。

在硬中斷中,向CPU提供中斷源識別碼是中斷技術的關鍵。需要硬軟件的有機配合。8259A可編程中斷控制器用于管理中斷,向CPU提供標識碼(中斷向量號、中斷類型號)當中斷是由外設產(chǎn)生時,應由該外設向CPU提供中斷向量YYCP路線圖:中斷源提供類型號N—得到中斷向量地址4×N、4×N+1、4×N+2、4×N+3—在中斷向量表中取這4個單元的內容送CS和IP——進入中斷服務程序。例:設某外設的識別碼為0aH,其中斷服務程序的入口地址為:0100:0051HCPU0ax4=0028HINTR

IACK0aH外設0aH外設中斷服務程序51000001中斷向量表DB用戶編程填寫用戶編寫

中斷發(fā)生之前,用戶先要完成的兩項工作問題:在多個中斷源的情況下,如何把優(yōu)先級最高的中斷源的識別碼送給CPU?怎么送?0000:00280000:00290000:002A0000:002B②①③0a④⑤0100:0051路線圖:例:設某外設的識別碼為0aH,CPU0aH0aH形象地給出了與中斷操作有關的主要過程。設中斷類型號為0aH,其中斷服務程序的入口地址已經(jīng)填入到中斷向量表中正確的位置。中斷主要過程:①0aH號中斷源:情況緊急,請求CPU執(zhí)行0aH號中斷服務程序。②CPU:現(xiàn)在正好沒有比你更緊迫的事件要處理,可以接受你的請求,但苦于不知道你是誰,請送你的“身份證號”——中斷類型號。③0aH號中斷源:我是0aH號中斷源。④CPU嚴格按“游戲規(guī)則”,根據(jù)0aH,得到28H,從0028H,0029H,002AH和002BH這四個單元中取得0100:0051并把低兩個字節(jié)0051H送入IP,高兩個字節(jié)0100H送入CS。絕對地址為01000H+00051H=01051H,即中斷服務程序的人口地址。⑤CPU執(zhí)行0aH號中斷服務程序。

#4中斷向量的填入誰來填寫中斷向量表中各項的內容?開機后,BIOS立即把有關的中斷向量填入中斷向量表中(包括0—7FH一段),當BIOS引導DOS到內存后,DOS進行初始化時,又把某些中斷向量填入中斷向量表,還要修改由BIOS裝入的某些中斷向量。用戶的中斷服務程序的入口地址應當由用戶自己填寫,中斷向量表的設置當CPU響應中斷時,將從中斷向量表中讀取中斷向量送給CS和IP,轉去執(zhí)行中斷服務程序。因此,用戶必須事先將中斷服務程序的入口地址填入系統(tǒng)的中斷向量表中,填入的方法有兩種。

形象地給出了與中斷操作有關的主要過程。設中斷類型假設中斷類型號為32H,斷服務程序入口處的標號為INTSUB。①用程序設置中斷向量表、、、CLI;關中斷MOV AX,0;0段MOV ES,AXMOV DI,4*32H;0段內偏移地址LEA AX,INTSUB;取入口地址的偏移地址CLD;增址STOSW;把入口地址的偏移地址存入;0000:4*32字單元MOV AX,SEGINTSUB;取入口地址的段基址STOSW;把入口地址的段基址存入;0000:4*32+2字單元、、、DI+24×32+2DI4×32+0用CLD(ClearDF)設置DF=0,增址修改AL偏移AH地址AL段基AH址用STOSW指令完成填寫中斷向量中斷向量表

ES0段

假設中斷類型號為32H,斷服務程序入口處的標號為INTSUBP167或:

、、、MOV AX,0;0段MOV DS,AXMOV BX,4*32H;0段內偏移地址MOV AX,OFFSETINTSUB;取入口地址的偏移地址MOV[BX],AX;把入口地址的偏移地址存入;0000:4*32字單元MOV AX,SEGINTSUB;取入口地址的段基址MOV[BX+2],AX;把入口地址的段基址存入;0000:4*32+2字單元DI+24×32+2DI4×32+0AL偏移AH地址AL段基AH址中斷向量表

DS0段

用DOS功能設置中斷向量表(07/10/31007)*中斷向量的置換在中斷向量表中,系統(tǒng)占有若干單元存放系統(tǒng)自己的中斷服務程序的入口地址(中斷向量),微機在初始化過程中,把這些中斷向量填寫到中斷向量表中。例如:系統(tǒng)輔串口占用中斷向量號0BH,系統(tǒng)初始化時,已經(jīng)在0B×4~0B×4+3(002CH~002FH)這4個單元中填寫了中斷向量;如果用戶也想占用0BH,也必須把用戶的中斷向量寫入這4個單元。為了不破壞系統(tǒng)設置的中斷向量,需要進行中斷置換:P167或:、、、DI+24×32+2DIIPLIPHCSLCSH用戶中斷服務程序CS:IP原中斷向量

堆棧

CS:IP1

2

30000:002CH0000:002DH0000:002EH0000:002FH*借用DOS35H號功能,讀出原中斷向量;

*借用DOS25H號功能,把用戶中斷向量寫入中斷向量表把原中斷向量填回中斷向量表1)35H號功能:入口:AL:中斷向量號

出口:ES存放中斷向量的段基址;BX存放偏移地址2)25H號功能

入口:AL:中斷向量號;DS:中斷向量的段基址;DX:偏移地址例:設某外設的中斷服務程序的入口地址為INTP,中斷類型號為0BH。用戶中斷CS:IP原中斷向量堆棧CS:IP1230如果把0BH改變0AH,程序中相關部分應當怎么處理?(3)中斷描述符表在DOS環(huán)境下,486工作在實模式時,中斷服務程序的屬性比較單一,僅用中斷向量表明它的位置就可以了。:MOVAX,350BH;AH=35H,AL=0BHINT21H;從向量表中讀出原中斷向量

;存人ES:BPUSHES;把原中斷向量壓入堆棧PUSHBX

MOVAX,SEGINTP;取用戶中斷向量段基址MOVDS,AX;25H功能要求基地址送入DSMOVDX,OFFSETINTP;用戶中斷向量偏移地址MOVAX,250BH;AH=25H,AL=0BHINT21H;把用戶中斷服務程序入口地址:;填入中斷向量表POPDX;取原中斷向量POPDSMOVAX,250BHINT21H;把原中斷向量填回中斷向量表如果把0BH改變0AH,程序中相關部分應當怎么處理?(3)中在多任務操作系統(tǒng)(如:UNIX,WINDOWS)管理下,486工作在保護模式的時候,情況要復雜得多,僅僅用中斷向量已經(jīng)不能全面描述中斷服務程序的全部屬性了,而必須:用中斷描述符來描述中斷服務程序;用中斷描述符表來代替中斷向量表。

暫時了解到此(4)中斷優(yōu)先級與中斷嵌套CPU在執(zhí)行中斷服務程序的過程中,被高優(yōu)先級的中斷源中斷,又轉入另一個中斷服務程序的操作,叫中斷嵌套。P170圖6.12

嵌套原則:高級可以中斷低級,低級不能中斷高級或同級。P170表6.1給出了在80486中,各大類中斷源的優(yōu)先級。(5)CPU響應中斷的條件并非一產(chǎn)生中斷請求,CPU就響應中斷。CPU響應中斷是有一定條件的,其中以可屏蔽中斷的條件最多,以此為例,講解CPU響應可屏蔽中斷的條件

①中斷源發(fā)出中斷請求信號

②中斷請求信號不被屏蔽(請求能夠被傳遞到INTR引腳),在I/O口這一級增加一道關口,增加控制的靈活性。

③CPU愿意接受中斷(CPU開中斷,允許中斷)

④沒有更高優(yōu)先級的中斷

⑤執(zhí)行完當前指令

在多任務操作系統(tǒng)(如:UNIX,WINDOWS)管理下,48通過一張簡圖,解釋以上幾點的含義。CPU④⑤

③INTR與門中斷屏蔽(允許)觸發(fā)器控制端口中斷請求觸發(fā)器外設請求信號是否被屏蔽中斷是否打開保存請求信號直到被響應為止①②有了以上基礎,再看P164圖6.8。通過一張簡圖,解釋以上幾點的含義。CPU與門中斷屏*主干:外設數(shù)據(jù)—數(shù)據(jù)端口—DB—CPU*為配合中斷操作,增加若干環(huán)節(jié)。中斷允許觸發(fā)器受控于CPU,CPU對控制信號端口發(fā)出控制信號,可以把允許觸發(fā)器置1(打開與門,請求信號能夠被傳送到INTR)或置0(屏蔽請求信號)。

輸入裝置鎖存器數(shù)據(jù)D&&三態(tài)緩沖器RQM/IOW/RM/IOW/R+5VPdPs地址譯碼數(shù)據(jù)口地址總線(A7-A0)控制口CPU數(shù)據(jù)總線選通信號&DQ數(shù)據(jù)線D0位INTR中斷請求觸發(fā)器I/O環(huán)節(jié)的中斷允許觸發(fā)器*主干:外設數(shù)據(jù)—數(shù)據(jù)端口—DB—CPU輸入裝置鎖存器數(shù)(6)中斷處理過程內中斷處理過程①CPU自動產(chǎn)生中斷類型號n;②(SP)-2→(SP),標志寄存器F內容入棧;③(SP)-2→(SP),當前代碼段CS內容入棧;④(SP)-2→(SP),當前指令計數(shù)器IP內容入棧;⑤禁止外部中斷IF=0,禁止單步中斷TF=0;⑥從中斷向量表中取中斷服務程序入口地址(4*N單元的字內容送IP,4*N+2單元里的內容送CS);⑦轉中斷服務程序;⑧執(zhí)行中斷服務程序并返回,彈出IP,CS,F(xiàn),返回斷點。外中斷(INTR)執(zhí)行過程①CPU發(fā)出兩個中斷響應信號INTA,第二個INTA時,CPU從當前數(shù)據(jù)總線上取中斷類型碼N(通常由管理INTR的控制器8259A提供);②(SP)-2→(SP),標志寄存器F內容入棧;③(SP)-2→(SP),當前代碼段CS內容入棧;④(SP)-2→(SP),當前指令計數(shù)器IP內容入棧;⑤禁止外部中斷IF=0,禁止單步中斷TF=0;⑥首先從中斷向量表中取4*N單元的字內容送IP,然后再取4*N+2單元里的內容送CS;⑦轉中斷服務程序;⑧執(zhí)行中斷服務程序并返回,彈出IP,CS,F(xiàn),返回斷點,繼續(xù)執(zhí)行。(6)中斷處理過程(7)多中斷源的中斷識別與優(yōu)先級管理

1)中斷優(yōu)先級編碼電路CPU未響應任何中斷,優(yōu)先級無效,此處為“1”;否則為“0”新中斷源的優(yōu)先級別高于CPU正在響應的中斷源,此處為“1”存放CPU正在響應的中斷源的中斷優(yōu)先級編碼多個中斷源同時發(fā)出中斷請求時,只輸出級別最高的中斷源的優(yōu)先級編碼。任何一個中斷請求,均可通過‘或’門送到CPUCPU未響應任何中斷時,中斷請求信號通過與2傳遞給CPU;CPU正在為某一中斷源服務時,由比較器決定是否通過與1把新中斷請求傳遞給CPU。新中斷源CPU正在響應的優(yōu)先級編碼中斷源的編碼

A2A1A0

B2B1B0

111

111

110

110::000

000A>B,表明“新”級別高于“正”(7)多中斷源的中斷識別與優(yōu)先級管理1)中斷優(yōu)先級編碼電路2)菊花鏈排隊電路

IACKInterruptACKnowledge,中斷應答(中斷響應)。該信號啟動鎖存器,把中斷源狀態(tài)送入CPU,作為查詢依據(jù)。*每一個中斷源配有一個中斷向量發(fā)生器,當IACK信號送達某中斷源時,如果該中斷源沒有發(fā)出中斷請求信號,則把IACK信號傳遞到后面。

如果該中斷源發(fā)出了中斷請求信號,則在IACK信號作用下,該中斷源通過中斷向量發(fā)生器把自己的識別碼(中斷向量號)回送CPU。CPU根據(jù)識別碼,在中斷向量表中,找到相應的中斷服務程序的入口地址。

2)菊花鏈排隊電路IACKInterru6.2中斷及中斷控制器82596.2.1中斷的基本概念(1)什么是中斷

在日常生活中,中斷現(xiàn)象俯拾皆是……在計算機系統(tǒng)中,一個CPU要處理若干事務:數(shù)據(jù)采集,運算,顯示,處理突發(fā)事件,通信,打印…….。這就要求采用中斷技術,才能作到面面俱到而又不誤突發(fā)事件的處理時機。計算機用于測控領域,必然涉及中斷。在計算機中,中斷的含義很狹窄:從程序執(zhí)行的角度看:CPU正在執(zhí)行的當前程序被外設打斷,轉而執(zhí)行為外設服務的所謂“中斷服務程序”(ISR:InterruptServiceRoutine)。

當前程序外設n的中斷服務程序CPUINTR中斷請求觸發(fā)器

外設n當前程序:CALLSUBR:子程序*外設隨機誘發(fā)中斷,轉入中斷服務程序*硬、軟件配合尋找入口地址*由CALL指令引起轉入子程序*預知何時轉入子程序*入口地址直接從CALL中取得SUBR

從數(shù)據(jù)傳送的角度看,是主機與外設交換信息的一種方式。6.2中斷及中斷控制器82596.2.1中斷的基本概念(2)中斷源與中斷向量表中斷源:能夠引發(fā)CPU中斷的信息源,稱為中斷源。80X86微機系統(tǒng)中最多允許有256種中斷源,其中中斷源類型編號為0~255。*中斷系統(tǒng):為了實現(xiàn)中斷而配置的硬件和軟件構成的系統(tǒng)1)內中斷(軟中斷)指CPU執(zhí)行某些特殊操作或由INT指令引起的中斷,通常分為以下三類:①執(zhí)行INTn指令引起的中斷,n=00~FFH②CPU中斷在執(zhí)行指令的過程中出現(xiàn)某些需要處理的異常而產(chǎn)生的中斷。③使用調試程序中的單步或斷點設置操作引起的中斷.①INTn指令(n=0~255)如INT21H執(zhí)行該指令后,轉入系統(tǒng)的“21H型中斷服務程序”,執(zhí)行由AH指定的子程序

21H型中斷服務程序根據(jù)AH內容進入某一子程序AH=01

AH=02

AH=09

AH=0AAH=4C01H功能02H功能09H功能0AH功能4CH功能:::(2)中斷源與中斷向量表1)內中斷(軟中斷)①INTn②CPU中斷

此類中斷使用了0、1、3、4、6、7中斷號*1除法錯中斷(屬于CPU的0型中斷)除數(shù)為0或商超過有關寄存器所能表示的最大值,產(chǎn)生除法錯中斷*2INTO指令溢出中斷指令(屬于CPU的4型中斷)例:ADDAL,BL

INTO;當OF=0,不引起INTO操作;當OF=1時,引起溢出中斷*BOUND指令(數(shù)組邊界檢查指令)中斷檢查帶符號的數(shù)組下標是在由包含上界和下界的存儲器塊所限定的范圍內。下標超出范圍就產(chǎn)生中斷。

③單步調試中斷

當標志寄存器中的自陷位TF=1且中斷允許標志位IF=1時,CPU處于單步工作方式。在TD環(huán)境下,F(xiàn)7,F(xiàn)8鍵作為設定功能鍵,在這兩個鍵的處理程序中,使TF=1,IF=1。在TD環(huán)境中,可以在程序中需要的位置處插入INT3指令,執(zhí)行到該指令處,CPU中斷正常執(zhí)行過程,便于調試程序。在用戶程序中執(zhí)行INT3無意義。

②CPU中斷③單步調試中斷(2)外中斷(重點)由外設向CPU發(fā)出中斷請求。1)非屏蔽中斷NMI(Non-MaskableInterrupt)不受CPU內部中斷允許標志IF的屏蔽2)可屏蔽中斷INTR(maskableINTRrupt)

受CPU內部中斷允許標志IF的屏蔽

STI指令,使IF=1,CPU可以接受來自INTR引腳上的中斷請求。術語:開中斷/中斷允許/允中CLI指令,

使IF=0,CPU不接受來自INTR引腳上的中斷請求。術語:關中斷/中斷禁止

CPU

NMI

INTR當NMI上有正跳變信號時,即產(chǎn)生一個內部引導的類型2中斷。NMI引腳上的中斷請求不受IF標志的控制,IF不能屏蔽NMI引腳上的中斷請求。IF=1,CPU響應INTR引腳上的中斷請求;IF=0,CPU不響應INTR引腳上的中斷請求通過INTR引腳傳遞到CPU的可屏蔽中斷,中斷類型號可以為6~255*中斷系統(tǒng):為了實現(xiàn)中斷而配置的硬件和軟件構成的系統(tǒng)

(2)外中斷(重點)CPU當NMI上有正跳變信號時,即(3)中斷向量表(P166)(注意內容的展開)1)中斷源的識別中斷技術的核心問題——尋找中斷服務程序的入口地址*識別中斷源和尋找入口地址的復雜性在INTR引腳上可以連接250(6~255)個中斷源。CPUINTR08號中斷源09號中斷源0A號中斷源FF號中斷源08號中斷服務程序09號中斷服務程序0A號中斷服務程序FF號中斷服務程序ADDR00ADDR01ADDR02:ADDR08:ADDRFF中斷向量表中斷控制器中斷向量表是中斷源與中斷服務程序之間的“紐帶”。ADDR08ADDR09ADDR02ADDRFF::(3)中斷向量表(P166)(注意內容的展開)1)中斷源的任何一個中斷源發(fā)出中斷請求,CPU必須能夠迅速、準確地找到為該中斷源服務的中斷服務程序的入口地址,怎么找?

從應用角度看,很多中間過程并不需要用戶通過編程來完成,因而可以大大簡化中斷索引過程的敘述。這里,分四步(#1、#2、#3、#4)來敘述識別中斷源和尋找入口地址的問題。#1

識別中斷源及尋找入口地址概要從編程角度看,為了識別中斷源及尋找入口地址,外設與CPU必須進行如圖所示的交流。CPU向外設索取的中斷向量號,實際上就是索取中斷源的“身份證號”——標識符。CPU取得它,也就識別了中斷源。當CPU取得中斷向量號以后,又如何取得相應中斷源的中斷服務程序的入口地址呢?必須借助于中斷向量表。

*識別中斷源及尋找入口地址概要示意任何一個中斷源發(fā)出中斷請求,CPU必須能夠迅INTRCPU

中斷源N*1請求中斷當前程序,執(zhí)行N的中斷服務程序*2接受中斷請求。但不知道入口地址,請送標識碼(中斷向量號)!*3標識碼是N,請按規(guī)則,在中斷向量表中獲取N的中斷服務程序的入口地址。什么是“中斷向量表”,如何根據(jù)標識碼從中查找入口地址?#2中斷向量表

①中斷類型號:即中斷源標識碼或中斷向量號。80X86給每一個中斷源分配了一個序號,從00—FFH,共256個。

在80X86中是通過中斷類型號來識別中斷源的。INTR*1請求中斷當前程序,*2接受中斷請求。但不知道入口②中斷向量:中斷服務程序的入口地址

③中斷向量表:*80X86在內存0段0000H—03FFH這1K字節(jié)中建立了一個中斷向量表,用以存放256個中斷向量。*各中斷源的中斷服務程序入口地址在內存中斷向量表中有固定的存放位置——以中斷類型號X4開始的連續(xù)四個字節(jié)單元中,前兩個字節(jié)存放中斷服務程序的入口地址的偏移量,后兩個字節(jié)存放中斷服務程序的入口地址的段基址。對于0號中斷而言,設其中斷服務程序的入口地址是:

UUVV:XXYY(其物理地址是UUVV0+0XXYY),則有: 0000:0000YY 0000:0001XX 0000:0002VV 0000:0003UU對于0aH號中斷而言,設其中斷服務程序的入口地址是:0100:0051(其物理地址是

01000+0051),則有:

0ax4=0028H中斷向量0000:0028510000:0029000000:002A000000:002B01中斷向量地址②中斷向量:中斷服務程序的入口地址③中斷向量表:*80X8④中斷向量地址:存放中斷向量(入口地址)的存儲單元的地址,即N×4、N×4+1、N×4+2、N×4+3

#3如何根據(jù)中斷類型號在中斷向量表中尋找入口地址?

CPU在響應中斷時,根據(jù)中斷類型號,從中斷向量表中取出高兩個字節(jié)(入口地址的段基址)裝入代碼段寄存器CS;低兩個字節(jié)(入口地址的偏移量)裝入指令指針寄存器IP中,轉入中斷服務程序。

中斷響應時,CPU將有以下操作:把F寄存器、IP寄存器和CS寄存器的內容壓入堆棧;把0:N×4和0:N×4+1的內容送入IP;把0:N×4+2和0:N×4+3的內容送入CS;跳到CS:IP去執(zhí)行中斷服務程序。設某中斷源的中斷類型號為0aH,執(zhí)行中斷時,CPU根據(jù)0aH,得到28H,從0028H,0029H,002AH和002BH這四個單元中取得

0100:0051

并把前兩個字節(jié)0051H送入IP,后兩個字節(jié)0100H送入CS。物理地址為01000H+00051H=01051H,即中斷服務程序的人口地址。

誰提供中斷類型號?當中斷是由指令INTn產(chǎn)生時,

指令直接提供中斷向量;

④中斷向量地址:存放中斷向量(入口地址)的存儲單元的地址,#當中斷是由外設產(chǎn)生時,應由該外設向CPU提供中斷向量YYXXVVUU

51000001CPU響應中斷,則把中斷服務程序入口地址送入IP和CS0000:0000H

IP

IP

CSCS

IP

CS中斷號N

N×4內存地址中斷向量表

00H

00H

0000:0004H

01H

04H

0AH

28H

0000:0028H

0000:0029H

0000:002AH

0000:002BH

N

N×4

FFH

03FCH

0000:03FCH

0000:03FFH

CPU根據(jù)中斷源提供的標識碼(即:中斷類型號,中斷向量號)即可在中斷向量表中找到該中斷源的中斷服務程序入口地址。

在硬中斷中,向CPU提供中斷源識別碼是中斷技術的關鍵。需要硬軟件的有機配合。8259A可編程中斷控制器用于管理中斷,向CPU提供標識碼(中斷向量號、中斷類型號)當中斷是由外設產(chǎn)生時,應由該外設向CPU提供中斷向量YYCP路線圖:中斷源提供類型號N—得到中斷向量地址4×N、4×N+1、4×N+2、4×N+3—在中斷向量表中取這4個單元的內容送CS和IP——進入中斷服務程序。例:設某外設的識別碼為0aH,其中斷服務程序的入口地址為:0100:0051HCPU0ax4=0028HINTR

IACK0aH外設0aH外設中斷服務程序51000001中斷向量表DB用戶編程填寫用戶編寫

中斷發(fā)生之前,用戶先要完成的兩項工作問題:在多個中斷源的情況下,如何把優(yōu)先級最高的中斷源的識別碼送給CPU?怎么送?0000:00280000:00290000:002A0000:002B②①③0a④⑤0100:0051路線圖:例:設某外設的識別碼為0aH,CPU0aH0aH形象地給出了與中斷操作有關的主要過程。設中斷類型號為0aH,其中斷服務程序的入口地址已經(jīng)填入到中斷向量表中正確的位置。中斷主要過程:①0aH號中斷源:情況緊急,請求CPU執(zhí)行0aH號中斷服務程序。②CPU:現(xiàn)在正好沒有比你更緊迫的事件要處理,可以接受你的請求,但苦于不知道你是誰,請送你的“身份證號”——中斷類型號。③0aH號中斷源:我是0aH號中斷源。④CPU嚴格按“游戲規(guī)則”,根據(jù)0aH,得到28H,從0028H,0029H,002AH和002BH這四個單元中取得0100:0051并把低兩個字節(jié)0051H送入IP,高兩個字節(jié)0100H送入CS。絕對地址為01000H+00051H=01051H,即中斷服務程序的人口地址。⑤CPU執(zhí)行0aH號中斷服務程序。

#4中斷向量的填入誰來填寫中斷向量表中各項的內容?開機后,BIOS立即把有關的中斷向量填入中斷向量表中(包括0—7FH一段),當BIOS引導DOS到內存后,DOS進行初始化時,又把某些中斷向量填入中斷向量表,還要修改由BIOS裝入的某些中斷向量。用戶的中斷服務程序的入口地址應當由用戶自己填寫,中斷向量表的設置當CPU響應中斷時,將從中斷向量表中讀取中斷向量送給CS和IP,轉去執(zhí)行中斷服務程序。因此,用戶必須事先將中斷服務程序的入口地址填入系統(tǒng)的中斷向量表中,填入的方法有兩種。

形象地給出了與中斷操作有關的主要過程。設中斷類型假設中斷類型號為32H,斷服務程序入口處的標號為INTSUB。①用程序設置中斷向量表、、、CLI;關中斷MOV AX,0;0段MOV ES,AXMOV DI,4*32H;0段內偏移地址LEA AX,INTSUB;取入口地址的偏移地址CLD;增址STOSW;把入口地址的偏移地址存入;0000:4*32字單元MOV AX,SEGINTSUB;取入口地址的段基址STOSW;把入口地址的段基址存入;0000:4*32+2字單元、、、DI+24×32+2DI4×32+0用CLD(ClearDF)設置DF=0,增址修改AL偏移AH地址AL段基AH址用STOSW指令完成填寫中斷向量中斷向量表

ES0段

假設中斷類型號為32H,斷服務程序入口處的標號為INTSUBP167或:

、、、MOV AX,0;0段MOV DS,AXMOV BX,4*32H;0段內偏移地址MOV AX,OFFSETINTSUB;取入口地址的偏移地址MOV[BX],AX;把入口地址的偏移地址存入;0000:4*32字單元MOV AX,SEGINTSUB;取入口地址的段基址MOV[BX+2],AX;把入口地址的段基址存入;0000:4*32+2字單元DI+24×32+2DI4×32+0AL偏移AH地址AL段基AH址中斷向量表

DS0段

用DOS功能設置中斷向量表(07/10/31007)*中斷向量的置換在中斷向量表中,系統(tǒng)占有若干單元存放系統(tǒng)自己的中斷服務程序的入口地址(中斷向量),微機在初始化過程中,把這些中斷向量填寫到中斷向量表中。例如:系統(tǒng)輔串口占用中斷向量號0BH,系統(tǒng)初始化時,已經(jīng)在0B×4~0B×4+3(002CH~002FH)這4個單元中填寫了中斷向量;如果用戶也想占用0BH,也必須把用戶的中斷向量寫入這4個單元。為了不破壞系統(tǒng)設置的中斷向量,需要進行中斷置換:P167或:、、、DI+24×32+2DIIPLIPHCSLCSH用戶中斷服務程序CS:IP原中斷向量

堆棧

CS:IP1

2

30000:002CH0000:002DH0000:002EH0000:002FH*借用DOS35H號功能,讀出原中斷向量;

*借用DOS25H號功能,把用戶中斷向量寫入中斷向量表把原中斷向量填回中斷向量表1)35H號功能:入口:AL:中斷向量號

出口:ES存放中斷向量的段基址;BX存放偏移地址2)25H號功能

入口:AL:中斷向量號;DS:中斷向量的段基址;DX:偏移地址例:設某外設的中斷服務程序的入口地址為INTP,中斷類型號為0BH。用戶中斷CS:IP原中斷向量堆棧CS:IP1230如果把0BH改變0AH,程序中相關部分應當怎么處理?(3)中斷描述符表在DOS環(huán)境下,486工作在實模式時,中斷服務程序的屬性比較單一,僅用中斷向量表明它的位置就可以了。:MOVAX,350BH;AH=35H,AL=0BHINT21H;從向量表中讀出原中斷向量

;存人ES:BPUSHES;把原中斷向量壓入堆棧PUSHBX

MOVAX,SEGINTP;取用戶中斷向量段基址MOVDS,AX;25H功能要求基地址送入DSMOVDX,OFFSETINTP;用戶中斷向量偏移地址MOVAX,250BH;AH=25H,AL=0BHINT21H;把用戶中斷服務程序入口地址:;填入中斷向量表POPDX;取原中斷向量POPDSMOVAX,250BHINT21H;把原中斷向量填回中斷向量表如果把0BH改變0AH,程序中相關部分應當怎么處理?(3)中在多任務操作系統(tǒng)(如:UNIX,WINDOWS)管理下,486工作在保護模式的時候,情況要復雜得多,僅僅用中斷向量已經(jīng)不能全面描述中斷服務程序的全部屬性了,而必須:用中斷描述符來描述中斷服務程序;用中斷描述符表來代替中斷向量表。

暫時了解到此(4)中斷優(yōu)先級與中斷嵌套CPU在執(zhí)行中斷服務程序的過程中,被高優(yōu)先級的中斷源中斷,又轉入另一個中斷服務程序的操作,叫中斷嵌套。P170圖6.12

嵌套原則:高級可以中斷低級,低級不能中斷高級或同級。P170表6.1給出了在80486中,各大類中斷源的優(yōu)先級。(5)CPU響應中斷的條件并非一產(chǎn)生中斷請求,CPU就響應中斷。CPU響應中斷是有一定條件的,其中以可屏蔽中斷的條件最多,以此為例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論