8086中斷處理過程

當外設向CPU發送可屏蔽中斷請求:

1)8259中斷控制器通過INTR信號線發送高電屏請求信號

2)CPU在每執行一條指令的最後一個時鐘週期時會採樣INTR信號線判斷有無新的中斷請求,如果INTR標誌爲1(也就是有中斷請求)CPU就會首先判斷IF標誌位,如果爲1,CPU就允許中斷響應。IF=0就忽略該中斷。

3)IF=1,CPU通過INTA(這裏表示上劃線,因爲筆者不知道怎麼設置上劃線)信號線向8259發送兩個連續負脈衝的中斷響應信號。第一個信號表示CPU準備好接收中斷類型碼,第二個信號告訴8259中斷控制器發送中斷類型碼。當中斷控制器收到第二個信號時就會通過數據線將中斷類型碼發送給CPU。CPU就憑藉着中斷號從中斷向量表中找到對應的中斷函數地址(中斷向量表是一個結構體數組,其中每個結構體中記錄了CS:IP的值,結構體中低2字節記錄CS段地址,高2字節記錄IP偏移地址)

4)CPU找到中斷函數後就會暫停當前執行中的程序,將新的CS:IP加載到寄存器,跳轉到中斷函數首地址去執行。這個過程中CPU還需要按順序做以下處理:

                         1、將標誌寄存器FR的當前值壓入堆棧

                         2、將標誌寄存器的中斷允許標誌位IF和單步標誌位TF設置爲0。IF=0,是爲了屏蔽其他同級可屏蔽中斷(如果是比

                         當前中斷高級那麼IF=0就失效了);TF=0,爲了避免進入服務函數以單步形式執行(怕影響執行效率)

                         3、保護斷點,將當前CS:IP壓入堆棧保存,以便執行中斷函數後返回

                         4、根據中斷號找到中斷函數首地址,將獲得的CS:IP加載進寄存器

                         5、執行前還要壓入各個寄存器的值進入堆棧,防止中斷程序破壞現場。中斷程序執行完成後再恢復寄存器的值並

                         設置IF=1

                         6、返回斷點,中斷服務結束後最後一條指令是IRET(中斷返回指令),該指令將保存在堆棧中的斷點值和寄存

                         器FR的值彈出堆棧,將CS:IP還原成中斷前的值。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章