;编写一个键盘处理程序,替换掉原计算机系统的键盘处理程序(BIOS的09H号中断)。 ;要求当按下“QWERTYUIOP”键时,接收、显示的是示“ASDFGHJKL;”, ;并能处理换挡键shift。 ;要运行在doxbox下才好看到效果. ;int9是个复杂的中断,本例只是个简例,只处理了左SHIFT键 ; stack segment stack db 128 dup(0) stack ends data segment ;--in the data segment table db 16 dup(0) db 'asdfghjkl.',0,0,0,0 ; db 'qwertyuiop',0,0,0,0 ; db 'zxcvbnm' db 16 dup(0) db 'ASDFGHJKL.',0,0,0,0 db 'QWERTYUIOP',0,0,0,0 db 'ZXCVBNM' keep_ip dw 0 keep_cs dw 0 ascii db '0' data ends
cli push ds mov dx,keep_ip mov ax,keep_cs mov ds,ax mov ah,25h mov al,9 int 21h pop ds sti mov ax,4c00h int 21h new_keyboard proc far push ax push bx push cx push di push es ;---- in al,60h mov ah,al push ax in al,61h or al,10000000B out 61h,al and al,01111111B out 61h,al mov ax,40h mov es,ax pop ax cmp al,42 jne key_up mov bl,2 or es:[17h],bl jmp quit key_up: