可以在XP下用的显示键盘扫描码的程序
;给初学者看的,高手就不要看了,不过指出错误或改进下是欢迎的^_^
.386p
CSEG SEGMENT USE16
assume cs:cseg
ORG 100H
START: cli ;关中断,这个很重要
xor bx,bx
mov ds,bx
mov ax,offset cs:int9chuli ;取出int9chuli开始的偏移地址
mov ds:[9*4],ax
mov ds:[9*4+2],cs
mov di,0
mov bx,0b800h
mov ds,bx
sti
waitkey: jmp $
int9chuli: cli
in al,60h
call xianshi_al_hex
mov al,20h
call xianshiasciima
mov al,20h
out 20h,al
Iret ;键盘中断返回
xianshi_al_hex:
push ax
shr al,4
call xianshi_al_low4_hex
pop ax
call xianshi_al_low4_hex
ret
xianshi_al_low4_hex:
and al,0fh
CALL BIJIAO ;比较AL中的数,小于9的需要加上30H(这样就可以转成ASCII码了),大于9的需要加上40H-9
call xianshiasciima
ret
bijiao: ;比较al中的16进制代码是否大于9并做相应处理,将16进制代码转换成ASCII码
cmp al,09h ;比较是否小于等于09H
Jbe jia30h ;
add al,41H-0ah-30h
jia30h: add al,30h
tuichubijiao: ret
xianshiasciima:
mov ah,08ah ;最高位是闪烁位,0F4H设置屏幕显示方式为闪烁的灰底红字,8AH是黑底绿字
xianshiasciima0:
mov ds:[di],ax
add di,2
ret
;----------------------------------------------------------------------------------------
CSEG ENDS
END START
|
|