ITEEDU

这个试验揭示出"幻码"的这样一个规律:每个键对应的"幻码"与这个键在键盘上的位置有一定的关系。这个规律从何而来?
PC机的祖先--IBM PC/XT配备了一个83键的标准键盘,现在这种键盘己然绝迹。我们通常使用的键盘都是101键的。这种键盘上每个键对应的"幻码"可在表6-3查出:
键盘的结构可分为两大部分:按键开关和逻辑控制电路。每个键都是一个开关,都具有"通"和"断"两种状态。当键盘通电后,控制电路就会按预定顺序轮流查询每个键的状态,这个预定的顺序和各个键的排列情况大致相同。如果某个键的状态有变化,如从"断"变为"通"(键被按下),或者是从"通"变为"断"(键被放开),那么控制电路就会把这个键的编号通过电缆送到主机。我们把键的编号称为"扫描码",也就是我们前面所说的"幻码"。

表6-3 键盘扫描码表
键名 十进制 十六进制 键名 十进制 十六进制
ESC 1 01 B 48 30
1~9,0 2~11 02~0B N 49 31
_ - 12 0C M 50 32
+ = 13 0D , < 51 33
BackSpace 14 0E . > 52 34
Tab 15 0F / ? 53 35
Q 16 10 RightShift 54 36
W 17 11 Prtsc(*) 55 37
E 18 12 Alt 56 38
R 19 13 SpaceBar 57 39
T 20 14 CapsLock 58 3A
Y 21 15 F1 59 3B
U 22 16 F2 60 3C
I 23 17 F3 61 3D
O 24 18 F4 62 3E
P 25 19 F5 63 3F
[ { 26 1A F6 64 40
] } 27 1B F7 65 41
Enter 28 1C F8 66 42
Ctrl 29 1D F9 67 43
A 30 1E F10 68 44
S 31 1F NumLock 69 45
D 32 20 ScollLock 70 46
F 33 21 Home(7) 71 47
G 34 22 72 48
H 35 23 PageUp 73 49
J 36 24 -(小键盘) 74 4A
K 37 25 75 4B
L 38 26 5(小键盘) 76 4C
; : 39 27 77 4D
' " 40 28 +(小键盘) 78 4E
` ~ 41 29 End 79 4F
LeftShift 42 2A 80 50
\ | 43 2B PageDown 81 51
Z 44 2C Insert 82 52
X 45 2D Delete 83 53
C 46 2E F11 87 57
V 47 2F F12 88 58

注:数字小键盘上的"*"键扫描码也是37H,其实Prtsc键的扫描码并不简单就是37H,这里还有一些更深入的内容,类似的情况还出现在Pause与NumLock两键上。

主机在收到扫描码后会根据扫描码与"键名"的对应关系将扫描码转换为ASCII码并将它们保存到内存中的一个特定位置,我们使用16H中断的0号功能就可以取到这两个编码,其中扫描码在AH寄存器中返回。

由此我们就可以解释"TESTKEY2"所反应出的一些问题,如"1"与"!"在同一个键上,所以具有相同的扫描码;而数字小键盘是在83键标准键盘上扩展的,所以小键盘上的"1"具有不同的扫描码。我们现在所用的101键增强型键盘的布局和83键标准键盘有区别,而且增加了一些键,但是从标准键盘继承下来的键尽管其位置不同了,但扫描码没有变化。