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

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  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值