目錄中斷的作用就是暫停當前程式的執行,並轉去執行另外乙個程式,另外個程式執行完後再回來繼續執行當前程式。該過程和call
和return
有點像,不過中斷是由硬體主動產生的。
除法錯誤,比如執行div指令產生的除法溢位 >>> 0
單步執行 >>> 1
執行into指令 >>> 4
執行int指令 >>> n
cpu是根據>>>後面的中斷型別來判斷,觸發內中斷的原因是什麼。這裡特別要注意一下int
指令,該指令的使用形式是int n
,n是自定義的乙個型別。
cpu在收到中斷資訊後,需要跳轉到指定程式處理中斷,那麼如何處理中斷,就應該有我們來編寫。這類用於處理某一種中斷資訊的程式叫做中斷處理程式。比如現在觸發了 中斷型別碼為4的中斷,cpu收到該中斷後,會去中斷向量表內查詢該中斷的處理程式,找到後跳轉到 中斷處理程式的起始位置並執行。
cpu用8位的中斷型別碼通過中斷向量表來查詢相應的中斷處理程式所在的位置。
中斷向量表內存放了256個中斷源對應的中斷處理程式的起始位址,如果把乙個中斷處理程式的位址作為乙個項,總共有256個項,每個項包含兩個位元組(乙個字),字的高位放段,字的低位放偏移量。
中斷向量表放在0000:0000到0000:03ff的1024個單元中。
cpu收到中斷型別碼n
儲存標誌暫存器
將tf和if設定為0(防止後面單步執行的中斷使其陷入死迴圈)
儲存cs和ip
從 0:(n * 4)讀出段位址,再從 0:(n * 4 + 2)獨處偏移位址,然後呼叫對應的中斷處理程式。
前面可以得知,當cpu收到中斷型別碼時,會根據終端型別碼獲取中斷處理程式的起始位址並執行;那麼進入了中斷處理程式該如何跳出中斷呢?這裡並不是簡單的return
即可,這裡需要使用iret
。
iret
這個指令除了繼承return
的pop ip
、pop cs
的功能外,還多執行了一步popf
。可以和中斷過程對應一下~
由於中斷隨時可能發生,所以中斷處理程式、以及它的依賴(最常見的就是一段字串,被覆蓋了)需要在記憶體中常駐。
將中斷處理程式的入口位址設定給中斷向量表
這裡採用offset 起始標號- offset 終點標號就能獲取一段程式的長度,比如
program_start:
mov ax, 1
mov bx, 1001
...mov ax, 4c00h
int 21h
end_program:
nop
上述程式的長度可以通過 offset program_start - offset end_program 來獲得。注意,end_program一定要放在最後乙個有效命令之後(比如這裡多加了個nop),因為offset
表示標號的第乙個指令的起始偏移位址
當tf為1時,執行乙個命令,就會產生乙個單步中斷,單步中斷的型別碼為1。
設定tf為1
執行乙個命令
儲存暫存器,儲存狀態,設定tf、if為0等等
執行中斷程式
恢復暫存器
繼續執行命令——跳到步驟2
(上述的步驟其實就是debug程式的過程:輸入乙個t,將tf設定為1,然後執行命令,然後跳轉到中斷程式輸出暫存器,最後回到debug程式中,等待下乙個指令)首先設定tf為1,然後每執行一次指令,都執行一下 單步中斷的中斷程式。
這裡解釋了為何中斷過程要特別設定tf、if為0,因為如果步設定為0,流程就會如下所示:
設定tf為1
執行乙個命令
儲存暫存器,儲存狀態(假設不設定tf、if為0)
執行中斷程式
所以如果不設定tf、if為0,整個程式就會陷入死迴圈,無法結束。
中斷並不是在任何時刻都能中斷程式的,有的指令執行完後,即便發生中斷,也不會去執行中斷程式。最典型的就是mov ss,xx
,眾所周知mov ss,xx
指令後面盡量要跟上mov sp,xx
,而且在debug裡面mov ss,xx
執行完後直接跳到mov sp, xx
的後面乙個指令,彷彿看不到設定sp暫存器。
有的同學可能想,反正中斷也會儲存cs
、ip
等資料到棧中,最後還會彈出,這應該構不成影響吧?而且最後回到源程式還是能正常的設定sp。
這種想法抱有了一點僥倖心裡,假設此時的ss、sp(原始的,還未設定的)裡面的資料不重要,被覆蓋掉了還好說;如果裡面的資料很重要呢?
這一小節就是解釋這樣一種特殊的情況————並不是所有的中斷都能順利中斷程式的。
第十二章檢測點
彙編學習筆記 第十二章內中斷
任何乙個通用cpu,在執行完當前執行的指令,檢測到從cpu外部傳送過來,或內部傳送過來的一種特殊資訊,並且可以立即對所接收到的訊息進行處理。這個訊息,我們稱為中斷訊息。中斷訊息可以來自cpu的內部和外部,這一章中,我們主要討論來自於cpu 內部 的中斷訊息 8086cpu中發生以下事件,會產生相應的...
第十二章 檔案
文字檔案 文字檔案是一種由若干字元構成的檔案,可以用文字編輯器進行閱讀或編輯。以txt py html等為字尾的檔案都是文字檔案。2.二進位制檔案 二進位制檔案一般是指不能用文字編輯器閱讀或編輯的檔案。以 mp4 png等為字尾的檔案都是二進位制檔案,如果想要開啟或修改這些檔案,必須通過特定軟體進行...
第十二章 dp
動態規劃策略 將原始問題拆分為多個子問題,將子問題結果記錄,方便復用子問題的解 遞迴 記憶化 遞推 是動態規劃的一體兩面,本質都是一樣的 遞推減少了呼叫次數,空間上還能優化,一般選擇遞推方式 遞迴 記憶化 int memo maxn 將o 2 n o n intfibonacci int n 遞推 ...