【微机原理与接口技术】实验3 中断

IRQ10的中断程序

实验目的

掌握PC机中断处理系统的基本原理,学会编写中断服务程序。

实验内容

连接好线路后,直接用手动产生单脉冲作为中断请求信号要求每按一次开关产生一次中断,在屏幕上显示一次“IRQ10”,中断10次后退出程序。

源程序

DATA SEGMENT
MESS DB 'IRQ10!',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA
START:
    MOV AX, CS
    MOV DS, AX
    MOV DX, OFFSET INT10
    MOV AX,2572H
   ; INT 21H                        ;设置IRQ2的中断向量
   ; IN AL,21H                      ;读中断屏蔽控制器
    ;AND AL,0FBH
   ; OUT 21H, AL                    ;开放IRQ2中断,IMR
    
    INT 21H  
    IN AL,0A1H                     
    AND AL,0FBH
    OUT 0A1H, AL                   ;开放IRO10中断
    
    MOV CX,10                      ;记中断循环次数为10次
    STI
LL: 
    JMP LL                         ;等待脉冲
INT10:                              ;中断服务程序
    MOV AX, DATA
    MOV DS, AX
    MOV DX, OFFSET MESS 
    MOV AH,09                      ;显示每次中断提示信息
    INT 21H
    MOV AL,20H
    OUT 20H, AL                    ;发出EOI结束命令
    OUT 0A0H,AL 
    LOOP NEXT
;    IN AL,21H
;    OR AL,04H                      ;关闭IRQ2中断
;    OUT 21H, AL
    
    IN AL,0A1H                     ;关闭IRQ10中断
    OR AL,04H
    OUT 0A1H,AL
    
    STI                            ;置中断标志位
    MOV AH,4CH                     ;返回DOS
    INT 21H
NEXT: IRET
    CODE ENDS
END START

实验结果

编译以及运行成功后,手动产生单脉冲,每按下一次按键,就在屏幕上显示“IR10”,中断10次,即按下10次按键后,程序结束。

IRQ3和IRQ10的中断嵌套程序

实验内容

手动产生单脉冲作为中断请求信号,进行IRQ10或者IRQ3中断操作,在屏幕显示中断信息时,按下另一个脉冲按钮,进行中断,屏幕上中断信息会被打断,进而显示另一个中断类型的中断信息。

源代码

DATA SEGMENT
MESS DB 'IRQ10!',0DH,0AH,'$'
MEES DB 'IRQ3!',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA
.386
START:
    MOV AX, CS
    MOV DS, AX
    MOV DX, OFFSET INT10
    MOV AX,2572H
    INT 21H   ;设置IRQ10的中断向量

    MOV DX, OFFSET INT3
    MOV AX,250BH
    INT 21H   ;设置IRQ10的中断向量
  
    IN AL,21H   ;读中断屏蔽控制器
    AND AL,0F3H   ;开放IRQ2 IRQ3中断 
    OUT 21H, AL

    IN AL,0A1H   ;读中断屏蔽控制器
    AND AL,0FBH   ;开放IRQ10中断
    OUT 0A1H, AL
   ; MOV CX,10  ;记中断循环次数为10次
    STI
    
LL:  JMP LL
INT10:        ;中断服务程序
  PUSHAD
  PUSHFD
  
    MOV CX,10  ;记中断循环次数为10次
    MOV AX, DATA
    MOV DS, AX
    CC:   MOV DX, OFFSET MESS 
    MOV AH,09    ;显示每次中断提示信息
    INT 21H
    CALL DELAY
    LOOP CC
       MOV AL,20H
    OUT 20H, AL   ;发出EOI结束命令
    MOV AL,0A0H
    OUT 0A0H, AL   ;发出EOI结束命令
 
   IN AL,21H
   OR AL,04H    ;关闭IRQ2中断
   OUT 21H, AL
    OUT 0A1H,AL
    POPFD
    POPAD

    STI      ;置中断标志位
    IRET
    MOV AH,4CH    ;返回DOS
    INT 21H
  

INT3:        ;中断服务程序
 PUSHAD
  PUSHFD
MOV CX,10
    MOV AX, DATA
    MOV DS, AX
 bb:   MOV DX, OFFSET MEES 
    MOV AH,09    ;显示每次中断提示信息
    INT 21H
    CALL DELAY
    LOOP BB
    
    MOV AL,20H
    OUT 20H, AL   ;发出EOI结束命令
   
   IN AL,21H
   OR AL,08H    ;关闭IRQ3中断
   OUT 21H, AL
   POPFD
    POPAD
    STI      ;置中断标志位
      IRET
    MOV AH,4CH    ;返回DOS
    INT 21H


DELAY  PROC  NEAR         ;延时子程序
PUSH BX
PUSH CX
        MOV BX,100H
lll:   MOV CX,0
llLL:    LOOP llLL
        DEC BX
        JNE lll
        POP CX
        POP BX
        RET
DELAY ENDP
 
    CODE ENDS
    END START

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值