中斷體驗 觀察自定義中斷的安裝及觸發

2021-08-01 06:52:25 字數 2363 閱讀 5082

【說明】中斷機制是一種重要的解決問題的手段。針對初學者不能對中斷的相關技術有直觀的認識,特設計了這個學習活動。

【知識準備】中斷向量表;中斷處理過程;中斷安裝程式

【體驗步驟】

步驟1自定義78h號中斷的中斷處理例程,並將其安裝到記憶體中

;檔名: ptest.asm

assume cs:code

code segment

start:mov ax,cs

mov ds,ax

mov ax,0

mov es,ax

;安裝中斷例程

lea si, do_78h

mov di,200h

mov cx,offset do78h_end - offset do_78h

cldrep movsb

;設定中斷向量表

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

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

mov ax,4c00h

int21h ;定義中斷例程:顯示"flying";

do_78h: jmp short istart

msg db 'flying!-piao guo....'

istart:

push ds

push es

push si

push di

push ax

push cx

mov ax, cs

mov ds, ax

mov si, 202h

mov ax,0b800h

mov es,ax

mov di,160

*24 mov ah, 11001111b ;閃爍紅底加亮白字

mov cx,offset istart - offset msg

s: mov al,[si]

mov es:[di],ax ;字元與屬性一起移入

inc si

add di,2

loop s

pop cx

pop ax

pop di

pop si

pop es

pop ds

iret

do78h_end:nop

code ends

end start

編譯、連線及執行過程如下:

請說出來:執行以後什麼也看到,程式的作用是什麼?

步驟2程式設計序,觸發中斷78h

;檔名: pa.asm

assume cs:code, ss:stack

stack segment stack

db 16 dup (0)

stack ends

code segment

start: int

78h mov ax,4c00h

int21hcode ends

end start

編譯、連線、執行程式:

請說出:在執行pa時,發生了什麼?為什麼?

步驟3在debug中載入pa.exe並單步執行,觀察暫存器的變化

重點關注:cs、ip,以及標誌暫存器中if的值,如圖,ei(允許)或di(關閉)

一邊觀察,一邊說出執行中涉及的中斷的機制

步驟4在debug中呼叫int 78h

按下面操作工作:

請說出,呼叫int 78時發生了什麼?

步驟5:關閉dosbox,再開啟,不做步驟1,直接從步驟2開始重做上面的工作。

請說出:你看到了什麼?為什麼會是這樣?

在Windows CE增加自定義中斷處理

isq interrupt id 邏輯中斷號 event物件。當中斷發生時,isr 中斷服務例程 返回該中斷號對應的邏輯中斷號,然後盡可能快地返回 隨後ce就set該邏輯中斷號對應的event物件 如果有的話 以喚醒在該event等待的ist 中斷服務執行緒 大部分工作都是由ist來完成。一般來說i...

在Windows CE增加自定義中斷處理

在windows ce增加自定義中斷處理 isq interrupt id 邏輯中斷號 event 物件。當中斷發生時,isr 中斷服務例程 返回該中斷號對應的邏輯中斷號,然後盡可能快地返回 隨後ce就 set該邏輯中斷號對應的 event 物件 如果有的話 以喚醒在該 event 等待的ist 中...

在Windows CE增加自定義中斷處理

基於 s3c2410 windows ce4.2 bsp 是smdk2410 wince 的中斷處理是三個對映關係 isq interrupt id 邏輯中斷號 event 物件。當中斷發生時,isr 中斷服務例程 返回該中斷號對應的邏輯中斷號,然後盡可能快地返回 隨後ce就 set該邏輯中斷號對應...