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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  原泉混混,不舍昼夜。盈科而后进,放乎四海,有本着如是,是之取尔!
  • 『姓名』:杨逍
  • 『性别』:男『发送消息
  • 个人说明:
  • 详细信息『加为好友』
学习动态
最新留言

[2009-09-14 21:58] 实验15

图片载入中
题目:安装一个新的int9中断例程,功能:在dos下,按下‘A'键后,除非不再松开,如果松开,就显示满屏的'A';其他键照常处理。

源代码:

assume cs:codesg
stacksg segment
    db 128 dup(0)
stacksg ends
codesg segment
start:
    mov ax,stacksg
    mov ss,ax
    mov sp,128

;;;;;;;复制int9的中段程序到0000:0204h处
    mov ax,0
    mov es,ax
    mov di,204h;设置es:[di]指向0000:0204h处
    
    mov ax,cs
    mov ds,ax
    mov si,offset int9;设置ds:[si]指向行的int9中断程序的开始处
    
    mov cx,offset int9end-offset int9;设置cx的循环次数
    
    cld ;设置si、di递增
    rep movsb;复制程序到0000:0204开始的地址处
    
    push es:[9*4]
    pop es:[200h]
    push es:[9*4+2]
    pop es:[202h];把原来的int9中断例程的入口地址保存到0000:[0200h]开始的两个字单元
    
    cli;屏蔽掉键盘中断,免得引起错误
    mov word ptr es:[9*4],204h
    mov word ptr es:[9*4+2],0;设置int9的中断向量表项指向新的int9中断程序
    sti

    mov ax,4c00h
    int 21h

    
;;;;;;;;;;;;;;;;;;新的int9中断程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
int9:
    push ax
    push bx
    push cx
    push es
    
    mov ax,0
    mov es,ax;设置es的值为0000h
    
    in al,60h;读取所输入的键值
    
    pushf 
    call dword ptr es:[200h];调用原来的int9中断例程
    
    cmp al,9eh;判断按下的是否是a键
    jne int9ret;不是则结束该中断例程
    
    
    
    mov ax,0b800h
    mov es,ax        
    mov bx,0;设置es:[bx]指向显存段地址
    mov cx,2000
    
  show:
    mov byte ptr es:[bx],41h
    mov byte ptr es:[bx+1],2h
    add bx,2
    loop show;显示满屏的A
    
int9ret:
    pop es
    pop cx
    pop bx
    pop ax
    iret
    
int9end:nop   

codesg ends
end start
评论次数(2)  |  浏览次数(625)  |  类型(汇编作业) |  收藏此文  | 

[  wsrf   发表于  2009-09-16 08:58  ]

没有问题,继续努力。

[  njutyangxiao   发表于  2009-09-16 09:06  ]

谢谢,keep moving!

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码