愛悠閑 > 端口與中斷的學習,安裝新的int9中斷例程

端口與中斷的學習,安裝新的int9中斷例程

分類: 匯編語言  |  作者: lovesqi 相關  |  發布日期 : 2014-07-17  |  熱度 : 476°
總結:
1.外設的輸入送入的是端口,端口通過芯片向cpu發生中斷請求,當cpu的 (IF)=1時,表示不屏蔽中斷請求,這時候就響應了端口的中斷,從而執行中斷向量表中的ip=(n*4) cs=(n*4+2)的入口 從而執行中斷例程.
2.執行中斷例程的時候要做幾個工作
	(1) 取中斷的類型碼
	(2) 標寄存器入棧,IF TF 設置為0  ;避免死循環中斷的第一個語句
	(3)CS IP 入棧
	(4)執行 (IP) = (n*4) ,CS=(n*4+2) 的入口地址程序由此專區執行中斷處理程序
3. Cpu對外部的設備通常的處理方法,
	(1)從外設的輸入送入端口
	(2)向CPU發出中斷請求
	(3)如果IF為1 則 CPU執行完當前指令后響應中斷,執行響應的中斷例程
	(4)可在中斷例程中實現對外設備輸入的相關處理
所以:中斷 和端口 就是Cpu處理外設進行I/O的基礎


assume cs:code,ss:stack
stack segment
	db 128 dup (0)
stack ends
code segment
start:	;設置棧頂
	mov ax,stack
	mov ss,ax
	mov sp,128
	;安裝int9中斷例程
	mov ax,cs
	mov ds,ax
	mov si,offset int9			;開始地址
	mov ax,0
	mov es,ax
	mov di,204H				;目的地址
	mov cx,offset int9end-offset int9	;長度
	cld					;正方向
	rep movsb	
	;保存中斷向量表原int9的入口地址
	push es:[9*4]
	pop es:[200H]			;IP保存在0:200H
	push es:[9*4+2]
	pop es:[202H]			;CS保存在0:202H
	;修改中斷向量表int9入口地址
	cli					;設置 if為0 屏蔽中斷
	mov word ptr es:[9*4],204H	;修改IP
	mov word ptr es:[9*4+2],0		;修改CS
	sti					;設置 if為1 解除屏蔽中斷
	mov cx,120
lp:     mov ah,0    				;進行120次讀取BIOS鍵盤緩沖區的操作,
        int 16h     				;以輔助讀者在程序運行時方便進行相關的按鍵操作。
        loop lp
	mov ax,4c00h
	int 21h
int9:	push ax
	push es
	push bx
	push cx				;保存寄存器中的值
	in al,60H				;讀取鍵盤端口的數據
	pushf
	call dword ptr cs:[200H]
	cmp al,9EH
	jne s0					;不相等就跳轉出
	mov ax,0B800H
	mov es,ax
	mov bx,0
	mov cx,2000
s:	mov byte ptr es:[bx],'a'
	add bx,2
	loop s
s0:	pop cx					;恢復原寄存器中的值
	pop bx
	pop es
	pop ax
	iret
int9end:
	nop
code ends
end start
	
	


快乐彩中奖说明