【說明】中斷機制是一種重要的解決問題的手段。針對初學者不能對中斷的相關技術有直觀的認識,特設計了這個學習活動。
【知識準備】中斷向量表;中斷處理過程;中斷安裝程式
【體驗步驟】
步驟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該邏輯中斷號對應...