这个试验揭示出"幻码"的这样一个规律:每个键对应的"幻码"与这个键在键盘上的位置有一定的关系。这个规律从何而来?
PC机的祖先--IBM PC/XT配备了一个83键的标准键盘,现在这种键盘己然绝迹。我们通常使用的键盘都是101键的。这种键盘上每个键对应的"幻码"可在表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键标准键盘有区别,而且增加了一些键,但是从标准键盘继承下来的键尽管其位置不同了,但扫描码没有变化。