Codendless 2014-12-29 14:03
浏览 1284
已结题

8259A中断控制器的应用,帮我看一下代码有问题吗,还有硬件应该怎么连线

实验内容
用8259A的输出作为中断请求信号使8259A产生中断,进入中断后显示一个字符串。中断请求通过8259的IRQ3端输入,中断源要求是8253定时器输出的脉冲,并把8253的OUT0和总线槽IRQ3连接好.
编写程序,要求每次主机响应外部中断IRQ3时,显示字符串“THIS IS A 8259A INTERRUPT!”(或其它串),中断十次后,程序退出。

data segment
io8253a equ 280h
io8253b equ 281h
io8253c equ 283h

mess db 'THIS IS A 8259A INTERRUPT!',0dh,0ah,'$'

data ends
code segment
assume cs:code,ds:data
start:

mov ax,cs
mov ds,ax
;此处输入代码段代码

       mov dx,io8253c         ;向8253写控制字
        mov al,36h               ;使0通道为工作方式3
        out dx,al
        mov ax,1000          ;写入循环计数初值1000
        mov dx,io8253a
        out dx,al                ;先写入低字节
        mov al,ah
        out dx,al                ;后写入高字节


 mov dx,offset int3  ;设置0BH号中断向量
  mov ax,250bh
  int 21h


    cli                ;关中断
    in al,21h          ;读中断屏蔽寄存器
    and al,0f7h             
    out 21h,al             ;写IMR,开放IRQ3中断
    mov cx,10               ;记中断循环次数为10次
    sti                    ;开中断

ll: jmp ll

int3 proc ;中断服务程序
mov ax,data
mov ds,ax
mov dx,offset mess
mov ah,09 ;显示每次中断的提示信息
int 21h
mov al,20h ;发出EOI结束中断(写入ocw2)
out 20h,al

    sub cx,1      ;计数器减1

    jnz next       ;转去执行中断返回       

    in al,21h
    or al,08h                ;关闭IRQ3中断
    out 21h,al
    sti                     ;开中断


MOV AH,4CH
INT 21H

next: iret
int3 endp

CODE ENDS
END START

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
    • ¥15 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮