組合語言 內中斷 除法溢位處理

2021-10-11 14:34:54 字數 2267 閱讀 1476

在組合語言中,中斷分為內中斷和外中斷。中斷的意思是指,cpu不再接著(剛執行完的指令)向下執行,而是轉去處理這個特殊資訊。

①除法錯誤(中斷型別碼0)

②單步執行(中斷型別碼1)

③執行into指令(中斷型別碼4)

④執行int指令(該指令的格式為int n,指指令中的n為位元組型立即數,是提供給cpu的中斷型別碼)

cpu在收到中斷資訊後,應該轉去執行該中斷資訊的處理程式。

可見我們的問題是,cpu在收到中斷資訊後,如何根據中斷資訊確定其處理程式的入口:cpu的設計者必須在中斷資訊和其處理程式的入口位址之間建立某種聯絡,使得cpu根據中斷資訊可以找到要執行的處理程式。

中斷向量表,就是中斷處理程式入口位址的列表。8086cpu中斷向量表從0000:0000~0000:03ff處,共1024個單元,256個中斷源(乙個中斷源占用4個位元組)

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

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

由此,我們可以用以上這句話寫出除法溢位引起的中斷:當發生中斷溢位時,將產生中斷型別碼為0的中斷資訊,cpu檢測到這個資訊,引起中斷,然後轉去中斷型別碼0(即實體地址0:000)所對應的中斷向量表中中斷處理程式

接下來就步入今天的正題了。本人今天重新梳理了一下前面的知識,加深課本上這個案例的理解(《組合語言》王爽著 p247)

分析:當發生除法溢位時,產生0號中斷資訊,引發中斷過程

①取得中斷型別碼0;

②標誌暫存器入棧,tf、if設定為0;

③cs、ip入棧;

④(ip)=(04),(cs)=(04+2)

當中斷0發生時,cpu將轉去執行中斷處理過程

①執行處理

②向顯示緩衝區送字串「overflow!」

③返回dos

編寫do0程式,這段程式為發生除法溢位時,顯示「overflow!」

①此段程式存放在0000:0200處

將中斷處理程式do0放到0000:0200後,若要使得除法溢位發生的時候,cpu轉去執行do0,則必須將do0的入口位址,即0000:0200登記在中斷向量表項中。因為除法溢位對應的中斷型別碼為0,它的中斷處理程式的入口位址應該從04位址單元開始存放,段位址存放在04+2字單元中,偏移位址存放在0*4字單元中。也就是說要將do0的段位址0存放在0000:0002字單元中,將偏移位址200h存放在0000:0000字單元中。

**如下:

assume cs:code

code segment

start:mov ax,cs

mov ds,ax

mov si,offset do0

mov ax,0

mov es,ax

mov di,200h

mov cx,offset do0end-offset do0

cldrep movsb

//設定中斷向量

mov ax,0

mov es,ax

mov word ptr es:[0*4],200h

mov word ptr es:[0*4+2],0

//以上設定中斷向量

mov ax,4c00h

int 21h

//以下為do0程式段

do0:jmp short do0start

db "overflow!"

do0start:mov ax,cs

mov ds,ax

mov si,202h

mov ax,0b800h

mov es,ax

mov di,12*160+36*2

mov cx,9

s:mov al,[si]

mov es:[di],al

mov byte ptr es:[di+1],02h

inc si

add di,2

loop s

mov ax,4c00h

int 21h

do0end:nop

code ends

end start

組合語言 內中斷

內中斷 在執行完當前正在執行的指令之後,檢測到從cpu內部發過來的或內部產生的一種特殊資訊,並且可以立即對所接收到的資訊進行處理 中斷資訊可以 於cpu外部和內部 內中斷的產生 1除法錯誤 0 2單步執行 1 3執行into指令 4 into 溢位中斷 4執行int指令,該指令格式 int n 指令...

組合語言 內中斷

中斷的意思是指cpu不在接著 剛執行的指令 向下執行,而是轉去處理這個特殊資訊,而這個特殊的資訊我們可以稱其為中斷資訊。中斷資訊是要求cpu馬上進行某種處理,並向所要進行的該種處理提供了必備的引數的通知資訊。對於8086cpu,當cpu內部有下面的情況發生的時候,將產生響應的中斷資訊。而中斷資訊中必...

組合語言 內中斷

中斷的意思是指cpu不在接著 剛執行的指令 向下執行,而是轉去處理這個特殊資訊,而這個特殊的資訊我們可以稱其為中斷資訊。中斷資訊是要求cpu馬上進行某種處理,並向所要進行的該種處理提供了必備的引數的通知資訊。對於8086cpu,當cpu內部有下面的情況發生的時候,將產生響應的中斷資訊。而中斷資訊中必...