微機(jī)原理課件第7章.ppt_第1頁
微機(jī)原理課件第7章.ppt_第2頁
微機(jī)原理課件第7章.ppt_第3頁
微機(jī)原理課件第7章.ppt_第4頁
微機(jī)原理課件第7章.ppt_第5頁
已閱讀5頁,還剩74頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

微機(jī)原理 匯編與接口技術(shù) 朱定華 7 1 7 2 7 3 中斷和中斷系統(tǒng) 中斷控制器8259A 中斷系統(tǒng)和中斷指令 第七章中斷技術(shù) 7 4 實(shí)地址方式下的可屏蔽中斷服務(wù)程序的設(shè)計(jì) 7 1中斷和中斷系統(tǒng) 早期的計(jì)算機(jī)沒有中斷功能 CPU和外設(shè)之間的信息交換采用的是查詢方式 CPU的大部分時(shí)間都浪費(fèi)在反復(fù)查詢上 這就妨礙了計(jì)算機(jī)高速性能的充分發(fā)揮 產(chǎn)生了快速的CPU與慢速的外設(shè)之間的矛盾 這也是計(jì)算機(jī)在發(fā)展過程中遇到的嚴(yán)重問題之一 為解決這個(gè)問題 一方面要提高外設(shè)的工作速度 另一方面引入了中斷 所謂中斷 是指計(jì)算機(jī)在正常運(yùn)行的過程中 由于種種原因 使CPU暫時(shí)停止當(dāng)前程序的執(zhí)行 而轉(zhuǎn)去處理臨時(shí)發(fā)生的事件 即執(zhí)行中斷服務(wù)程序 處理完畢后 再返回去繼續(xù)執(zhí)行暫停的程序 使用中斷技術(shù) 使得外部設(shè)備與CPU不再是串行工作 而是分時(shí)操作 從而大大提高了計(jì)算機(jī)的效率 為了實(shí)現(xiàn)中斷功能而設(shè)置的各種硬件和軟件 統(tǒng)稱為中斷系統(tǒng) 7 1 1中斷的概念 1 中斷請(qǐng)求引起中斷的原因或發(fā)出中斷申請(qǐng)的來源 稱為中斷源 當(dāng)外部中斷源要求CPU為它服務(wù)時(shí) 就輸出一個(gè)中斷請(qǐng)求信號(hào)加載到CPU的中斷請(qǐng)求輸入端 這就是對(duì)CPU的中斷申請(qǐng)信號(hào) 由于每個(gè)中斷源向CPU發(fā)出中斷請(qǐng)求信號(hào)是隨機(jī)的 而CPU是在現(xiàn)行指令周期結(jié)束時(shí) 才檢測(cè)有無中斷請(qǐng)求信號(hào)發(fā)生 故在現(xiàn)行指令執(zhí)行期間 必須把隨機(jī)輸入的中斷請(qǐng)求信號(hào)鎖存起來 并保持至CPU響應(yīng)后才可以清除 因此 每一個(gè)中斷源都設(shè)置有一個(gè)中斷請(qǐng)求觸發(fā)器來記載它的中斷申請(qǐng)信號(hào) 7 1 2中斷請(qǐng)求與控制和中斷源的識(shí)別 2 中斷源識(shí)別當(dāng)系統(tǒng)有多個(gè)外部中斷源時(shí) 一旦發(fā)生中斷 CPU必須確定是哪一個(gè)中斷源 識(shí)別的方法 每個(gè)中斷源都有一條中斷請(qǐng)求信號(hào)線 且固定其中斷服務(wù)程序的入口地址 CPU根據(jù)中斷信號(hào)線 就可以進(jìn)入相應(yīng)的中斷服務(wù)程序 向量中斷 使用向量中斷系統(tǒng)的中斷源除了能輸出中斷請(qǐng)求信號(hào)外 還能輸出一個(gè)中斷向量 CPU根據(jù)這個(gè)中斷向量能夠獲得該中斷源的中斷服務(wù)程序的入口地址 80 x86CPU采用向量中斷 并把中斷向量稱作中斷類型碼 系統(tǒng)為每一個(gè)中斷源指定一個(gè)中斷類型碼 中斷源在其中斷請(qǐng)求被CPU響應(yīng)后 將它的中斷類型碼送到數(shù)據(jù)線上 與此同時(shí) CPU將數(shù)據(jù)線上的中斷類型碼讀入 根據(jù)中斷類型碼能夠進(jìn)入該中斷源的中斷服務(wù)程序 7 1 2中斷請(qǐng)求與控制和中斷源的識(shí)別 7 1 2中斷請(qǐng)求與控制和中斷源的識(shí)別 3 中斷控制對(duì)外部中斷源的中斷有兩級(jí)控制 中斷屏蔽和中斷允許 在每一個(gè)外部中斷源的中斷請(qǐng)求電路中 增加一個(gè)中斷屏蔽觸發(fā)器 將中斷源輸出的中斷請(qǐng)求信號(hào)與中斷觸發(fā)器的輸出相與后再作為該中斷源的中斷請(qǐng)求信號(hào) 中斷屏蔽觸發(fā)器的狀態(tài)就控制了外部中斷源的中斷請(qǐng)求是否被送至CPU CPU內(nèi)部有一個(gè)中斷允許觸發(fā)器 只有當(dāng)其允許中斷 即開中斷 時(shí) CPU才能響應(yīng)中斷 若不允許中斷 即關(guān)中斷 時(shí) 即使CPU的中斷請(qǐng)求線上有中斷請(qǐng)求 CPU也不響應(yīng) 80 x86的中斷允許觸發(fā)器是由其標(biāo)志寄存器的中斷標(biāo)志位IF來控制的 中斷標(biāo)志位的狀態(tài)可由STI和CLI指令來改變 1 實(shí)現(xiàn)中斷及返回 當(dāng)某一中斷源發(fā)出中斷申請(qǐng)時(shí) CPU能決定是否響應(yīng)這個(gè)中斷請(qǐng)求 當(dāng)CPU在執(zhí)行更緊急 更重要的工作時(shí) 可以暫不響應(yīng)中斷 若允許響應(yīng)這個(gè)中斷請(qǐng)求 CPU必須在現(xiàn)行的指令執(zhí)行完后 把斷點(diǎn)處的 E IP和CS值 即下一條應(yīng)執(zhí)行的指令的地址 各個(gè)寄存器的內(nèi)容和標(biāo)志位的狀態(tài) 推入堆棧保留下來 稱為保護(hù)斷點(diǎn)和現(xiàn)場(chǎng) 然后才能轉(zhuǎn)入中斷源的服務(wù)程序 當(dāng)中斷處理完后 再恢復(fù)被保留下來的各個(gè)寄存器和標(biāo)志位的狀態(tài) 稱為恢復(fù)現(xiàn)場(chǎng) 使CPU返回被中斷的程序 7 1 3中斷系統(tǒng)的功能 2 實(shí)現(xiàn)優(yōu)先權(quán)排隊(duì) 通常 在系統(tǒng)中有多個(gè)中斷源 會(huì)出現(xiàn)兩個(gè)或多個(gè)中斷源同時(shí)提出中斷請(qǐng)求的情況 這樣就必須要設(shè)計(jì)者事先根據(jù)輕重緩急給每個(gè)中斷源確定一個(gè)中斷級(jí)別 即優(yōu)先權(quán) 當(dāng)多個(gè)中斷源同時(shí)發(fā)出中斷申請(qǐng)時(shí) CPU能找到優(yōu)先權(quán)級(jí)別最高的中斷源 響應(yīng)它的中斷請(qǐng)求 在優(yōu)先權(quán)級(jí)別高的中斷源處理完了以后 再響應(yīng)級(jí)別較低的中斷源 7 1 3中斷系統(tǒng)的功能 3 高級(jí)中斷源能中斷低級(jí)的中斷處理 當(dāng)CPU響應(yīng)某一中斷請(qǐng)求 在進(jìn)行中斷處理時(shí)若有優(yōu)先權(quán)級(jí)別更高的中斷源發(fā)出中斷申請(qǐng) 則CPU要能中斷正在進(jìn)行的中斷服務(wù)程序 保留這個(gè)程序的斷點(diǎn)和現(xiàn)場(chǎng) 類似于子程序嵌套 響應(yīng)高級(jí)中斷 在高級(jí)中斷處理完以后 再繼續(xù)執(zhí)行被中斷的中斷服務(wù)程序 而當(dāng)發(fā)出新的中斷申請(qǐng)的中斷源的優(yōu)先級(jí)別與正在處理的中斷源同級(jí)或更低時(shí) CPU就先不響應(yīng)這個(gè)中斷申請(qǐng) 直至正在處理的中斷服務(wù)程序執(zhí)行完以后才去響應(yīng)這個(gè)新的中斷申請(qǐng) 7 1 3中斷系統(tǒng)的功能 CPU在現(xiàn)行指令結(jié)束后響應(yīng)中斷 CPU就響應(yīng)中斷 轉(zhuǎn)入中斷響應(yīng)周期 中斷響應(yīng)及中斷過程如下 1 關(guān)中斷 2 保留斷點(diǎn) 3 給出中斷入口地址 轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序 4 保護(hù)現(xiàn)場(chǎng) 5 執(zhí)行中斷服務(wù)程序 7 中斷返回 7 1 4CPU對(duì)外部可屏蔽中斷的響應(yīng)及中斷過程 6 恢復(fù)現(xiàn)場(chǎng) 關(guān)中斷 在CPU響應(yīng)中斷后 發(fā)出中斷響應(yīng)信號(hào)的同時(shí) 內(nèi)部自動(dòng)地關(guān)中斷 保留斷點(diǎn) CPU響應(yīng)中斷后把IP和CS推入堆棧保存 以備中斷處理完畢后 能返回被中斷程序 7 1 4CPU對(duì)中斷的響應(yīng)及中斷過程 保護(hù)現(xiàn)場(chǎng) 為了使中斷處理程序不影響被中斷程序的運(yùn)行 故要把斷點(diǎn)處的有關(guān)的各個(gè)寄存器的內(nèi)容和標(biāo)志位的狀態(tài) 推入堆棧保護(hù)起來 80 x86是由軟件 即在中斷服務(wù)程序中 把要用到的寄存器的內(nèi)容用PUSH指令推入堆棧 而標(biāo)志位的狀態(tài)是在保留斷點(diǎn)的同時(shí)由硬件推入堆棧的 7 1 4CPU對(duì)中斷的響應(yīng)及中斷過程 給出中斷入口地址 轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序 80 x86是根據(jù)中斷源提供的中斷類型碼讀取中斷向量表或中斷描述符表得到中斷服務(wù)程序入口地址的 恢復(fù)現(xiàn)場(chǎng) 把所保存的各個(gè)內(nèi)部寄存器的內(nèi)容和標(biāo)志位的狀態(tài) 從堆棧彈出 送回CPU中的原來位置 這個(gè)操作是用POP指令來完成的 80 x86的標(biāo)志位的狀態(tài)由硬件恢復(fù) 7 1 4CPU對(duì)中斷的響應(yīng)及中斷過程 中斷返回 在中斷服務(wù)程序的最后要安排一條中斷返回指令 將堆棧內(nèi)保存的 E IP和CS值彈出 運(yùn)行就轉(zhuǎn)移到被中斷程序 80 x86的中斷返回指令還將堆棧內(nèi)保存的標(biāo)志狀態(tài)彈出給標(biāo)志寄存器 使系統(tǒng)恢復(fù)中斷前的狀態(tài) 7 1 4CPU對(duì)中斷的響應(yīng)及中斷過程 7 1 7 3 中斷和中斷系統(tǒng) 中斷控制器8259A 中斷系統(tǒng)和中斷指令 第七章中斷技術(shù) 7 4 實(shí)地址方式下的可屏蔽中斷服務(wù)程序的設(shè)計(jì) 7 2 Intel8259A是8080 8085以及80 x86的可編程的中斷控制器 80 x86是通過它來管理中斷的 它具有8級(jí)優(yōu)先權(quán)控制 通過級(jí)聯(lián)可擴(kuò)展至64級(jí)優(yōu)先權(quán)控制 每一級(jí)中斷都可以屏蔽或允許 在中斷響應(yīng)周期 8259A可提供相應(yīng)的中斷類型碼 從而能迅速地轉(zhuǎn)至中斷服務(wù)程序 7 2中斷控制器8259A 8259A的內(nèi)部組成如下圖 7 2 18259的組成和接口信號(hào) 1 在中斷請(qǐng)求輸入端IR7 IR0上接受中斷請(qǐng)求 2 中斷請(qǐng)求鎖存在IRR中 并與IMR相 與 將未屏蔽的中斷送給優(yōu)先級(jí)判定電路 3 優(yōu)先級(jí)判定電路檢出優(yōu)先級(jí)最高的中斷請(qǐng)求位 并置位該位的ISR 4 控制邏輯接受中斷請(qǐng)求 輸出INT信號(hào) 7 2 28259A處理中斷的過程 5 CPU接受INT信號(hào) 進(jìn)入連續(xù)兩個(gè)中斷響應(yīng)周期 單片使用或是由CAS2 CAS0選擇的從片8259A 就在第2個(gè)中斷響應(yīng)周期 將中斷類型向量從D7 D0線輸出 如果是作主片使用的8259A 則在第1個(gè)中斷響應(yīng)周期 把級(jí)聯(lián)地址從CAS2 CAS0送出 6 CPU讀取中斷向量 轉(zhuǎn)移到相應(yīng)的中斷處理程序 7 中斷的結(jié)束是通過向8259A送一條EOI 中斷結(jié)束 命令 使ISR復(fù)位來實(shí)現(xiàn)的 在中斷服務(wù)過程中 在EOI命令使ISR復(fù)位之前 不再接受由ISR置位的中斷請(qǐng)求 7 2 28259處理中斷的過程 8259A單片使用如圖所示 7 2 38259A的級(jí)聯(lián)連接 在IR7 IR0上輸入中斷請(qǐng)求 INT和與CPU相連接 這時(shí) 中斷請(qǐng)求輸入共計(jì)有IR0 IR7 共8個(gè)級(jí)別 8259A級(jí)聯(lián)連接如右圖 7 2 38259A的級(jí)聯(lián)連接 8259A的命令字包括初始設(shè)定的初始化命令字ICW和操作過程中給出的操作命令字OCW 7 2 48259A的命令字 初始化命令字ICW包括ICW1 ICW44個(gè)命令字 用于設(shè)定8259A的工作方式 中斷類型碼等 對(duì)于80 x86CPU ICW命令字設(shè)置過程如下圖所示 7 2 48259A的命令字 LTIM 1為電平觸發(fā)中斷 0為邊沿觸發(fā)中斷 SNGL 1為單獨(dú)使用 0為級(jí)連使用 IC4 1為設(shè)置IC4 0為不設(shè)置IC4 T7 T3 中斷類型碼高5位 低3位為IR7 IR0編碼后的值 ID2 ID0 從片的識(shí)別地址 存放IR7 IR0編碼后的值 從片使用 S7 S0 主片的IR7 IR0上連接從片8259A時(shí) 相對(duì)應(yīng)的位為1 主片使用 SFNM 1為特殊全嵌套方式 0為全嵌套方式 AEOI 1為自動(dòng)結(jié)束中斷方式 0為非自動(dòng)結(jié)束中斷方式 BUF 1為緩沖方式 0為非緩沖方式 M S 1為主片 0為從片 例7 1試按照如下要求對(duì)8259A設(shè)置初始化命令字 系統(tǒng)中僅用一片8259A 中斷請(qǐng)求信號(hào)采用邊沿觸發(fā)方式 中斷類型碼為08H 0FH 用全嵌套 緩沖 非自動(dòng)結(jié)束中斷方式 8259A的端口地址為20H和21H 該片8259A的初始化設(shè)置的程序段如下 MOVAL 13H ICW1 邊沿觸發(fā) 單片 設(shè)置IC4OUT20H ALMOVAL 8 ICW2 中斷類型碼為8 FHOUT21H ALMOVAL 0DH ICW4 全嵌套 緩沖 非自動(dòng)結(jié)束中斷方式OUT21H AL 例7 2試對(duì)一個(gè)主從式8259A進(jìn)行初始化命令字的設(shè)置 從片的INT與主片的IR2相連 從片的中斷類型碼為70H 77H 端口地址為A0H和A1H 主片的中斷類型碼為08H 0FH 端口地址為20H和21H 中斷請(qǐng)求信號(hào)采用邊沿觸發(fā) 采用全嵌套 緩沖 非自動(dòng)結(jié)束中斷方式 主片初始化程序段 MOVAL 11H ICW1OUT20H ALMOVAL 8 ICW2 中斷類型碼為08H 0FHOUT21H ALMOVAL 4 ICW3 IR2上連接從片OUT21H ALMOVAL 0DH ICW4OUT21H AL 從片初始化程序段 MOVAL 11HOUT0A0H ALMOVAL 70H ICW2 中斷類型碼為70H 77HOUT0A1H ALMOVAL 2 ICW3 從片的識(shí)別地址 即主片的IR2OUT0A1H ALMOVAL 9OUT0A1H AL 80 x86PC在上電初始化期間 BIOS已設(shè)定8259A的初始化命令字 用戶不必設(shè)定 操作命令字OCW是操作過程中給出的命令 初始設(shè)定結(jié)束后的命令字都是OCW OCW包括OCW1 OCW33個(gè)命令字 如下圖所示 7 2 48259A的命令字 OCW1是對(duì)IMR置位 復(fù)位的命令 置位位對(duì)應(yīng)的中斷被屏蔽 以A0 1讀 寫OCW1命令字 即讀 寫IMR OCW2是中斷結(jié)束 EOI 的命令字 用于復(fù)位ISR及改變優(yōu)先級(jí) 以A0 0寫OCW2命令字 EOI命令有2個(gè) 一個(gè)是一般EOI 對(duì)正在服務(wù)的ISR復(fù)位 其命令字是20H 另一個(gè)是指定EOI 對(duì)L2 L0指定的ISR復(fù)位 對(duì)8259A的IR7 IR0對(duì)應(yīng)的ISR復(fù)位的命令字分別是67H 60H OCW3是讀ISR和IRR以及指定設(shè)置特殊屏蔽方式的命令 以A0 0進(jìn)行寫入 由D4D3兩位特征位來區(qū)別 00為OCW2 01為OCW3 注意 只要命令字的D4位為 1 地址位A0為 0 就是ICW1命令字 所以 特征位若為1 則是ICW1 以A0 0來讀ISR和IRR及中斷狀態(tài) 在通常方式的中斷服務(wù)過程中 ISR設(shè)置期間對(duì)優(yōu)先級(jí)更低的中斷請(qǐng)求不響應(yīng) 特殊屏蔽方式是可以解除這種禁止中斷狀態(tài)的方式 在這種方式時(shí) 除了由ISR設(shè)置的位和由IMR屏蔽的位對(duì)應(yīng)的中斷外 其它所有級(jí)別的中斷均可響應(yīng) 7 1 7 2 中斷和中斷系統(tǒng) 中斷控制器8259A 中斷系統(tǒng)和中斷指令 第七章中斷技術(shù) 7 4 實(shí)地址方式下的可屏蔽中斷服務(wù)程序的設(shè)計(jì) 7 3 它可以處理256種不同類型的中斷 其中每一種中斷都規(guī)定了一個(gè)唯一的中斷類型編碼 即中斷向量 CPU根據(jù)中斷類型編碼來識(shí)別中斷源 80 x86有兩類中斷 內(nèi)部 軟件 中斷 即由指令的執(zhí)行所引起的中斷 外部 硬件 中斷 即由外部 主要是外設(shè) 的請(qǐng)求引起的中斷 PC機(jī)中斷系統(tǒng)的功能極強(qiáng) 其結(jié)構(gòu)簡(jiǎn)單而且靈活 7 3中斷系統(tǒng)和中斷指令 80 x86設(shè)置的中斷指令和中斷返回指令如下 指定類型中斷指令I(lǐng)NTN溢出中斷指令I(lǐng)NTO中斷返回指令I(lǐng)RET IRETD 當(dāng)程序需要轉(zhuǎn)移到某一指定的中斷服務(wù)程序時(shí) 可以設(shè)置一條中斷指令 使程序轉(zhuǎn)移到所指定的中斷服務(wù)程序 通過中斷指令實(shí)現(xiàn)的中斷稱為軟件中斷 7 3 1中斷指令 1 INTN指令中斷 類型N中斷 這條指令的執(zhí)行引起中斷 而且中斷類型由指令中的N加以指定 2 INTO指令中斷 類型4中斷 若上一條指令執(zhí)行的結(jié)果 使溢出標(biāo)志位OF 1 則INTO指令引起類型為4的內(nèi)部中斷 否則 此指令不起作用 程序執(zhí)行下一條指令 IRET是中斷返回指令 它的作用與RET指令類似 都是使控制返回主程序 但是IRET是遠(yuǎn)返回 且除了從堆棧中彈出偏移地址 給IP 和段地址 給CS 外 還彈出中斷時(shí)進(jìn)棧保護(hù)的標(biāo)志寄存器的內(nèi)容 給F IRETD是32位的中斷返回指令 它的作用與IRET指令類似 不同的僅是從堆棧中彈出的偏移地址是給EIP 7 3 1中斷指令 80 x86微處理器芯片均有兩條外部中斷請(qǐng)求線 NMI nonmaskableinterrupt非屏蔽中斷 INTR 可屏蔽中斷 7 3 2外部中斷 出現(xiàn)在INTR線上的中斷請(qǐng)求 CPU是否響應(yīng)要取決于標(biāo)志位IF的狀態(tài) 若IF 1 則CPU就響應(yīng) 此時(shí)CPU是處在開中斷狀態(tài) 若IF 0 則CPU就不響應(yīng) 此時(shí)CPU是處在關(guān)中斷狀態(tài) 而IF標(biāo)志位的狀態(tài) 可以用指令STI使其置位 即開中斷 也可以用CLI指令來使其復(fù)位 即關(guān)中斷 7 3 2外部中斷 要注意 在系統(tǒng)復(fù)位以后 標(biāo)志位IF 0 另外 任一種中斷 內(nèi)部中斷 NMI INTR 被響應(yīng)后 IF 0 所以 若允許中斷嵌套 就必須在中斷服務(wù)程序中用STI指令開中斷 7 3 2外部中斷 CPU是在當(dāng)前指令周期的最后一個(gè)T狀態(tài)采樣中斷請(qǐng)求線 若發(fā)現(xiàn)有可屏蔽中斷請(qǐng)求 且中斷是開放的 IF標(biāo)志為 1 則CPU轉(zhuǎn)入中斷響應(yīng)周期 80 x86CPU進(jìn)入兩個(gè)連續(xù)的中斷響應(yīng)周期 每個(gè)響應(yīng)周期都由4個(gè)T狀態(tài)組成 而且都發(fā)出有效的中斷響應(yīng)信號(hào) 請(qǐng)求中斷的外設(shè) 必須在第二個(gè)中斷響應(yīng)周期的T3狀態(tài) 把中斷向量 類型碼 送到數(shù)據(jù)總線 通常通過8259A傳送 CPU在T4狀態(tài)的前沿采樣數(shù)據(jù)總線 獲取中斷向量 接著就進(jìn)入了中斷處理程序 7 3 2外部中斷 出現(xiàn)在NMI線上的中斷請(qǐng)求 不受標(biāo)志位IF的影響 在當(dāng)前指令執(zhí)行完以后 CPU就響應(yīng) NMI線上的中斷請(qǐng)求信號(hào)是邊沿觸發(fā)的 它的出現(xiàn)是異步的 由內(nèi)部把它鎖存 要求NMI上的中斷請(qǐng)求脈沖的有效寬度 高電平的持續(xù)時(shí)間 要大于兩個(gè)時(shí)鐘周期 7 3 2外部中斷 非屏蔽中斷的優(yōu)先權(quán)高于可屏蔽中斷 CPU采樣到有非屏蔽中斷請(qǐng)求時(shí) 自動(dòng)給出中斷向量類型碼2 而不經(jīng)過上述的可屏蔽中斷那樣的中斷響應(yīng)周期 NMI INTR這兩條中斷請(qǐng)求線是遠(yuǎn)不能滿足實(shí)際需要的 80 x86微處理器用8259A作為外設(shè)向CPU申請(qǐng)中斷和CPU對(duì)中斷進(jìn)行各種控制的接口 它把80 x86的一條可屏蔽中斷線INTR擴(kuò)展成8 64條中斷請(qǐng)求線 7 3 2外部中斷 對(duì)于某些重要的中斷事件 CPU通過自己的內(nèi)部邏輯 調(diào)用相應(yīng)的中斷服務(wù)程序 而不是由外部的中斷請(qǐng)求來調(diào)用 這種由CPU自己?jiǎn)?dòng)的中斷處理過程 稱為內(nèi)部中斷 內(nèi)部中斷有如下3類 7 3 3內(nèi)部中斷 故障是指某條指令在啟動(dòng)之后 真正執(zhí)行之前 就被檢測(cè)到異常而產(chǎn)生的一種中斷 出現(xiàn)故障時(shí) CPU將產(chǎn)生異常操作指令的地址保存到堆棧中 然后進(jìn)入故障處理程序并排除該故障 從故障處理程序返回后 再執(zhí)行曾經(jīng)產(chǎn)生異常的指令 使程序正常地繼續(xù)執(zhí)行下去 7 3 3內(nèi)部中斷 陷阱是在指令執(zhí)行過程中引起的中斷 這類異常主要是由執(zhí)行除法指令或中斷調(diào)用指令 INTN 引起的設(shè)置陷阱指令的下一條指令的地址就是斷點(diǎn) 出現(xiàn)陷阱中斷時(shí) 把 E IP和CS即斷點(diǎn)推入堆棧保存后就進(jìn)入該陷阱處理程序 陷阱中斷處理完后 返回到該斷點(diǎn)處繼續(xù)執(zhí)行 7 3 3內(nèi)部中斷 異常中止通常是由硬件錯(cuò)誤或非法的系統(tǒng)調(diào)用引起的 一般無法確定造成異常指令的準(zhǔn)確位置 程序無法繼續(xù)執(zhí)行 系統(tǒng)也無法恢復(fù)原操作 必須重新啟動(dòng)系統(tǒng) 7 3 3內(nèi)部中斷 7 3 4中斷類型碼及中斷種類 7 3 5中斷向量表和中斷描述符表 中斷向量表中前5個(gè)中斷向量 或中斷類型 由Intel專用 系統(tǒng)又保留了若干個(gè)中斷向量 余下的就可以由用戶用 可作為外部中斷源的向量 外部中斷源 只要先將中斷服務(wù)程序的入口地址填入中斷向量表 在第二個(gè)中斷響應(yīng)周期 向數(shù)據(jù)總線送出一個(gè)字節(jié)的中斷類型碼N 即可以轉(zhuǎn)至該中斷源的中斷服務(wù)程序 例7 3若80 x86系統(tǒng)采用的8259A的中斷類型碼為88H 試問 這個(gè)中斷源的中斷請(qǐng)求信號(hào)應(yīng)連向8259A的哪個(gè)中斷輸入端 中斷服務(wù)程序的段地址和偏移地址應(yīng)分別填入哪兩個(gè)字單元 根據(jù)ICW2可知 中斷類型碼的低3位即是8259AIRi的i值 而88H的低3位為000 故中斷源的中斷請(qǐng)求信號(hào)連接到8259A的IR0輸入端 中斷服務(wù)程序的偏移地址和段地址分別填入4n和4n 2兩個(gè)字單元 而4 88H 220H 故段地址填入00222H字單元 即00222H和00223H兩個(gè)字節(jié)單元 偏移地址填入00220H字單元 即00220H和00221H兩個(gè)字節(jié)單元 7 3 5中斷向量表和中斷描述符表 在保護(hù)方式下 為每一個(gè)中斷定義了一個(gè)中斷描述符來說明中斷服務(wù)程序的入口地址和屬性 所有的中斷描述符都集中存放在中斷描述符表中 由中斷描述符表取代了實(shí)地址方式下的中斷向量表 中斷描述符包含3個(gè)內(nèi)容 一是描述符索引DI 由此可以獲得段基址等 二是32位的偏移地址 三是相關(guān)段的參數(shù) 這些參數(shù)指示引起中斷的原因?qū)儆谀囊活?80 x86對(duì)各種中斷的響應(yīng)和處理過程是不相同的 其主要區(qū)別在于如何獲取相應(yīng)的中斷類型碼 向量 對(duì)于硬件 外部 中斷 CPU是在當(dāng)前指令周期的最后一個(gè)T狀態(tài)采樣中斷請(qǐng)求輸入信號(hào) 如果有可屏蔽中斷請(qǐng)求 且CPU處在開中斷狀態(tài) IF標(biāo)志為1 則CPU轉(zhuǎn)入兩個(gè)連續(xù)的中斷響應(yīng)周期 在第二個(gè)中斷響應(yīng)周期的T4狀態(tài)前沿 讀取數(shù)據(jù)線獲取由外設(shè)輸入的中斷類型碼 若是非屏蔽中斷請(qǐng)求 則CPU不經(jīng)過上述的兩個(gè)中斷響應(yīng)周期 而在內(nèi)部自動(dòng)產(chǎn)生中斷類型碼2 7 3 6中斷響應(yīng)和處理過程 80 x86CPU在響應(yīng)中斷請(qǐng)求后 由硬件自動(dòng)完成如下操作 獲取中斷類型碼 生成中斷向量表或中斷描述符表的位移量 2 把CPU的標(biāo)志寄存器進(jìn)棧 保護(hù)各個(gè)標(biāo)志位 3 清除IF和TF標(biāo)志 屏蔽INTR中斷和單步中斷 4 保存被中斷程序的斷點(diǎn)推入堆棧保護(hù) 5 從中斷向量表或中斷描述符表獲取中斷服務(wù)程序的入口地址 進(jìn)入被響應(yīng)中斷的中斷服務(wù)程序 7 3 6中斷響應(yīng)和處理過程 中斷響應(yīng)過程 7 3 6中斷響應(yīng)和處理過程 7 1 7 3 中斷和中斷系統(tǒng) 中斷控制器8259A 中斷系統(tǒng)和中斷指令 第七章中斷技術(shù) 7 2 實(shí)地址方式下的可屏蔽中斷服務(wù)程序的設(shè)計(jì) 7 4 外部設(shè)備的中斷請(qǐng)求信號(hào)是由中斷控制器8259A轉(zhuǎn)發(fā)給CPU的 轉(zhuǎn)發(fā)過程為 外部設(shè)備的中斷請(qǐng)求信號(hào)由8259A的中斷輸入線IR7 IR0進(jìn)入8259A的中斷請(qǐng)求寄存器IRR寄存 經(jīng)過8259A的優(yōu)先權(quán)分析器和中斷屏蔽寄存器的分析處理 由8259A的中斷輸出線INT輸出給80 x86的INTR線 向80 x86CPU申請(qǐng)中斷 CPU響應(yīng)中斷后 向8259A發(fā)回中斷響應(yīng)信號(hào)并讀取8259A送出的中斷類型碼 7 4實(shí)地址方式下的可屏蔽中斷服務(wù)程序的設(shè)計(jì) 所以80 x86PC機(jī)的可屏蔽中斷服務(wù)程序的設(shè)計(jì)主要有兩個(gè)方面 第一 根據(jù)8259A中斷輸入線對(duì)應(yīng)的中斷類型碼 將中斷服務(wù)程序的入口地址填入中斷向量表 第二 向8259A寫入操作命令字 初始化命令字系統(tǒng)已設(shè)置 對(duì)中斷屏蔽與中斷結(jié)束進(jìn)行處理 7 4實(shí)地址方式下的可屏蔽中斷服務(wù)程序的設(shè)計(jì) 根據(jù)中斷類型碼將其中斷服務(wù)程序入口地址裝入中斷向量表中 有直接裝入和調(diào)用系統(tǒng)功能調(diào)用裝入兩種方法 下面以PCXT機(jī)為例說明裝入的方法 PCXT微機(jī)系統(tǒng)僅使用1片8259A 它的8個(gè)中斷輸入端IR0 IR7分別定義為IRQ0 IRQ7 PCXT機(jī)留給用戶使用的可屏蔽中斷為IRQ2 從其總線插座的B4引出 PCXT機(jī)初始化8259A時(shí)寫入的中斷類型碼為08H 0FH 分別對(duì)應(yīng)IRQ0 IRQ7 所以IRQ2的中斷類型碼為0AH 7 4 1中斷服務(wù)程序入口地址的裝入 假定中斷服務(wù)程序?yàn)镮NT SUB 直接裝入程序段為 SUBAX AXMOVES AX 中斷向量表的段地址為0MOVAX OFFSETINT SUBMOVES 28H AX IRQ2的中斷類型碼為0AH MOVAX SEGINT SUB 0AH 4 28HMOVES 2AH AX 7 4 1中斷服務(wù)程序入口地址的裝入 功能調(diào)用號(hào)為25H 入口參數(shù)為AL置中斷類型碼 DS DX置入口地址 裝入程序段如下 MOVAX SEGINT SUBMOVDS AXMOVDX OFFSETINT SUBMOVAX 250AHINT21H 7 4 1中斷服務(wù)程序入口地址的裝入 8259A內(nèi)有一個(gè)中斷屏蔽寄存器IMR 它的每一位對(duì)應(yīng)著一個(gè)中斷輸入線 即Mi與IRi對(duì)應(yīng) 當(dāng)Mi 1就屏蔽對(duì)應(yīng)的IRi 禁止它的輸入信號(hào)產(chǎn)生中斷輸出信號(hào)INT Mi 0則允許對(duì)應(yīng)的IRi的中斷輸入信號(hào)產(chǎn)生中斷輸出信號(hào)INT 向CPU申請(qǐng)中斷 7 4 2中斷屏蔽與中斷結(jié)束的處理 80 x86PC機(jī)為了系統(tǒng)的工作穩(wěn)定 在初始化8259A即送完ICW后 寫入了中斷屏蔽操作控制字OCW1 將它自身沒有用的8259A的中斷輸入線全部屏蔽 因此在中斷前后要修改80 x86PC機(jī)系統(tǒng)設(shè)置的中斷屏蔽字 中斷后應(yīng)恢復(fù)系統(tǒng)原來設(shè)置的中斷屏蔽字 修改和恢復(fù)的方法是用奇地址讀取中斷屏蔽寄存器IMR的內(nèi)容 將所用的中斷輸入線IRi的對(duì)應(yīng)位Mi置0 修改 或者置 恢復(fù) 后 再用奇地址寫入中斷屏蔽寄存器 修改和恢復(fù)時(shí) 不要改變IMR其他位的狀態(tài) 故只能用與操作置0 用或操作置1 例7 4時(shí)鐘程序 該程序?qū)MBPCXT機(jī)轉(zhuǎn)變成一臺(tái)式時(shí)鐘 顯示格式為HH MM SS 啟動(dòng)程序后 提示用戶輸入當(dāng)前的時(shí)間 鍵入的格式與顯示格式相同 即時(shí) 分 秒三者間要用 分隔 本程序使用系統(tǒng)的時(shí)鐘18 2Hz 即8253計(jì)數(shù)器0的輸出 因此每秒鐘會(huì)發(fā)生18次IRQ0中斷 中斷類型碼為8 修改中斷向量表 使該中斷服務(wù)程序TIMER得到該類中斷的控制權(quán) 該中斷服務(wù)程序使用一軟件計(jì)數(shù)器 其計(jì)數(shù)值保存在字節(jié)變量COUNT中 其初值為18 每中斷一次其值減1 當(dāng)該變量的值減為0時(shí) 再將其置為18 并調(diào)整一次時(shí)鐘 7 4 3中斷服務(wù)程序設(shè)計(jì)舉例 其程序如下 stacksegmentstack stack dw32dup 0 stackendsdatasegmentCOUNTDB18ECTDB ENTERCURRENTTIEM BUFFERDB9 0TENHODB 0 HOURDB 0 TENMINDB 0 MINUTEDB 0 TENSECDW 0 SECONDDB 0 0DH STOREDW0 0dataendscodesegmentmainprocfarassumecs code ds data ss stackpushdsmovax 0pushaxMOVES AXmovax datamovds ax MOVDI OFFSETSTORE 保存系統(tǒng)時(shí)鐘的中斷服務(wù)程序MOVAX ES 20H 入口地址MOV DI AXINCDIINCDIMOVAX ES 22HMOV DI AXMOVDX OFFSETECT 顯示 ENTERCURRENTTIME MOVAH 9INT21HMOVDX OFFSETBUFFER 鍵入當(dāng)前時(shí)間MOVAH 0AHINT21HMOVBH 70H 清屏 顯示器的軟中斷服務(wù)程序 MOVCH 0MOVCL 0MOVDH 24MOVDL 79MOVAL 0MOVAH 7INT10HMOVDI 20H 中斷程序入口地址送中斷向量表MOVAX OFFSETTIMERXMOV DI AXINCDIINCDI MOVAX CSMOV DI AXFOREVE MOVAH 2 置光標(biāo)位置 顯示器的軟中斷服務(wù)程序 MOVBH 0MOVDH 12MOVDL 24INT10HMOVAH 9 顯示時(shí) 分 秒MOVDX OFFSETTENHOINT21HMOVAL SECOND 等待1秒鐘HERE CMPAL SECONDJEHEREMOVAH 0BH 檢查鍵盤 若有鍵入則返回INT21HINCALJNZFOREVEMOVDI 20H 恢復(fù)系統(tǒng)時(shí)鐘的中斷向量表MOVAX STOREMOV DI AXINCDIINCDIMOVAX STORE 2MOV DI AXretmainendp TIMERXPROCFARDECCOUNT 軟件計(jì)數(shù)器減1JNZTIMER 不到1秒 退出中斷MOVCOUNT 18 已到1秒 恢復(fù)軟件計(jì)數(shù)器INCSECOND 秒加1CMPSECOND 9 十秒位是否增1 JLETIMER 否 退出中斷MOVSECOND 0 秒位置0INCTENSEC 十秒位加1CMPTENSEC 6 滿1分否 JLTIMER 否 退回中斷MOVTENSEC 0 滿 分加1INCMINUTECMPMINUTE 9 JLETIMERMOVMINUTE 0 INCTENMINCMPTENMIN 6 是否滿1小時(shí) JLTIMERMOVTENMIN 0 滿 小時(shí)加1INCHOUR CMPHOUR 9 JAADJHOCMPHOUR 3 JNZTIMERCMPTENHO 1 JNZTIMERMOVHOUR 1 MOVTENHO 0 JMPTIMERADJHO INCTENHOMOVHOUR 0 TIMER MOVAL 20H 中斷結(jié)束命令OUT20H ALIRETTIMERXENDPcodeendsendmain 例7 5由PCXT機(jī)外部產(chǎn)生中斷請(qǐng)求的簡(jiǎn)單中斷程序 系統(tǒng)將8259A的中斷輸入線IR0 IR7初始化為由低變高的邊沿觸發(fā) 通過一開關(guān) 單穩(wěn) 防抖 將中斷請(qǐng)求信號(hào)接到PCXT總線的引腳B4 即IRQ2上 該開關(guān)先輸出低電平 運(yùn)行程序顯示提示信息 WAITINTERRUPT 后再將開關(guān)輸出高電平 使IRQ2的電平由低變高 于是向8259A的中斷輸入線發(fā)出了中斷請(qǐng)求信號(hào) 成功后再將開關(guān)返回到低電平 該程序可以用到任何可以產(chǎn)生中斷請(qǐng)求信號(hào)的外設(shè)接口的電路上 如前所述 PCXT機(jī)已對(duì)8259A進(jìn)行了初始化操作 故只需進(jìn)行操作命令字的設(shè)定 8259A的端口地址為20H和21H 要使用的命令字有屏蔽字OCW1和中斷結(jié)束命令字OCW2 程序中用JMP 指令來等待中斷 若程序中不改變屏蔽字開放IRQ2中斷 則扳動(dòng)開關(guān)后 程序總處于等待狀態(tài) 不進(jìn)入中斷 因?yàn)镴MP 指令執(zhí)行之后才響應(yīng)中斷 所以響應(yīng)中斷時(shí)進(jìn)入堆棧保護(hù)的斷點(diǎn)地址仍是JMP 指令的地址 故中斷返回前應(yīng)修改返回地址 以便返回后跳過該指令 執(zhí)行JMP 指令的下一條指令 JMP 指令是近跳轉(zhuǎn)的2字節(jié)指令 指令的機(jī)器碼為EBFEH 故修改返址是將返回地址加2 其程序如下 stacksegmentstack stack dw32dup 0 stackendsdatasegmentDA1DB WAITINTERRUPT 0AH 0DH DA2DB INTERRUPTPROCESSING 0AH 0DH DA3DB PROGRAMTERMINATEDNORMALLY 0AH 0D

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論