字幕换色

贴上一篇代码,是关于改写外中断 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、付费专栏及课程。

余额充值