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

📄 汇编扩充键盘功能kbdio.asm

📁 字处理演示程序之扩充键盘功能(SHIFT键的功能)
💻 ASM
字号:
TITLE  kbdio.asm--------Keyboard I/O support program
;---------------------------------------------------------------
stack    segment    para   stack   'stack'
         db         256    dup(0)
stack    ends
;---------------------------------------------------------------
data     segment    para    public  'data'
buffer   db         16h     dup(0)
bufpt1   dw         0
bufpt2   dw         0
kbflag   db         0
kbflag1  db         0
prompt   db '---kbd_io program begin---',0dh,0ah,'$'
scantab  db 0,0,'1234567890-=',8,0
         db 'qwertyuiop[]',0dh,0
         db 'asdfghjkl;',2ch,27h,1,0
         db 'zxcvbnm,./',1,0,0
         db ' ',0,0,0,0,0,0,0,0,0,0,0,0,0
         db '789-456+1230.'
shiftab  db 0,0,'!@#$%^&*()_+',0,0
         db 'QWERTYUIOP{}',0DH,0
         DB 'ASDFGHJKL:"',27h,2,0
         DB 'ZXCVBNM<>?',0,0,0
         DB ' ',26 DUP(0)
even
oldcs9   dw ?
oldip9   dw ?
data     ends
;-----------------------------------------------------------------
code     segment    para   public    'code'
start    proc       far
         assume     cs:code,ds:data
         push       ds
         mov        ax,0
         push       ax
         mov        ax,data
         mov        ds,ax
         
         cli
         mov        al,09
         mov        ah,35h
         int        21h
         mov        oldcs9,es
         mov        oldip9,bx
         
         push       ds
         mov        dx,offset kbint
         mov        ax,seg kbint
         mov        ds,ax
         mov        al,09
         mov        ah,25h
         int        21h
         pop        ds
         
         in         al,21h
         and        al,0fdh
         out        21h,al
         
         mov        dx,offset prompt
         mov        ah,9
         int        21h
         sti
forever:
         call       kbget
         test       kbflag,80h
         jnz        endint
         push       ax
         call       dispchar
         pop        ax
         cmp        al,0dh
         jnz        forever
         mov        al,0ah
         call       dispchar
         jmp        forever
endint:
         mov        dx,oldip9
         mov        ax,oldcs9
         mov        ds,ax
         mov        al,09h
         mov        ah,25h
         int        21h
         
         ret
start    endp
;-------------------------------------------------------
kbget    proc       near
         push       bx
         cli
         mov        bx,bufpt1
         cmp        bx,bufpt2
         jnz        kbget2
         cmp        kbflag,0
         jnz        kbget3
         sti
         pop        bx
         jmp        kbget
kbget2:
         mov        al,[buffer+bx]
         inc        bx
         cmp        bx,16
         jc         kbget3
         mov        bx,0
kbget3:
         mov        bufpt1,bx
         pop        bx
         ret
kbget    endp
;-----------------------------------------------------
kbint    proc       far
         push       bx
         push       ax
         
         in         al,60h
         push       ax
         in         al,61h
         or         al,80h
         out        61h,al
         and        al,7fh
         out        61h,al
         
         pop        ax
         test       al,80h
         jnz        kbint2
         cmp al,2ah
         jnz s5
         cmp kbflag1,1
         jz s1
         mov kbflag1,1
         jmp s1
s5:     cmp al,36h
         jnz s2
         cmp kbflag1,1
        jz s1
        mov kbflag1,1
        jmp s1
s2:      cmp kbflag1,1
         jnz s3
         lea bx,shiftab
         xlat shiftab
         jmp s4
s3:      lea bx,scantab
         xlat scantab
s4:      cmp        al,0
         jnz        kbint4
         mov        kbflag,80h
         jmp        kbint2
kbint4:
         mov        bx,bufpt2
         mov        [buffer+bx],al
         inc        bx
         cmp        bx,16
         jc         kbint3
         mov        bx,0
kbint3:
         cmp        bx,bufpt1
         jz         kbint2
         mov        bufpt2,bx
kbint2:
         cmp al,0aah
         jnz s6
         mov kbflag1,0
s6:      cmp al,0b6h
         jnz s1
         mov kbflag1,0
  s1:    cli
         mov        al,20h
         out        20h,al
         pop        ax
         pop        bx
         sti
         iret
kbint    endp
;------------------------------------------------------
dispchar   proc     near
           push     bx
           mov      bx,0
           mov      ah,0eh
           int      10h
           pop      bx
           ret
dispchar   endp
;------------------------------------------------------
code       ends
           end      start

⌨️ 快捷键说明

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