В ПЕРСОНАЛЬНЫХ КОМПЬЮТЕРАХ
ПРИНЦИПЫ КОДИРОВАНИЯ СИМВОЛОВ
Клавиатура ПК содержит микропроцессор, который воспринимает каждое нажатие на клавишу и генерирует специальный скан-код. Скан-код - это однобайтовое число, которое представляет собой некоторый номер, присвоенный каждой клавише. После этого вызывается прерывание клавиатуры. Процессор прекращает текущую работу и выполняет процедуру, анализирующую скан-код. При поступлении кода от клавиш сдвига или переключателей (SHIFT, CAPS LOCK, NUM LOCK и другие) изменение статуса работы клавиатуры записывается в память. В других случаях скан-код преобразуется в ASCII-код символа или расширенный код клавиши. Затем сформированный код помещается в буфер клавиатуры, представляющий собой небольшую область памяти, способную помнить до 15 вводимых символов, пока программа занята, чтобы их обработать. Путь, который проходит нажатие на клавишу перед тем, как попасть в программу, можно представить рис1.
Для представления символов в памяти персональных компьютеров при работе в простейших редакторах обычно выделяется один байт. Все текстовые символы, которые можно ввести в память компьютера с клавиатуры и вывести на экран, сведены в стандартную таблицу ASCII кодов. Коды ASCII - это байтовые числа, соответствующие американскому стандартному коду для обмена информацией (American Standart Code for Information Interchange). Этот набор включает обычные латинские буквы, а также ряд специальных знаков и символов псевдографики.

Рис. 1
Первые 128 символов кодовой таблицы ASCII имеют одинаковую кодировку для всех ПК (табл. 1). В нее входят также 32 управляющих символа с кодами 0 - 31, которые обычно используются для передачи команд периферийным устройствам, а не выводятся как символы на экран. Однако каждому из них соответствует определенный символ, который в принципе может быть выведен на экран.
Таблица 1
| К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л |
| NUL | DLE | BL | @ | P | ` | p | |||||||||
| SON | DC1 | ! | A | Q | a | q | |||||||||
| STX | DC2 | « | B | R | b | r | |||||||||
| ETX | DC3 | # | C | S | c | s | |||||||||
| EOT | DC4 | $ | D | T | d | t | |||||||||
| ENQ | NAK | % | E | U | e | u | |||||||||
| ACK | SYN | & | F | V | f | v | |||||||||
| BEL | ETB | ' | G | W | g | w | |||||||||
| BS | CAN | ( | H | X | h | x | |||||||||
| HT | EM | ) | I | Y | i | y | |||||||||
| LF | SUB | * | : | J | Z | j | z | ||||||||
| VT | ESC | + | ; | K | [ | k | { | ||||||||
| EF | FS | , | < | L | \ | l | | | ||||||||
| CR | GS | - | = | M | ] | m | } | ||||||||
| SO | RS | . | > | N | ^ | n | ~ | ||||||||
| SI | US | / | ? | O | _ | o | DEL |
Управляющие символы (табл. 2) планировалось использовать для выполнения некоторых действий, но в настоящее время многие из них не используются. На практике из них чаще всего встречаются символы CR (ASCII 13) и LF (ASCII 10), которые вставляются в текст при нажатии на клавишу ENTER, когда нужно перейти на следующую строку. Эти символы в обычном режиме не видны на экране. Но увидеть их можно, если при просмотре текстового файла с помощью FAR manager переключиться в режим просмотра в виде кодов.
Таблица 2
| Символ | Обозначение | Символ | Обозначение |
| NUL | знак пpобела | DLE | переключение кода |
| SON | начало заголовка | DC1 | упpaвление устpойством 1 |
| STX | начало текста | DC2 | упpавление устpойством 2 |
| ETX | конец текста | DC3 | упpавление устpойством 3 |
| EOT | конец пеpедачи | DC4 | упpавление устpойством 4 |
| ENQ | запpос | NAK | пеpеспpос |
| ACK | подтвеpждение | SYN | pежим синхpонного ожидания |
| BEL | звонок | ETB | конец пеpедачи блока |
| BS | возвpат на одну позицию | CAN | отмена |
| HT | гоpизонтальная табуляция | EM | конец носителя |
| LF | пеpевод стpоки | SUB | замена |
| VT | веpтикальная табуляция | ESC | пеpеход |
| EF | подача бланка | FS | pазделитель файла |
| CR | возвpат каpетки | GS | pазделитель гpуппы |
| SO | пеpеход на веpхний pегистp | RS | pазделитель записи |
| SI | пеpеход на нижний pегистp | US | разделитель блока |
| BL | пpобел | DEL | забой |
Вторая половина этой таблицы включает символы псевдографики и национальных алфавитов (табл. 3) и может различаться в разных ПК. Существует несколько различных вариантов этой половины кодовой таблицы, отличающиеся расположением символов русского алфавита и знаков псевдографики, а также наборами специальных символов с последними кодами 240-255. Чтобы ввести символы псевдографики, следует при нажатой клавише [ALT] набрать ASCII код нужного символа на дополнительной клавиатуре и отпустить клавишу [ALT].
Таблица 3
| К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л | К о д | С и м в о л |
| А | Р | а |
|
|
| р | Ё | ||||||||
| Б | С | б |
|
|
| с | ё | ||||||||
| В | Т | в |
|
|
| т | Є | ||||||||
| Г | У | г |
|
|
| у | є | ||||||||
| Д | Ф | д |
|
|
| ф | Ї | ||||||||
| Е | Х | е |
|
|
| х | ї | ||||||||
| Ж | Ц | ж |
|
|
| ц | Ў | ||||||||
| З | Ч | з |
|
|
| ч | ў | ||||||||
| И | Ш | и |
|
|
| ш | ° | ||||||||
| Й | Щ | й |
|
|
| щ | • | ||||||||
| К | Ъ | к |
|
|
| ъ | · | ||||||||
| Л | Ы | л |
|
|
| ы | _ | ||||||||
| М | Ь | м |
|
|
| ь | № | ||||||||
| Н | Э | н |
|
|
| э | ¤ | ||||||||
| О | Ю | о |
|
|
| ю | _ | ||||||||
| П | Я | п |
|
|
| я | _ |
Существуют также так называемые расширенные коды, присвоенные клавишам или комбинациям клавиш, которые не имеют представляющего их символа ASCII, таким, как, например, функциональные клавиши. Расширенные коды имеют длину 2 байта, причем первый байт всегда ASCII 0. Второй байт - номер расширенного кода. Например, код 0:30 представляет комбинацию клавиш [Alt]+[A]. Начальный 0 позволяет программе определить, принадлежит ли данный код набору ASCII или расширенному набору.
При нажатии на какую-либо клавишу клавиатуры код нажатой клавиши, называемый скан-кодом, трансформируется в ASCII код или расширенный код вводимого символа, который затем помещается в буфер клавиатуры. Буфер клавиатуры может накапливать до 15 нажатий на клавиши независимо от того, каким кодам они будут соответствовать (однобайтовым кодам ASCII или двухбайтовым расширенным кодам). В буфере клавиатуры для каждого нажатия на клавишу отводятся два байта. Для однобайтовых кодов первый байт ячейки памяти буфера содержит код ASCII, а второй - скан-код клавиши. Для расширенных кодов первый байт ячейки памяти буфера содержит ASCII 0, а второй - номер расширенного кода. Этот код обычно совпадает со скан-кодом клавиши, но не всегда, поскольку некоторые клавиши можно комбинировать с клавишами сдвига для генерации различных кодов.