汇编网首页登录博客注册
hky987654321的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
好友圈
文章收藏
友情链接

[2013-09-07 22:07] 实验15

;程序名称:p15
;任务:安装一个新的int 9中断例程,在DOS下,按下"A"键后,除非不再松开,如果松开,就显示满屏幕的"A",其它键照常处理。

assume cs:code

stack segment
  db 128 dup (0)
stack ends

code segment

start: mov ax,stack
mov ss,ax
mov sp,128                   ;设置栈段
                               
push cs
pop ds                       ;源的段地址
                               
mov ax,0
mov es,ax                    ;目标的段地址
                               
mov si,offset int9           ;源的偏移地址
mov di,204h                  ;目标的偏移地址
mov cx,offset int9end - offset int9    

cld                          ;正向传递
rep movsb                    ;执行从源向目标转移代码字节
                               
push es:[9*4]                            
pop es:[200h]           ;将原int 9入口的偏移地址转存200
push es:[9*4].2
pop es:[202h]           ;将原int 9入口的段地址转存202
                               
cli                        ;将IF置0
mov word ptr es:[9*4],204h ;将中断向量表中的入口偏移地址
                              ;改为新int9的
mov word ptr es:[9*4].2,0  ;将中断向量表中的入口段地址
                              ;改为新int9的
sti                        ;将标志寄存器械IF置1
                               
mov ax,4c00h
int 21h
                               
                               
int9: push ax
push bx
push cx
push es
                               
in al,60h
                               
pushf
call dword ptr cs:[200h]  ;当原int 9执行时(cs)=0
                               
cmp al,1eh+80h            ;按下"A"时扫描码(即通码)为1eh,
                          ;松开为断码=1eh+80h
jne int9ret
                               
mov ax,0b800h
mov es,ax
mov bx,0
mov cx,2000
s: mov byte ptr es:[bx],'A'
add bx,2
loop s
                               
int9ret: pop es
pop cx
pop bx
pop ax
iret
                         
int9end: nop
                                  
code ends
end start
评论次数(0)  |  浏览次数(628)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码