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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  我要做些我能做的事情,不能老是睡下去了!
  • 『姓名』:;-)               
  • 『性别』:男    『发送消息
  • 个人说明:我的小老鼠;-)
  • 详细信息『加为好友』
学习动态

[2008-02-27 12:06] 改进 安装int9 显示26字母,"ESC"改变颜色

;*******显示字母并有延时,接受 'Esc' 按键后改变字符显示颜色******
;去掉了中断处理程序中没有意义的指令语句
;对更改中断向量时刻可能发生的状况作了进一步安全保障 cli ,sti的使用
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
      mov ax,data
      mov ds,ax
      mov ax,0
      mov es,ax

      push es:[9*4]
      pop ds:[0]
      push es:[9*4+2]
      pop ds:[2]

        cli
      mov word ptr es:[9*4],offset int9
      mov es:[9*4+2],cs
        sti

      mov ax,0b800h
      mov es,ax
      mov ah,'a'
    s:mov  es:[160*12+40*2],ah
      call delay
      inc ah
      cmp ah,'z'
      jna s
      mov ax,0
      mov es,ax

      push ds:[0]
        cli;置屏蔽中断标志位
      pop es:[9*4]
      push ds;[2]
      pop es;[9*4+2]   ;将中断向量表中的int 9 中断向量恢复
        sti;取消屏蔽

      mov ax,4c00h
      int 21h
delay:push ax
      push dx
      mov dx,2000h ;loop 10000000h times
      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

   ;---以下是int 9 中断处理程序---------------------

 int9:push ax
      push bx
      push es

      in al,60h

      pushf
      ;;;;;
      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
      iret

code ends
end start
评论次数(1)  |  浏览次数(945)  |  类型(汇编相关) |  收藏此文  | 

[  xiaochong   发表于  2008-02-27 15:56  ]

不错啊,博主加油!

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