安装一个新的int 9中断例程【在DOS下,按Tab建后改变当前屏幕的显示颜色,其它键照常处理】...

;任务:
; 安装一个新的int 9中断例程
;功能:
; 在DOS下,按Tab建后改变当前屏幕的显示颜色,其它键照常处理

 1 assume cs:code
 2 
 3 stack segment
 4 db 128 dup(0)
 5 stack ends
 6 
 7 code segment
 8 start:
 9 mov ax, stack
10 mov ss, ax
11 mov sp, 128
12 
13 push cs
14 pop ds
15 
16 ;把自己的int9中断例程安装到0:[204h]
17 mov ax, 0
18 mov es, ax
19 mov si, offset int9
20 mov di, 204h
21 mov cx, offset int9end - offset int9
22 cld
23 rep movsb
24 
25 ;将BIOS提供的int9中断例程的入口地址保存到0:[200]
26 push es:[9*4]
27 pop es:[200h]
28 push es:[9*4+2]
29 pop es:[202h]
30 
31 ;设置自己的int9中断例程的入口地址
32 cli    ;设置IF=0 当IF=0时,禁止其它的可屏蔽中断
33 mov word ptr es:[9*4], 204h
34 mov word ptr es:[9*4+2], 0
35 sti     ;设置IF=1, 检测到可屏蔽中断信息时,执行完当前指令后,引发中断过程
36 
37 mov ax, 4c00h
38 int 21h
39 
40 int9:    
41 push ax
42 push bx
43 push cx
44 push es
45 
46 ;从60h端口中得到按键的扫描码
47 in al, 60h
48 
49 ;此中断例程执行时CS=0
50 ;执行BIOS的int9中断例程
51 pushf
52 call dword ptr cs:[200h]
53 
54 ;Tab的扫描码为0fh
55 cmp al, 0fh
56 jne int9ret
57 
58 ;当F1按下时改变屏幕背景颜色
59 mov ax, 0b800h
60 mov es, ax
61 mov bx, 1
62 mov cx, 2000
63 s:
64 inc byte ptr es:[bx]
65 add bx, 2
66 loop s
67 
68 int9ret:
69 pop es
70 pop cx
71 pop bx
72 pop ax
73 iret
74 
75 int9end:
76 nop
77 
78 code ends
79 end start
80 
81  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值