8259中断控制实验

这里写图片描述

实验步骤

这里写图片描述

代码清单

;8259单中断应用实验

;查看端口资源分配情况,记录实验系统I/O端口始地址

INTR_IVADD   EQU   003CH          ;INTR对应的中断矢量地址                           
STACK1 SEGMENT STACK
        DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT 
MES      DB   'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
CS_BAK   DW  ?                    ;保存INTR原中断处理程序入口段地址的变量
IP_BAK   DW  ?                    ;保存INTR原中断处理程序入口偏移地址的变量
IM_BAK   DB  ?                    ;保存INTR原中断屏蔽字的变量
DATA ENDS
CODE SEGMENT
        ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
       MOV DS,AX
       MOV DX,OFFSET MES          ;显示退出提示
       MOV AH,09H       
       INT 21H  
       CLI
       MOV AX,0000H               ;替换INTR的中断矢量
       MOV ES,AX
       MOV DI,INTR_IVADD          
       MOV AX,ES:[DI]
       MOV IP_BAK,AX              ;保存INTR原中断处理程序入口偏移地址     
       MOV AX,OFFSET MYISR
       MOV ES:[DI],AX             ;设置当前中断处理程序入口偏移地址
       ADD DI,2
       MOV AX,ES:[DI]
       MOV CS_BAK,AX              ;保存INTR原中断处理程序入口段地址
       MOV AX,SEG MYISR
       MOV ES:[DI],AX             ;设置当前中断处理程序入口段地址    
       IN  AL,21H
       MOV IM_BAK,AL              ;保存INTR原中断屏蔽字
       AND AL,7FH
       OUT 21H,AL
       STI   
WAIT1: MOV AH,1                   ;判断是否有按键按下
       INT 16H
       JZ  WAIT1                  ;无按键则跳回继续等待,有则退出  
QUIT:  CLI
       MOV AX,0000H               ;恢复INTR原中断矢量
       MOV ES,AX
       MOV DI,INTR_IVADD  
       MOV AX,IP_BAK              ;恢复INTR原中断处理程序入口偏移地址
       MOV ES:[DI],AX
       ADD DI,2
       MOV AX,CS_BAK              ;恢复INTR原中断处理程序入口段地址
       MOV ES:[DI],AX
       MOV AL,IM_BAK              ;恢复INTR原中断屏蔽寄存器的屏蔽字
       OUT 21H,AL
       STI
       MOV AX,4C00H               ;返回到DOS
       INT 21H
MYISR PROC NEAR                   ;中断处理程序MYISR
       PUSH AX
       MOV AL,39H
       MOV AH,0EH
       INT 10H
       MOV AL,20H
       INT 10H
OVER:  MOV AL,20H
       OUT 20H,AL       
       POP AX  
       IRET       
MYISR ENDP
CODE ENDS
     END START
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值