<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 80X86中斷系統 - 能夠處理256個中斷 - 用中斷向量號0~255區別 - 可屏蔽中斷還需要借助專用中斷控制器Intel 8259A實現優先權管理 ### 1、中斷的分類 中斷可以分為內部中斷和外部中斷。 (1)內部中斷 - 除法錯中斷 - 指令中斷 - 溢出中斷 - 單步中斷 - 斷點中斷 (2)外部中斷 - 非屏蔽中斷 - 可屏蔽中斷 如果覺得上面的分類太抽象,那么下面的圖會給你直觀的印象。 [![中斷框圖](https://box.kancloud.cn/2016-02-29_56d3a8f81dbd8.jpg "中斷框圖")](http://img.blog.csdn.net/20160101224459374) 通過這張圖,我們可以明白,內部中斷是在處理器內部產生。外部中斷是通過兩個信號線(NMI和INTR)引入處理器內部的。 ### 2.內部中斷 ### (1)除法錯中斷 在執行除法指令時,若除數為0或商超過了寄存器所能表達的范圍,則產生一個向量號為0的內部中斷,稱為除法錯中斷。 例如: mov bl,0 idiv bl ;除數BL=0,產生除法錯中斷 再比如: mov ax,200h mov bl,1 div bl ;商=200H,不能用AL表達,產生除法錯中斷 ### (2)指令中斷 在執行中斷調用指令INT n時產生的一個向量號為n(0 ~ 255)的內部中斷,稱為指令中斷。 ### (3)溢出中斷 在執行溢出中斷指令INTO時,若溢出標志OF為1,則產生一個向量號為4的內部中斷,被稱為溢出中斷。 ### (4)單步中斷 CPU在執行完一條指令之后,如果檢測到標志寄存器的TF位為1,則產生單步中斷,單步中斷的向量號為1. ### (5)斷點中斷 主要用在程序調試中,向量號為3,利用“int3(指令機器碼為0xcc)”這條指令設置斷點,目的是顯示斷點前程序的執行結果。 **注意:內部中斷不受標志寄存器IF位的影響。** ### 3.外部中斷 ### (1)非屏蔽中斷 通過非屏蔽中斷請求信號向微處理器提出的中斷請求,微處理器無法禁止,將在當前指令執行結束予以響應,這個中斷被稱為非屏蔽中斷。 非屏蔽中斷的向量號為2,非屏蔽中斷請求信號為NMI 非屏蔽中斷主要用于處理系統的意外或故障。例如:電源掉電前的數據保護,存儲器讀寫錯誤的處理。 ### (2)可屏蔽中斷 通過INTR引腳引入CPU,只有當中斷允許標志位IF=1時,才能被CPU響應。通過8259A,一個系統中可有多個可屏蔽中斷。 ### 4.實模式下的中斷向量表 ### (1)中斷向量 中斷向量就是中斷服務程序的入口地址。它有兩部分組成: - 中斷服務程序所在段的段基址(2個字節) - 中斷服務程序入口的偏移地址(2個字節) ### (2)中斷向量表 每個中斷向量占4個字節,256種中斷向量總共占用1024字節。在8086系統中,所有的中斷向量按類型碼存放于內存的最低地址(00000H~003FFH)的1K單元中。存放中斷向量的這1K單元稱為中斷向量表。 **中斷向量在中斷向量表中的位置=中斷類型號×4** **N*4的字單元存放偏移地址;** **N*4+2的字單元存放段基址。** ### 5.中斷類型號的獲取 (1)對于除法出錯,單步中斷,不可屏蔽中斷NMI,斷點中斷和溢出中斷,CPU分別自動提供中斷類型號0~4。 (2)對于用戶自己確定的軟件中斷INT n,類型號由n決定。 (3)對外部可屏蔽中斷INTR,CPU從可編程中斷控制器8259A中獲得中斷類型號。 說明: 8086有兩個引腳可以接收外部的中斷請求:INTR和NMI - 當NMI(非屏蔽中斷請求)引腳上出現上升沿信號時,CPU立即無條件(不執行中斷響應周期,不受標志寄存器IF位的影響)地轉入"2號中斷處理程序"。 - 當INTR(可屏蔽中斷請求)引腳上出現高電平信號時,若IF=0,CPU不響應中斷請求。若IF=1,CPU響應中斷請求。CPU響應中斷時,首先執行"中斷響應周期",以便從中斷控制器8259獲得中斷類型碼,然后根據中斷類型碼轉入相應的中斷處理程序。 中斷響應周期由兩個總線周期構成 1.第一個總線周期 CPU向外設發出一個低電平的中斷應答信號INTA*,表示已經接受申請,要求外設傳送中斷向量號 2.第二個總線周期 外設傳送中斷向量號,CPU在T4的下降沿采樣數據總線,讀入外設傳送來的中斷向量號(如下圖) [![總線周期](https://box.kancloud.cn/2016-02-29_56d3a8f83c61c.jpg "總線周期")](http://img.blog.csdn.net/20160101224502851) ### 6.中斷過程 (1)中斷請求 中斷源向CPU發出請求中斷信號。中斷信號將被鎖存,直到CPU響應中斷后,中斷請求信號才被清除。 (2)中斷響應 CPU在執行每條指令的最后一個時鐘周期檢測中斷請求信號。若發現中斷請求信號有效,在允許中斷的條件下,CPU響應中斷。 響應中斷的過程可以總結為: - 取得中斷類型碼N; - pushf - TF=0,IF=0 - push CS - push IP - IP=N*4, CS=N*4+2,;轉中斷服務程序 ### 7.中斷處理程序和iret指令 中斷處理程序的編寫方法和子程序比較相似,下面是常規的步驟: (1)保存用到的寄存器 (2)處理中斷 注意:由于IF標志被設置為0,在中斷處理中,處理器將不再響應硬件中斷。如果希望更高優先級的中斷嵌套,可以在編寫中斷處理程序時,適時用sti指令開放中斷。 (3)恢復用到的寄存器 (4)用iret指令返回 iret指令的功能可以用匯編語法描述為: pop IP pop CS popf 需要說明的是:中斷向量表的建立和初始化工作是由BIOS在計算機啟動時完成的。BIOS為每個中斷號填寫入口地址,因為它不知道多數中斷處理程序的位置,所以一律將它們指向同一個入口地址,在那里只有一條指令:iret. 也就是說,當這些中斷發生時,只做一件事情——立即返回。當計算機啟動后,操作系統和用戶程序再根據自己的需要,修改某些中斷的入口地址,使它指向自己的代碼。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看