用汇编实现8259中断实验

前言

网课划水俩月不知悔改就是我本人了
问了班级大佬才弄明白一点的代码和使用方法。

实现分别控制


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
			cli
			mov  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
			cli
			inc 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
			sti
			iret
        int0 endp
	
	    int1 proc
			cli
			add 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
			sti
			iret
        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
			cli
			mov  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
			sti
			mov cx,10000   ;延时
			loop $
			jmp go0
			mov dx,CS8259A  ;非自动结束方式,发送结束EOI命令
			mov al,20h
			out dx,al
			sti
			iret
        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
			sti
			mov cx,10000     ;延时
			loop $
			jmp go1
			mov dx,CS8259A  ;非自动结束方式,发送结束EOI命令
			mov al,20h
			out dx,al
			sti
			iret
        int1 endp

code ends
end start

写在最后

发现老师的课件真的全,但是自己有印象的没有多少,网课何时才能停止划水,,
本文章5月11号之前不允许转载以及抄袭。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值