8086彙編0號中斷處理程式

2021-07-25 05:07:25 字數 2511 閱讀 1740

1.中斷的基本概念

中斷是指在計算機執行期間,cpu收到某個訊號(來自軟體或硬體),暫時儲存正在執行的程式的上下文,轉而去執行相應的中斷處理程式.

2.8086cpu內部有內部有下面的情況發生時,將產生相應的中斷資訊.

3.中斷向量表

cpu用8位的中斷碼通過中斷向量表找到相應的中斷處理程式的入口位址,簡單的來說,就是乙個中斷碼和中斷處理程式入口位址的對映表:

中斷碼中斷處理程式的入口位址

00號中斷處理程式的位址

11號中斷處理程式的位址

……..

中斷向量表在記憶體中存放,記憶體0000:0000到0000:03ff的1024個單元中存放中斷向量表.(8086規定).對於8086乙個表項佔32位,低16位表示的是偏移位址,高16位表示段位址.

比如說,產生中斷3,8086就會在上圖的記憶體區域的0000:0009~0000:000a處取得3號中斷處理程式的偏移位址是0008,000a:000b處取段位址為0070,計算的得到中斷程式的入口位址為0070:0008=00708h,cpu就會去執行00708處的指令,當然,我們要編寫自己的中斷處理程式,就需要把自己的中斷處理程式放在記憶體的某個地方,然後修改中斷向量表,當發生相應的中斷時,就會執行使用者自己的中斷處理程式;

中斷處理程式存在哪片記憶體空間

前面講到記憶體0000:0000-0000:03ff,大小為1kb的空間是8086系統用來存放中斷向量表的地方,8086支援256個中斷,但是,實際上,系統中要處理的中斷遠沒有256個,所以,在中斷向量表中,很多單元是空的。

中斷向量表是pc系統中最重要的記憶體區,只用來存放中斷處理程式的入口位址,dos系統和其它應用不會使用,因此,我們可以用其空閒的記憶體區域存放我們的程式,一般從0000:0200至0000:02ff這256個位元組是空的,作業系統和應用都不會占用.

例子:

0號中斷處理程式:

assume cs:code

code segment

start:

mov ax,cs

mov ds,ax ;源程式的段位址,

mov si,offset do0 ;將中斷處理程式的入口的偏移位址存在si中

mov ax,0

mov es,ax ;目的位置的段位址放在es中

mov di,200h ;目的位置的偏移位址0000:0200處

mov cx,offset do0end-offset do0 ;計算要把多少個位元組拷貝.

cld ; 將df置為0,

rep movsb ;rep movsb 指定把**段do0-do0end這段**拷貝到0000:0200-0000:0200+(do0end-do0)

mov word ptr es:[0*4],200h ;修改偏移位址

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

;段位址

mov ax,4c00h

int 21h

do0:

jmp short do0start ;佔兩個位元組

db "divide error!"

do0start:

mov ax,cs;中斷後cs=0,ip=200h

mov ds,ax

mov si,202h ; 指向db的首位址

mov ax,0b800h

mov es,ax

mov di,12*160+33*2

mov cx,13

s:mov al,[si]

mov es:[di],al

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

inc si

add di,2

loop s

mov ax,4c00h

int 21h

do0end:

nopcode ends

end start

導致中斷函式:

assume cs:code

code segment

start:

mov ax,1000h

mov bh,1

div bh ;產生0號中斷

code ends

endstart

在dosbox中先執行中斷處理程式,相當於把中斷處理函式放到記憶體中,並更新中斷向量表.

中斷觸發函式

assume cs:code

code segment

start:

mov ax,1000h

mov bh,1

div bh

code ends

endstart

執行此程式會觸發0號中斷,執行上面的do0-do0end之間的程式,在終端中間顯示」divide error!」;

執行結果如下:

彙編0號中斷程式模擬

中斷是指cpu停止當前指令,轉而去執行其他指令或 的一種機制,其中中斷的資訊被儲存在中斷向量表中。80x86中斷向量 i o addr int type 16進製制 function 00 03 0 除法溢位中斷 04 07 1 單步 用於debug 08 0b 2 非遮蔽中斷 nmi 0c 0f ...

8086中斷知識以及編寫0號中斷處理程式

int n指令的格式為 int n,n為中斷型別碼 cpu執行int中斷,實際上就相當於引發乙個n號中斷的中斷過程,他的大致執行過程如下 取中斷型別n 標誌暫存器入棧,置if 0,tf 0 為什麼要這一步,後面有解釋 這一步可以模擬為 pushf 標誌暫存器入棧 下面的步驟完成置if和tf push...

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

assume cs codesg codesg segment start mov ax,cs mov ds,ax 程式段位址 mov si,offset div s mov ax,0 mov es,ax mov di,0200h 保持中斷處理程式的記憶體位址 mov cx,offset div o...