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

下載本文檔

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

文檔簡介

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

評論

0/150

提交評論