ПРИНЦИПЫ КОДИРОВАНИЯ СИМВОЛОВ
Клавиатура ПК содержит микропроцессор, который воспринимает каждое нажатие на клавишу и генерирует специальный скан-код. Скан-код - это однобайтовое число, которое представляет собой некоторый номер, присвоенный каждой клавише. После этого вызывается прерывание клавиатуры. Процессор прекращает текущую работу и выполняет процедуру, анализирующую скан-код. При поступлении кода от клавиш сдвига или переключателей (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, а второй - номер расширенного кода. Этот код обычно совпадает со скан-кодом клавиши, но не всегда, поскольку некоторые клавиши можно комбинировать с клавишами сдвига для генерации различных кодов.