如何给键盘加锁

此博客展示了一段汇编语言代码,实现了键盘锁功能。代码通过修改中断向量表,自定义 09h 中断处理程序,对键盘输入进行判断和处理,包含按键状态检测、关键词匹配等操作,以达到控制键盘输入的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

code segment
     assume cs:code,ds:code,es:code
     org 100h
start: jmp set09h
lockkey equ 1
subaddr dw key_on
pointer dw ?
counter db ?
keyword db 11h,15h,19h
key_len equ $-keyword
old09h dd ?
new09h proc near
       push ax
       push si
       push ds
       push es
       push cs
       pop ds
       mov ax,0040h
       mov es,ax
       in al,60h
       test al,80h
       jnz bios09h
       jmp word ptr subaddr
bios09h:pop es
        pop ds
        pop si
        pop ax
        sti
        jmp cs:dword ptr old09h
key_on: test byte ptr es:[0017h],08h
        jz bios09h
        mov subaddr,offset key_off
        mov pointer,offset keyword
exit:   in al,61h
        push ax
        or al,80h
        out 61h,al
        pop ax
        out 61h,al
        mov al,20h
        out 20h,al
        pop es
        pop ds
        pop si
        pop ax
        iret
key_off:mov si,pointer
        cmp al,[si]
        jnz error
        inc pointer
        dec counter
        jnz exit
        mov subaddr,offset key_on
        jmp bios09h
error:  cmp si,offset keyword
        jz exit
        mov pointer,offset keyword
        mov counter,key_len
        jmp key_off
new09h  endp
set09h: cli
        push cs
        pop ds
        mov ax,3509h
        int 21h
        mov si,offset old09h
        mov [si],bx
        mov [si+2],es
        mov dx,offset new09h
        mov ax,2509h
        int 21h
        mov dx,offset set09h
        add dx,260
        int 27h
code    ends
        end
        mov ax,3509h
        int 21h
        mov si,offset old09h
        mov [si],bx
        mov [si+2],es
        mov dx,offsetnew09h
        mov ax,2509h
        int 21h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值