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外中断处理内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复