您的位置:首页 > 其它

安装新的nt9中断 动态 显示26字母,"ESC"改变颜色

2008-02-29 10:52 471 查看
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=4526&kindId=4140&postId=11411&readSg=1

安装新的nt9中断 动态 显示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  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  delay c
相关文章推荐