8259中断控制实验

来源:互联网 发布:除了淘宝助理还有什么 编辑:程序博客网 时间:2024/05/03 18:49

这里写图片描述

实验步骤

这里写图片描述

代码清单

;8259单中断应用实验;查看端口资源分配情况,记录实验系统I/O端口始地址INTR_IVADD   EQU   003CH          ;INTR对应的中断矢量地址                           STACK1 SEGMENT STACK        DW 256 DUP(?)STACK1 ENDSDATA 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 ENDSCODE SEGMENT        ASSUME CS:CODE,DS:DATASTART: 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 21HMYISR PROC NEAR                   ;中断处理程序MYISR       PUSH AX       MOV AL,39H       MOV AH,0EH       INT 10H       MOV AL,20H       INT 10HOVER:  MOV AL,20H       OUT 20H,AL              POP AX         IRET       MYISR ENDPCODE ENDS     END START
原创粉丝点击