汇编语言中的外中断——键盘事件

汇编语言中的外中断和内中断差不多

1、取中断类型码n

2、标致寄存器入栈,IF=0,TF=0

2、CS、IP入栈

3、(IP)=(n*4),(CS)=(n*4+2)

但是外中断和内中断的中断类型码的来源不同,所以第一步肯定是不一样的,其他相同

下面来讲一下键盘事件下的处理方式

只要有键盘事件发生,就会触发int 9,这个int 9是硬件扫描过程,其实就是CPU对按键的IO口进行扫描的过程

这里问题就出现了,因为键盘事件发生必定会引发int 9,所以如果要对按按键后进行处理的话,需要将中断程序写在int 9中,但是如果需要扫描键盘的按键,就必须要调用BIOS提供的int 9

解决这种冲突的办法就是先将BIOS提供的int 9的IP和CS储存起来,用模拟int指令的方式来调用原来的int 9,当然新建的int 9需要将其入口的IP和CS放到向量表中

任务:显示a~z,按下ESC结束

代码:

assume cs:code

data segment                                                                ;储存原int9的IP和CS
	dw 0, 0
data ends

code segment

	start:								
										mov ax, 0                           ;将原int9的IP和CS放到data空间中
										mov ds, ax
										mov ax, data
										mov es, ax
										push ds:[9*4]
										pop es:[0]
										push ds:[9*4 + 2]
										pop es:[2]
										
										mov ax, 0                           ;将新的int9中断的IP,CS写入中断向量表中
										mov ds, ax
										mov word ptr ds:[9*4], offset do9h
										mov word ptr ds:[9*4 + 2], cs
										
										mov ax, 0B800H
										mov ds, ax
										mov al, 'a'
										mov cl, 2
								s:		mov ds:[10*160 + 8*2], al
										mov byte ptr ds:[10*160 + 8*2 + 1], cl
										
										call delay                     
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值