字幕换色

贴上一篇代码,是关于改写外中断 int9来实现字幕换色

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 ]                    ;将原来的int9中断例程的入口地址保存在ds: 0 ,ds:2单元中

    cli         ;此处注意,置IF
= 0,屏蔽一切其他外中断
    mov word ptr es:[
9 * 4 ],offset int9_new
    mov es:[
9 * 4 + 2 ],cs           ;在中断向量表中设置新的int9 中断例程的入口地址
    sti

    mov ax,0b800h
    mov es,ax
    mov ah,
' a '
    s: mov es:[
160 * 12 + 40 * 2 ],ah
        call delay    ;延迟字幕改变速度,掉哟dalay子程序
        inc ah
        cmp ah,
' z '
        jna s
    
        mov ax,
0
        mov es,ax
        push ds:[
0 ]
        pop es:[
9 * 4 ]
        push ds:[
2 ]
        pop es:[
9 * 4 + 2 ]         ;将中断向量表中int9 中断例程的入口恢复为原来的地址
    
        mov ax,4c00h
        
int  21h
    
 delay:           push ax
     push dx
     mov dx,3000h
     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
   
int9_new:

    push ax
    push es

    
in  al,60h

    pushf
    call dword ptr ds:[
0 ]    ;对int  9  指令进行模拟,调用原来的int9 中断例程

    cmp al,
1               ;检验是否为ESC键
    jne int9_ret

    mov ax,0b800h
    mov es,ax
    inc 
byte  ptr es:[ 160 * 12 + 40 * 2 + 1 ]       ;改变颜色

int9_ret:
    pop es
    pop ax
    iret

code ends

end start

 
   
   

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值