⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ck.asm

📁 很好的键盘驱动代码
💻 ASM
字号:
HEAD EQU  41AH
TAIL EQU  41CH
CODE SEGMENT
        ASSUME CS:CODE,DS:CODE
START:  JMP GO
        OLD_OFF DW 0
        OLD_SEG DW 0
        KEYTABLE   DW 100 DUP(0)
        TABLETAIL LABEL NEAR
NEW_INT9:
        PUSHF
        CALL DWORD PTR CS:OLD_OFF
        PUSH ES
        PUSH DI
        PUSH DS
        PUSH SI
        PUSH BX
        PUSH AX
        XOR  AX,AX
        MOV  DS,AX
        MOV  SI,HEAD
        MOV  AX,[SI]
        MOV  SI,TAIL
        MOV  BX,[SI]
        CMP  AX,BX
        JNZ  CHECK
        POP  AX
        POP  BX
        POP  SI
        POP  DS
        POP  DI
        POP  ES
        IRET
CHECK:  MOV  DI,AX
        MOV  AX,40H
        MOV  ES,AX
        MOV  AX,CS
        MOV  DS,AX
NEXT:
        MOV  SI,OFFSET KEYTABLE
        MOV  AX,ES:[DI]
FIND:
        CMP  WORD PTR [SI],0
        JZ   SKIP
        CMP  AX,[SI]
        JZ   FOUNDIT
SKIP:   ADD  SI,4
        CMP  SI,OFFSET TABLETAIL
        JZ   OVER
        JMP  FIND
FOUNDIT:
        ADD  SI,2                  ;  FOUND IT! CHANGE THE KEY.
        MOV  AX,[SI]
        MOV  ES:[DI],AX
FINDOVER:
        ADD  DI,2
        CMP  DI,3EH
        JNZ  NORMAL
        MOV  DI,1EH
NORMAL: CMP  DI,BX
        JNZ  NEXT
OVER:   POP  AX
        POP  BX
        POP  SI
        POP  DS
        POP  DI
        POP  ES
        IRET
intover:
GETKEY PROC NEAR
        PUSH DS
        PUSH SI
        PUSH BX
        MOV AX,40H
        MOV DS,AX
WAITKEY:   
        MOV SI,1AH
        MOV AX,[SI]
        MOV SI,1CH
        CMP AX,[SI]
        JZ  WAITKEY
        MOV SI,1AH
        MOV BX,[SI]
        MOV AX,[BX]
        ADD BX,2
        CMP BX,3EH
        JNZ SKIP2
        MOV BX,1EH
SKIP2:  MOV [SI],BX
        POP  BX
        POP  SI
        POP  DS
        RET
GETKEY ENDP
GO:
        MOV AX,CS
        MOV DS,AX
        MOV DX,OFFSET STRING
        MOV AH,09H
        INT 21H
        
        MOV AX,CS
        MOV ES,AX
        MOV DI,OFFSET KEYTABLE
        MOV CX,50
;NOW , START TO GET KEY.

READKEY:
        MOV  DX,OFFSET MESS1  
        MOV  AH,09H
        INT  21H
        CALL GETKEY
        CMP  AX,11BH
        JZ   OK
        STOSW
        MOV  DX,OFFSET MESS2
        MOV  AH,09H
        INT  21H
        CALL GETKEY
        STOSW
        LOOP READKEY
OK:
        MOV AX,CS
        MOV ES,AX
        XOR AX,AX
        MOV DS,AX
        MOV DI,OFFSET OLD_OFF
        MOV SI,4*9
        CLD
        LODSW
        STOSW
        LODSW
        STOSW
        CLI
        MOV SI,4*9
        MOV AX,OFFSET NEW_INT9
        MOV [SI],AX
        INC SI
        INC SI
        MOV AX,SEG NEW_INT9
        MOV [SI],AX
        STI
        MOV AX,OFFSET INTOVER
        SUB AX,OFFSET START
        MOV CL,4
        SHR AX,CL
        ADD AX,12H
        MOV DX,AX
        MOV AX,3101H
        INT 21H
    string  db 'Please input the key you want to change(press ESC to over):','$'
    mess1   db 0dh,0ah,'Change key: ','$'
    mess2   db 'to key:','$'
CODE ENDS
END START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -