王老師要求:仔細跟蹤除錯,在理解整個過程之前,不要進行後面課程的學習。
這個實驗的答案,在文章中都有,每一步的講解,王老師講解的都很詳細到位。需要我們好好理解?。
實驗結果如下,(加了一點顏色?)
中斷:cpu不在接著(剛執行完的程式)向下執行,而去轉去處理這個特殊資訊。
中斷資訊:一種特殊的資訊。要求cpu馬上進行某種處理,並向所要進行的某種處理提供必備的引數的通知資訊。
中斷資訊可以來自於cpu的內部和外部。
當cpu內部發生:
(1)除法錯誤,比如div指令產生了溢位
(2)單步執行;
(3)執行into指令;
(4)執行int指令;
時,將產生相應的中斷資訊。
中斷源:產生中斷資訊的事件,即中斷資訊的**;
中斷型別碼:標識中斷資訊的**;(有8位,可用來標識256種不同的中斷資訊)
例如:除法錯誤的中斷型別碼為 0;
單步執行的中斷型別碼為 1;
執行into指令的中斷型別碼為 4;
中斷處理程式:由我們編寫的,用來處理中斷資訊的程式;一般來說,需要對不同的中斷資訊編寫不同的處理程式。
cpu用8位的中斷型別碼通過中斷向量表找到相應的中斷處理程式的入口位址。
注:中斷向量表必須放在0000:0000~0000:03ff單元種。8086cpu就從這個地方讀取中斷向量表。
中斷向量表中,乙個表項佔兩個字,高位址字存放段位址,低位址字存放偏移位址。
中斷過程:cpu硬體完成中斷處理程式的cs和ip的設定的這一過程;
8086收到中斷資訊後,所引發的中斷過程:
(1)從中斷資訊中取得中斷型別碼;
(2)flag入棧;
(3)設定flag的第8位tf和第9位if的值為0;
(4)cs入棧
(5)ip入棧
(6)由硬體讀取記憶體中4中斷型別碼和4中斷型別碼+2 的兩個字單元中設定中斷處理程式的入口位址cs和ip。
即:(1)取得中斷型別碼n;
(2)pushf
(3)tf=0,if=0
(4)push cs
(5)push ip
(6)(ip)=(n4),(cs)=(n4+2)
中斷處理程式要一直儲存在記憶體某段空間之中。
(因為隨都有可能檢測到中斷資訊。)
iret指令:
pop ip
pop cs
popf
通常和硬體自動完成的中斷過程配合使用。用來恢復中斷處理前的執行狀態。
當發生除法溢位錯誤時,產生中斷型別碼為0的中斷資訊,cpu檢測到這個資訊,然後引發中斷過程,轉去執行0號中斷的中斷處理程式。
0號中斷處理程式的功能是:顯示提示資訊,返回到作業系統中。
分兩部分,乙個是安裝程式段,乙個是0號中斷處理程式段(do0)。
安裝程式段的作用是將do0的資料複製到00:200處,然後設定中斷向量使do0變為0號中斷處理程式。
完整的程式:
assume cs:code
code segment
start:"""
安裝程式段"""
mov ax,cs
mov ds,ax
mov si
,offset do0 ;設定ds:si指向源位址
mov ax,0
mov es,ax
mov di,200h ;設定es:di指向目的位址
mov cx,offset do0end-offset do0
;設定cx為傳輸長度
cld ;設定傳輸方向為正
rep movsb ;開始傳送"""
設定中斷向量"""
mov ax,0
mov es,ax
mov word ptr es:[0*4]
,200h
mov word ptr es:[0*4+2]
,0mov ax,4c00h
int 21h
do0:
jmp short do0start
db "overflow!"
do0start:
mov ax,cs
mov ds,ax
mov si
,202h ;設定ds:si指向字串
mov ax,0b800h
mov es,ax
mov di,12*160+36*2 ;設定es:di指向視訊記憶體的中間位置
mov cx,9 ;設定cx為字串長度
s:mov al,
[si]
mov es:[di]
,alinc si
add di,2
loop s
mov ax,4c00h
int 21h
do0end:nop
code ends
endstart
cpu在執行完一條指令之後,若檢測到flag的tf位為1,則產生單步中斷,引發中斷過程。
如下:(1)取得中斷型別碼1;
(2)flag入棧,tf,if設定為0;
(3)cs,ip入棧
(4)(ip)=(14),(cs)=(14 +2)
單步中斷為debug的實現提供了機制。
在cpu執行入棧或出棧指令時,不會響應中斷。須在入棧和出棧操作完整執行前後,才會響應中斷。
筆記 組合語言 第12章 內中斷
12.0 概述 任何乙個通用的cpu,都具備處理中斷資訊的能力.中斷的意思是指 cpu不再接著 剛執行完的指令 向下執行,而是轉去處理 中斷 這個特殊資訊.中斷資訊可以來自cpu的內部和外部,本章主要討論內中斷.12.1 內中斷的產生 對於8086cpu,當cpu內部有下面情況發生的時候,將產生相應...
組合語言 王爽 12章內中斷
中斷原因 中斷型別碼 除法錯誤 0單步執行 1執行 into 指令 4執行 int 指令,格式為int n n對於 8086pc 機,中斷向量表存放在 0000 0000 0000 03ff 所在的記憶體中,共1000個單元.每個表項占用兩個位元組的大小.高位址字存放段位址,低位址字存放偏移位址.注...
第12章 內中斷
沒想到吧,我又回來做實驗了 mov si,offset do0 設定di si指向源位址 mov ax,0 mov es,ax mov di,200h 設定es di指向目的位址 mov cx,offset do0end offset do0 設定cx為傳輸長度 cld 設定傳輸方向為正 rep m...