概述
8086外中断处理
机理类似于内中断,8086外中断针对于CPU外部
1、可屏蔽中断
依据对 IF 不同设置,cpu检测到外中断信息,判定IF = 1,cpu在执行完当前指令后响应外中断,引发中断过程,IF = 0,则不响应此中断
设置IF指令:sti---->IF = 1;cli---->IF = 0
取得中断类型码
pushf IF = 0 TF = 0
push cs
push ip
( IP ) = ( nx4 ) ( CS ) = ( nx4+2 )
2、不可屏蔽中断
cpu必须响应,中断类型码固定为2
pushf IF = 0 TF = 0
push cs
push ip
( IP ) = ( 8h ) ( CS ) = ( 0Ah )
3、PC机键盘外中断处理
扫描码,键开关扫描,通码,按下键产生的扫描码,断码,松开键产生的扫描码
断码 = 通码 + 80h
引发9号中断,键盘输入到达60h端口,端口向cpu发出中断类型码为9的可屏蔽中断信息(9x4 9x4+2)
in al,60H
BIOS键盘缓冲区,用于存放 int 9 中断例程所接受键盘输入
一个键盘输入用一个字节存放,高字节存放扫描码,低字节存放字符码
①读取60H端口扫描码
②如果是字符键的扫描码,将扫描码与对应ASCII放入键盘缓冲区;如果是控制键,shift则将其转变状态字节(子单元)
③对键盘系统响应
ESC扫描码改变显示颜色后返回
assume cs:code stack segment db 128 dup (0) stack ends data segment dw 0,0 data ends code segment start: mov ax,stack mov ss,ax mov sp,128 ;ss:sp指向栈顶 mov ax,data mov ds,ax ;ds--->data段 mov ax,0 mov es,ax ;es--->中断安装区段 push es:[9*4] pop ds:[0] push es:[9*4+2] pop ds:[2] ;int 9 中断例程入口地址保存在ds:0---ds:2单元 mov word ptr es:[9*4],offset int9 mov es:[9*4+2],cs ;设置新的int 9 中断例程入口 mov ax,0b800h mov es,ax mov ah,'a' s: mov es:[160*12+40*2],ah ;在es:[160*12+40*2]显示a call delay ;延迟 inc ah cmp ah,'z' jna s mov ax,0 mov es,ax push ds:[0] pop es:[9*4] push ds:[2] pop es:[9*4+2] mov ax,4c00h int 21h delay: push ax ;循环延迟 push dx mov dx,1000h mov ax,0 s1: sub ax,1 sbb dx,0 cmp ax,0 jne s1 cmp dx,0 jne s1 pop dx pop ax ret ;================================================ int9: push ax push bx push es ;ax,bx,es入栈 in al,60h ;读60h键盘地址端口 pushf ;标志寄存器入栈 pop bx and bh,11111100b;设置TF = 0和IF = 0,分别为标志寄存器第八、九位 push bx popf call dword ptr ds:[0] cmp al,1 jne int9ret mov ax,0b800h ;显示段 mov es,ax inc byte ptr es:[160*12+40*2+1] ;显示字节 int9ret:pop es pop bx pop ax ;ax,bx,es出栈 iret ;cs:ip出栈返回 code ends end start
最后
以上就是彪壮鲜花为你收集整理的8086外中断处理8086外中断处理的全部内容,希望文章能够帮你解决8086外中断处理8086外中断处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复