|
程序源碼如下:
- .MODEL SMALL
- .8086
- .stack
- .data
- LED byte 00000001B
- .code
- start:
- cli
- mov ax,0 ; init interrupt vector TABLE
- mov ds,ax
- mov si,0
- mov cx,80H
- mov ax,offset intx
- mov bx,seg intx
- l: mov [si],ax
- mov [si+2],bx
- add si,4
- loop l
- mov si,60h*4 ; init INT1 interrupt vector
- mov ax,offset int0
- mov [si],ax
- mov ax,seg int0
- mov [si+2],ax
- mov ax,@data
- mov ds,ax
- mov dx,206h ; init 8255
- mov al,10000000b
- out dx,al
- JMP $+2
- mov al,LED
- mov dx,200h
- out dx,al
- JMP $+2
- mov al,00010011b ; init 8259
- mov dx,210h
- out dx,al ; ICW1
- JMP $+2
- mov al,60h
- mov dx,212h
- out dx,al ; ICW2
- JMP $+2
- mov ax,00000001h
- out dx,al ; ICW4
- JMP $+2
- mov ax,0
- out dx,al ; OCW1
- JMP $+2
- sti
- jmp $
- int0 proc
- rol LED, 1
- mov al, LED
- MOV dx, 200h
- out dx, al
- jmp $+2
- mov al,20h
- mov dx,210h
- out dx,al
- jmp $+2
- iret
- int0 endp
- intx proc
- ror LED, 1
- mov al, LED
- MOV dx, 200h
- out dx, al
- jmp $+2
- mov al,20h
- mov dx,210h
- out dx,al
- jmp $+2
- iret
- intx endp
- END start
復(fù)制代碼
對于8259A的仿真我倒是做成了,可是成功的很郁悶,其實大家很多做的就差最后一點了。
1.首先原來軟件的8259改成8259A(加幾個字符)大家應(yīng)該都知道,我不說這個了。
2.經(jīng)過反復(fù)的實驗,我發(fā)現(xiàn)雖然仿真的時候看到8259A在第二個INTA返回給8086的中斷號是對的,但是實際上到了8086那里這個中斷號就變了,而且好像變成隨機的了。因此,如果你只有一個中斷,那你就把整個中斷向量表的所有表項全部填上該中斷處理程序的入口地址,你就會發(fā)現(xiàn),當(dāng)中斷來的時候,中斷處理程序被執(zhí)行了,當(dāng)然前提是你的程序沒有錯誤。
我把我做的給大家做示范吧,不過大家注意修改一下“Code Generation Tool “ 中的設(shè)置
8259A仿真實例所有資料下載:
base8259.rar
(39.25 KB, 下載次數(shù): 113)
2016-9-4 22:43 上傳
點擊文件名下載附件
|
|