筆記 組合語言 第12章 內中斷

2022-03-06 16:43:05 字數 2400 閱讀 8321

12.0 概述

任何乙個通用的cpu,都具備處理中斷資訊的能力.中斷的意思是指:cpu不再接著(剛執行完的指令)向下執行,而是轉去處理"中斷"這個特殊資訊.

中斷資訊可以來自cpu的內部和外部,本章主要討論內中斷.

12.1 內中斷的產生

對於8086cpu,當cpu內部有下面情況發生的時候,將產生相應的中斷資訊:

(1) 除法錯誤,比如執行div指令產生的除法溢位

(2) 單步執行

(3) 執行into指令

(4) 執行int指令

8086cpu使用》中斷型別碼《來標識這四種不同的中斷資訊**(簡稱中斷源),中斷型別碼有乙個位元組(可表示256種型別),上述四種中斷源的型別碼如下:

(1) 除法錯誤:0

(2) 單步執行:1

(3) 執行into指令:4

(4) 執行int n指令:n

12.2 中斷處理程式

cpu收到中斷資訊後,需要對中斷資訊進行處理,不會呼叫中斷處理程式.可以由我們自己編寫,一般來講對不同的中斷資訊需要不同的中斷處理程式.

cpu需要在中斷資訊和中斷處理程式入口位址之間建立聯絡,中斷型別碼的作用就是用來定位中斷處理程式的.

12.3 中斷向量表

中斷向量,指中斷處理程式的入口位址.中斷向量表,就是乙個中斷向量的列表,也就是中斷程式入口位址的列表.

cpu通過8位的中斷型別碼在中斷向量表中找到中斷處理程式的入口位址.

中斷向量表在記憶體中存放,對於8086pc機,指定存放在記憶體位址0處,0000:0000到0000:03ff的1024個單元中存放著中斷向量表.

對於8086cpu,乙個表項佔兩個字,高位址字存放段位址,低位址字存放偏移位址.

12.4 中斷過程

用中斷型別碼找到中斷向量,並用它設定cs和ip,這個工作是由cpu的硬體自動完成的,cpu完成這個工作的過程叫中斷過程.

下面是8086cpu收到中斷資訊後,所引發的中斷過程:

(1) 取得中斷型別碼n

(2) pushf

(3) tf=0,if=0

(4) push cs

(5) push ip

(6) (ip)=n*4,(cs)=(n*4+2)

12.5 中斷處理程式和iret指令

由於cpu可能隨時檢測到中斷資訊,也就是說隨時可能執行中斷處理程式,所以中斷處理程式發布一直儲存在記憶體某段空間中,而中斷向量必須一直存在對應的中斷向量表表項中.

中斷處理程式的編寫方法和子程式比較相似,常規步驟如下:

(10 儲存要用到的暫存器

(2) 處理中斷

(3) 恢復用到的暫存器

(4) 用iret指令返回,iret指令的功能可以用彙編語法描述為:

pop ip

pop cs

popf

iret指令執行後,cpu順到執行中斷處理程式前的執行點繼續執行程式.

12.6 除法錯誤中斷的處理(0號中斷)

顯示提示資訊"divide overflow",然後返回作業系統

12.7 程式設計處理0號中斷

我們需要做的事情:

(1) 編寫可以顯示"overflow"的中斷處理程式:假設為do0

(2) 將do0送入記憶體0000:0200處

(3) 將do0的入口位址0000:0200儲存在中斷向量表0號表項中

回憶一下,我們通過改變ss,sp,來使一段記憶體單元變成棧頂,通過改變cs,ip來使一段記憶體單元被cpu執行,同樣,我們通過改寫中斷向量表,來使一段記憶體成為中斷處理程式.

12.8 安裝

將do0**傳送到0:200處,並設定中斷向量表.

<> 可以利用編譯器計算一段**的長度,如: offset 標號2- offset 標號1 (編譯器可識別表示式)

12.9 do0的編寫

注:do0要顯示的字串"overflow!"也應該放在一段不會被覆蓋的空間中.所以可在do0程式裡定義這個字串資料.

12.10 設定中斷向量

0號表項的位址為0:0,其中0:0字單元存放偏移位址,0:2字單元存放段位址.

12.11 單步中斷

cpu在執行完一條指令後,如果檢測到標誌暫存器tf標誌為1,則產生單步中斷,引發中斷過程,單步中斷的中斷型別碼為1.

例如debug程式中的t命令,就會產生單步中斷,cpu執行完一條指令後,顯示暫存器狀態並等待新命令的輸入.

注:單步中斷處理程式的第一步必將是把tf置為0,否則將陷入無限迴圈中.

12.12 響應中斷的特殊情況

一般情況下,cpu在執行完一條指令後,如果檢測到中斷資訊,就響應中斷,引發中斷過程.可是在某些特殊的情況下不會響應.

如在執行完向ss傳送資料的指令完成之後,即使有中斷發生,也不影響,因為ss:sp聯合完成指向棧頂工作,如果在改變ss時發生中斷而去處理中斷,棧頂資料會不一致.

實驗12 編寫0號中斷處理程式

《組合語言》第12章 內中斷 實驗12

王老師要求 仔細跟蹤除錯,在理解整個過程之前,不要進行後面課程的學習。這個實驗的答案,在文章中都有,每一步的講解,王老師講解的都很詳細到位。需要我們好好理解?實驗結果如下,加了一點顏色?中斷 cpu不在接著 剛執行完的程式 向下執行,而去轉去處理這個特殊資訊。中斷資訊 一種特殊的資訊。要求cpu馬上...

組合語言 王爽 12章內中斷

中斷原因 中斷型別碼 除法錯誤 0單步執行 1執行 into 指令 4執行 int 指令,格式為int n n對於 8086pc 機,中斷向量表存放在 0000 0000 0000 03ff 所在的記憶體中,共1000個單元.每個表項占用兩個位元組的大小.高位址字存放段位址,低位址字存放偏移位址.注...

組合語言 筆記 內中斷

中斷資訊 cpu不再接著向下執行,而是轉去處理這個特殊資訊 cpu內部有下面的情況發生時,將產生相應中斷資訊 8086cpu用稱為中斷型別碼的資料表示中斷資訊 用來處理中斷資訊的程式稱為中斷處理程式 一般來說,需要針對不同的中斷信心編寫不同的處理程式 中斷型別碼的作用就是用來定位中斷處理程式 cpu...