用彙編實現8259中斷實驗

2021-10-05 21:45:26 字數 3725 閱讀 4628

網課划水倆月不知悔改就是我本人了

問了班級大佬才弄明白一點的**和使用方法。

nout  equ   8000h            		; 數碼管輸出位址

icw1 equ 00010011b ; 單片8259, 上公升沿中斷, 要寫icw4

icw2 equ 01100000b ; 中斷號為60h

icw4 equ 00011001b ; 工作在8086/88 方式

ocw1 equ 10111110b ; 中斷遮蔽字,只響應int0 int6 中斷

cs8259a equ 09000h ; 8259位址

cs8259b equ 09002h

data segment

cnt db 0

data ends

code segment 'code'

assume cs:code,ds:data,es:data

start: mov ax,data

mov ds,ax

mov es,ax

climov ax,0

mov ds,ax; 00000~003ffh

mov si, icw2*4

lea ax, int0 ;中斷服務程式位址

mov [si],ax

mov ax,cs

mov [si+2],ax

;add icw2,6h ;初始化int1

mov si, 66h*4

lea ax, int1

mov [si],ax

mov ax,cs

mov [si+2],ax

mov al, icw1;初始化8259

mov dx, cs8259a

out dx,al

mov al,icw2; 中斷向量

mov dx,cs8259b

out dx,al

mov al, icw4; 00011011 icw4

out dx,al

mov dx,cs8259b

mov al,ocw1;中斷遮蔽字

out dx,al

mov dx,nout

mov al,cnt

out dx,al

sti

li: nop

jmp li

;中斷服務程式

int0 proc

cliinc cnt

cmp cnt,10h

jnz int_next

mov cnt,0

int_next:mov al, cnt

mov dx,nout

out dx,al

mov dx,cs8259a ;非自動結束方式,傳送結束eoi命令

mov al,20h

out dx,al

stiiret

int0 endp

int1 proc

cliadd cnt,10h

cmp cnt,90h

jnz int_next1

mov cnt,0h

int_next1:mov al, cnt

mov dx,nout

out dx,al

mov dx,cs8259a ;非自動結束方式,傳送結束eoi命令

mov al,20h

out dx,al

stiiret

int1 endp

code ends

end start

nout  equ   8000h            		; 數碼管輸出位址

icw1 equ 00010011b ; 單片8259, 上公升沿中斷, 要寫icw4

icw2 equ 01100000b ; 中斷號為60h

icw4 equ 00011001b ; 工作在8086/88 方式

ocw1 equ 10111110b ; 中斷遮蔽字,只響應int0 int6中斷

cs8259a equ 09000h ; 8259位址

cs8259b equ 09002h

data segment

cnt db 0

data ends

code segment 'code'

assume cs:code,ds:data,es:data

start: mov ax,data

mov ds,ax

mov es,ax

climov ax,0

mov ds,ax; 00000~003ffh

mov si, icw2*4

lea ax, int0 ;中斷服務程式位址

mov [si],ax

mov ax,cs

mov [si+2],ax

;add icw2,6h ;初始化int1

mov si, 66h*4

lea ax, int1

mov [si],ax

mov ax,cs

mov [si+2],ax

mov al, icw1;初始化8259

mov dx, cs8259a

out dx,al

mov al,icw2; 中斷向量

mov dx,cs8259b

out dx,al

mov al, icw4; 00011011 icw4

out dx,al

mov dx,cs8259b

mov al,ocw1;中斷遮蔽字

out dx,al

mov dx,nout

mov al,cnt

out dx,al

sti

li: nop

jmp li

;中斷服務程式

int0 proc

go0:

add cnt,10h

mov al, cnt

mov dx,nout

out dx,al

stimov cx,10000 ;延時

loop $

jmp go0

mov dx,cs8259a ;非自動結束方式,傳送結束eoi命令

mov al,20h

out dx,al

stiiret

int0 endp

int1 proc

go1:

inc cnt

cmp cnt,10h

jnz int_next

mov cnt,0

int_next:

mov al, cnt

mov dx,nout

out dx,al

stimov cx,10000 ;延時

loop $

jmp go1

mov dx,cs8259a ;非自動結束方式,傳送結束eoi命令

mov al,20h

out dx,al

stiiret

int1 endp

code ends

end start

8259中斷實驗

利用系統匯流排上中斷請求訊號pci intr,設計乙個單中斷應用。使用單次脈衝模擬中斷產生。編寫中斷處理程式,在顯示器螢幕上顯示乙個字元 9 實驗程式清單 intr ivadd equ 003ch intr對應的中斷向量位址 stack1 segment stack dw 256 dup stack...

8086彙編學習筆記9 中斷

中斷訊號可以來自cpu內部或外部。一.8086cpu內部中斷訊號有 1 除法錯誤 2 單步執行 3 執行into指令 4 執行int指令 1.中斷碼 8086用乙個位元組來描述中斷碼,可以表示256中不同的中斷資訊。除法錯誤中斷碼為0 單步執行中斷碼為1 執行into指令中斷碼為4 執行int n指...

8086彙編學習筆記9 中斷

中斷訊號可以來自cpu內部或外部。一.8086cpu內部中斷訊號有 1 除法錯誤 2 單步執行 3 執行into指令 4 執行int指令 1.中斷碼 8086用乙個位元組來描述中斷碼,可以表示256中不同的中斷資訊。除法錯誤中斷碼為0 單步執行中斷碼為1 執行into指令中斷碼為4 執行int n指...