Главная страница
Навигация по странице:

  • Шестнадцатерич- ный код Символ ASCII Шестнадцатерич- ный код Символ ASCII

  • Шестнадцате- ричный код Аббревиа- тура Название управляю- щего символа Назначение

  • Шестнадцатеричный код Символ EBCDIC

  • кр гаряев. Чарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе. Книга принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании


    Скачать 6.11 Mb.
    НазваниеКнига принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании
    Анкоркр гаряев
    Дата19.10.2022
    Размер6.11 Mb.
    Формат файлаpdf
    Имя файлаЧарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе.pdf
    ТипКнига
    #743064
    страница22 из 28
    1   ...   18   19   20   21   22   23   24   25   ...   28

    Символ Бодо
    Шестнадцатерич-
    ный код
    Символ Бодо
    00 10 3
    01 5
    11
    +
    02
    Возврат каретки
    12
    Кто это?
    03 9
    13
    ?
    04
    Пробел
    14

    05
    #
    15 6
    06
    ,
    16
    $
    07 17
    /
    08
    Перевод строки
    18

    09
    )
    19 2
    0A
    4 1A
    Сигнал
    0B
    &
    1B
    Переключение
    на цифры
    0C
    8 1C
    7 0D
    0 1D
    1 0E
    :
    1E
    (
    0F
    =
    1F
    Переключение
    на буквы
    В стандарте ITU коды 05h, 0Bh и 16h не определены: они зарезервированы
    «для национального использования». В таблице показано, как эти коды применя- лись в Соединенных Штатах. Эти же коды обычно подходят для букв с диакрити- ческими знаками из некоторых европейских языков. Код «Сигнал» предназначен для подачи телетайпом слышимого звукового сигнала, «Кто это?» активирует ме- ханизм, посредством которого телетайп может идентифицировать себя.
    Как и азбука Морзе, этот 5-битный код не предусматривает различий меж ду прописными и строчными буквами. Предложение I spent $25 today («Се- годня я потратил 25 долларов») шифруется следующей последовательнос тью шестнадцатеричных значений.
    I SPENT $25 TODAY.
    0C 04 14 0D 10 06 01 04 1B 16 19 01 1F 04 01 03 12 18 15 1B 07 02 08
    Обратите внимание на три кода переключения: 1Bh прямо перед числом,
    1Fh после числа и 1Bh перед точкой в конце предложения. Строка завершает- ся кодами возврата каретки и перевода строки.

    Глава 20. Набор символов ASCII
    331
    К сожалению, если вы дважды отправите эту последовательность значе- ний на печатающее устройство телетайпа, получите следующий результат.
    I SPENT $25 TODAY.
    8 ‘03,5 $25 TODAY.
    Что случилось? Дело в том, что последний код переключения, получен- ный печатным аппаратом перед второй строкой, представлял код переключе- ния на цифры, поэтому коды в начале второй строки были интерпретирова- ны как цифры.
    Подобные проблемы типичны при использовании кодов переключе- ния. Несмотря на безусловную экономичность кода Бодо, предпочтительнее было бы остановиться на уникальных кодах для цифр и знаков препинания, а также отдельных кодах для строчных и прописных букв.
    Если мы хотим выяснить, сколько бит нам необходимо для создания луч- шей по сравнению с кодом Бодо системы кодирования символов, нужно прос- то сложить их: 52 кодовых слова — для прописных и строчных букв, десять кодовых слов — для цифр от 0 до 9. Это уже 62 кодовых слова. Если добавить несколько знаков препинания, получим 64 кодовых слова, а значит, нам нужно более шести бит. Однако мы еще не скоро превысим значение в 128 символов, при котором потребуются восемь бит.
    Как видите, необходимы семь бит для представления символов англий- ского текста, если мы хотим обойтись без переключения между буквами ниж- него и верхнего регистра.
    Что же это за коды? Фактически коды могут быть любыми. Если бы мы со- бирались создать собственный компьютер, собрать для этого все необходимые аппаратные средства, сами его запрограммировать и никогда не использовать для подключения к любой другой машине, мы могли бы придумать собствен- ные коды. Все, что нужно, — это назначить уникальный код каждому символу, который мы собираемся использовать.
    Поскольку компьютеры редко создаются и работают отдельно друг от друга, разумнее было бы договориться о применении одних и тех же кодов. Таким об- разом сконструированные нами компьютеры могут быть более совместимыми друг с другом и, вероятно, смогут даже обмениваться текстовой информацией.
    Кроме того, не следует присваивать коды случайным образом. Так, когда мы работаем с текстом на компьютере, назначение последовательных кодов буквам алфавита дает некоторые преимущества. Например, этот метод упо- рядочивания упрощает сортировку по алфавиту.

    332
    Код
    К счастью, такой стандарт уже разработан: Американский стандартный
    код для обмена информацией (American Standard Code for Information Interchange,
    ASCII). Он был принят в 1967 году и остается одним из важнейших во всей компьютерной индустрии. Однако у него есть одно исключение (о котором расскажу позднее). Работая с текстом на компьютере, вы можете быть уверены, что стандарт ASCII каким-то образом задействован в этом процессе.
    ASCII — это 7-битный код, использующий двоичные значения в диапазо- не от 0000000 до 1111111, которые соответствуют шестнадцатеричным кодам от 00h до 7Fh. Давайте разберем коды ASCII. Начнем не с самого начала, по- скольку первые 32 кода концептуально немного сложнее остальных, а со второй группы, состоящей из 32 кодов, которая включает знаки препинания и десять цифр. В следующей таблице перечислены шестнадцатеричные коды и соответ- ствующие им символы.
    Шестнадцатерич-
    ный код
    Символ ASCII
    Шестнадцатерич-
    ный код
    Символ ASCII
    20
    Пробел
    30 0
    21
    !
    31 1
    22
    «
    32 2
    23
    #
    33 3
    24
    $
    34 4
    25
    %
    35 5
    26
    &
    36 6
    27

    37 7
    28
    (
    38 8
    29
    )
    39 9
    2A
    *
    3A
    :
    2B
    +
    3B
    ;
    2C
    ,
    3C
    <
    2D
    -
    3D
    =
    2E
    3E
    >
    2F
    /
    3F
    ?
    Обратите внимание: код 20h соответствует пробелу, отделяющему слова друг от друга.
    Следующие 32 кода — прописные буквы и некоторые дополнительные знаки препинания. Кроме значка @ и символа подчеркивания, эти знаки обыч- но отсутствуют на пишущих машинках, однако являются стандартными для компьютерных клавиатур.

    Глава 20. Набор символов ASCII
    333
    Шестнадцатерич-
    ный код
    Символ ASCII
    Шестнадцатерич-
    ный код
    Символ ASCII
    40
    @
    50
    P
    41
    A
    51
    Q
    42
    B
    52
    R
    45
    C
    55
    S
    44
    D
    54
    T
    45
    E
    55
    U
    46
    F
    56
    V
    47
    G
    57
    W
    48
    H
    58
    X
    49
    I
    59
    Y
    4A
    J
    5A
    Z
    4B
    K
    5B
    [
    4C
    L
    5C
    \
    4D
    M
    5D
    ]
    4E
    N
    5E
    ^
    4F
    O
    5F
    _
    Следующая группа из 32 символов: все строчные буквы и некоторые до- полнительные знаки препинания, которые, опять же, редко встречаются на пи- шущих машинах.
    Шестнадцатерич-
    ный код
    Символ ASCII
    Шестнадцатерич-
    ный код
    Символ ASCII
    60

    70
    p
    61
    a
    71
    q
    62
    b
    72
    r
    63
    c
    73
    s
    64
    d
    74
    t
    65
    e
    75
    u
    66
    f
    76
    v
    67
    g
    77
    w
    68
    h
    78
    x
    69
    i
    79
    y
    6A
    j
    7A
    z
    6B
    k
    7B
    {
    6C
    l
    7C
    |
    6D
    m
    7D
    }
    6E
    n
    7E


    6F
    o

    334
    Код
    В этой таблице отсутствует последний символ, соответствующий коду 7Fh.
    Приведенные выше три таблицы содержат в общей сложности 95 символов.
    Поскольку код ASCII является 7-битным, он допускает использование 128 ко- дов, поэтому нам должно быть доступно еще 33 кода, до которых мы скоро и доберемся.
    Текстовая строка Hello, you! («Привет тебе!») может быть представ- лена в кодировке ASCII с использованием следующих шестнадцатеричных кодов.
    Hello, you!
    48 65 6C 6C 6F 2C 20 79 6F 75 21
    Обратите внимание на запятую (код 2C), пробел (код 20) и восклицатель- ный знак (код 21), а также на коды, соответствующие буквам. Представление короткого предложения I am 12 years old («Мне 12 лет») в кодировке ASCII следующее.
    I am 12 years old.
    49 20 61 6D 20 31 32 20 79 65 61 72 73 20 6F 6C 64 2E
    Число 12 в этом предложении отображено шестнадцатеричными числами
    31h и 32h, то есть кодами ASCII для цифр 1 и 2. Когда число 12 — часть текс- та, его нельзя представлять с помощью шестнадцатеричных кодов 01h и 02h,
    BCD-кода 12h или шестнадцатеричного кода 0Ch. Все эти коды имеют в систе- ме ASCII совершенно другие значения.
    Конкретная прописная буква в системе ASCII отличается от своей строч- ной версии на 20h. Этот факт позволяет легко написать код, который, например, переводит текстовую строку в верхний регистр. Предположим, что определен- ная область памяти содержит текстовую строку, по одному символу на байт.
    Следующая подпрограмма для процессора 8080 предполагает, что адрес пер- вого символа в текстовой строке хранится в регистре HL. Регистр C включает длину этой текстовой строки, то есть количество символов.
    Capitalize:
    MOV A, C ; C = количество оставшихся символов
    CPI A,00h ; Сравнить с 0
    JZ AllDone ; Если С = 0, завершить программу

    Глава 20. Набор символов ASCII
    335
    MOV A,[HL] ; Извлечь следующий символ
    CPI A,61h ; Меньше, чем «a»?
    JC SkipIt ; Если да, проигнорировать
    CPI A,7Bh ; Больше, чем «z»?
    JNC SkipIt ; Если да, проигнорировать
    SBI A,20h ; Буква в нижнем регистре, поэтому
    ; вычитаем 20h
    MOV [HL], A ; Сохранить символ
    SkipIt: INX HL ; Перейти к следующему символу
    DCR C
    ; Уменьшить счетчик на 1
    JMP Capitalize; Вернуться к началу
    AllDone:
    RET
    Оператор, который вычитает 20h из кода строчной буквы для ее преоб- разования в прописную, можно заменить следующим фрагментом.
    ANI A
    ,
    DFh
    Инструкция ANI (AND Immediate) выполняет побитовую операцию
    И меж ду значением в аккумуляторе и значением DFh, которое в двоичном формате равно 11011111. Под словом «побитовая» подразумеваю, что такая команда выполняет операцию И между каждой парой соответствующих би- тов, составляющих два числа. Эта операция И сохраняет все биты, содержа- щиеся в аккумуляторе (A), за исключением третьего слева, значение кото- рого задается равным 0, что, в свою очередь, преобразует строчную букву
    ASCII в прописную.
    Приведенные выше 95 кодов — это так называемые печатные символы, поскольку они имеют графическое представление. Кроме них в кодировке
    ASCII также предусмотрено 33 управляющих символа, которые не имеют гра- фического представления, но выполняют определенные функции. Для полноты приведу эти 33 управляющих символа. Не беспокойтесь, если они покажутся вам непонятными. Кодировка ASCII изначально предназначалась для исполь- зования в телетайпах, поэтому многие из ее кодов в настоящее время потеря- ли свое значение.

    336
    Код
    Шестнадцате-
    ричный код
    Аббревиа-
    тура
    Название управляю-
    щего символа
    Назначение
    00
    NUL
    Null
    Нет
    01
    SOH
    Start of Heading
    Начало заголовка
    02
    STX
    Start of Text
    Начало текста
    03
    ETX
    End of Text
    Конец текста
    04
    EOT
    End of Transmission
    Конец передачи
    05
    ENQ
    Enquiry
    Запрос
    06
    ACK
    Acknowledge
    Подтверждение
    07
    BEL
    Bell
    Звуковой сигнал
    08
    BS
    Backspace
    Возврат на символ назад
    09
    HT
    Horizontal Tabulation
    Горизонтальная табуляция
    0A
    LF
    Line Feed
    Перевод строки
    0B
    VT
    Vertical Tabulation
    Вертикальная табуляция
    0C
    FF
    Form Feed
    Новая страница
    0D
    CR
    Carriage Return
    Возврат каретки
    0E
    SO
    Shift-Out
    Переключиться на другую ко- дировку
    0F
    SI
    Shift-In
    Переключиться на исходную кодировку
    10
    DLE
    Data Link Escape
    Освобождение канала данных
    11
    DC1
    Device Control 1
    Первый символ управления устройством
    12
    DC2
    Device Control 2
    Второй символ управления устройством
    13
    DC3
    Device Control 3
    Третий символ управления устройством
    14
    DC4
    Device Control 4
    Четвертый символ управления устройством
    15
    NAK
    Negative Acknowledge
    Отсутствие подтверждения

    Глава 20. Набор символов ASCII
    337
    Шестнадцате-
    ричный код
    Аббревиа-
    тура
    Название управляю-
    щего символа
    Назначение
    16
    SYN
    Synchronous Idle
    Синхронизация
    17
    ETB
    End of Transmission Block
    Конец блока передачи
    18
    CAN
    Cancel
    Отмена
    19
    EM
    End of Medium
    Конец носителя
    1A
    SUB
    Substitute Character
    Замена
    1B
    ESC
    Escape
    Ключ
    1C
    FS
    File Separator or
    Information Separator 4
    Разделитель файлов или информации 4 1D
    GS
    Group Separator or
    Information Separator 3
    Разделитель групп или информации 3 1E
    RS
    Record Separator or
    Information Separator 2
    Разделитель записей или информации 2 1F
    US
    Unit Separator or
    Information Separator 1
    Разделитель элементов или информации 1 7F
    DEL
    Delete
    Удаление
    Управляющие символы в данном случае могут использоваться наряду с печатными для элементарного форматирования текста. Это проще всего по- нять, если вы подумаете о таком устройстве, как телетайп или простой прин- тер, который отпечатывает на странице символы под воздействием потока кодов ASCII. Получив код символа, печатающая головка устройства наносит символ и перемещается на одну позицию вправо. Наиболее важные управляю- щие символы изменяют это нормальное поведение.
    Рассмотрим следующую строку шестнадцатеричных значений.
    41 09 42 09 43 09
    Символ 09 — это код горизонтальной табуляции, или табулятор. Если представить, что все горизонтальные позиции символа на странице принтера нумеруются начиная с 0, то код табуляции дает команду напечатать следую- щий символ на следующей горизонтальной позиции, номер которой кратен восьми, например так.
    A B C

    338
    Код
    Это удобный способ для расположения текста столбцами.
    Даже сегодня многие компьютерные принтеры реагируют на код перехода к новой странице (12h), извлекая текущую страницу и начиная печатать на новой.
    Код для возврата на один символ назад (backspace) может использовать- ся для печати составных символов на некоторых старых принтерах. Предпо- ложим, вам нужно, чтобы телетайпный аппарат отобразил строчную букву e с обратным апострофом: è. Эту задачу можно решить с помощью шестнадца- теричных кодов 65 08 60.
    Сегодня наиболее важными являются управляющие коды для возврата каретки и перевода строки, которые имеют то же значение, что и аналогич- ные коды Бодо. В ответ на код возврата каретки печатающая головка прин- тера перемещается к левому краю страницы, а в ответ на код перевода стро- ки — на одну строку вниз. Обычно для перехода на новую строку требуются оба кода. Код возврата каретки может использоваться сам по себе для печати поверх существующей строки, а код перевода строки — для того, чтобы перей- ти к следующей, при этом не перемещаясь к левому краю страницы.
    Несмотря на то что кодировка ASCII — доминирующий стандарт в ком- пьютерном мире, она не используется во многих крупных компьютерных сис- темах IBM. Для мейнфреймов System/360 компания разработала собственный
    8-битный код EBCDIC (Extended BCD Interchange Code — расширенный дво- ично-десятичный код обмена информацией) — расширенный вариант более раннего 6-битного кода BCDIC, полученного из кодов, используемых на перфо- картах IBM. Эти перфокарты, позволяющие хранить по 80 текстовых символов, были созданы IBM в 1928 году и использовались на протяжении более 50 лет.
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    0123456789 00000000000000000000000000000000000000000000000000000000000000000000000000000000 11111111111111111111111111111111111111111111111111111111111111111111111111111111 22222222222222222222222222222222222222222222222222222222222222222222222222222222 33333333333333333333333333333333333333333333333333333333333333333333333333333333 44444444444444444444444444444444444444444444444444444444444444444444444444444444 55555555555555555555555555555555555555555555555555555555555555555555555555555555 66666666666666666666666666666666666666666666666666666666666666666666666666666666 77777777777777777777777777777777777777777777777777777777777777777777777777777777 88888888888888888888888888888888888888888888888888888888888888888888888888888888 99999999999999999999999999999999999999999999999999999999999999999999999999999999 1 2 3 5
    4 6 7 8 9 1011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 1 2 3 5
    4 6 7 8 9 1011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
    IBM 8081
    Рассматривая взаимосвязь между перфокартами и соответствующими им 8-битными кодами символов EBCDIC, имейте в виду, что эти коды раз- рабатывались на протяжении многих десятилетий под влиянием различных

    Глава 20. Набор символов ASCII
    339
    технологий. По этой причине не стоит ожидать от них излишней логичности или согласованности.
    На перфокарте символ кодируется комбинацией из одного или несколь- ких прямоугольных отверстий, пробитых в одном столбце. Сам символ часто печатается в верхней части карты. Нижние десять строк пронумерованы от 0 до 9. Ненумерованная строка над нулевой строкой считается одиннадцатой, а верхняя — двенадцатой; десятая строка отсутствует.
    Вот еще несколько терминов из области применения перфокарт IBM: строки с нулевой по девятую называются цифровыми строками, или цифро-
    вой пробивкой. Одиннадцатая и двенадцатая строки — зонные строки, или
    зонная пробивка. Иногда нулевая и девятая строки считались не цифровыми, а зонными, что вызывало путаницу.
    Восьмибитный код символа EBCDIC состоит из старшей и младшей тет- рад (четыре бита). Младшая тетрада — код BCD, соответствующий цифро- вой пробивке символа; старшая тетрада — код, который произвольно можно поставить в соответствие зонной пробивке символа. Из главы 19 вы помните, что BCD означает двоично-десятичный код — 4-битный код для цифр от 0 до 9.
    Для цифр от 0 до 9 не существует никакой зонной пробивки. Отсутствие пробивки соответствует старшей тетраде 1111. Младшая тетрада — код BCD цифровой пробивки. В следующей таблице приведены коды EBCDIC для цифр от 0 до 9.
    Шестнадцатеричный код
    Символ EBCDIC
    F0 0
    F1 1
    F2 2
    F3 3
    F4 4
    F5 5
    F6 6
    F7 7
    F8 8
    F9 9
    Для прописных букв тетрада 1100 соответствует зонной пробивке только двенадцатой строки, тетрада 1101 — зонной пробивке только одиннадцатой строки, тетрада 1110 — зонной пробивке только нулевой строки. Приведем коды EBCDIC для прописных букв.

    340
    Код
    1   ...   18   19   20   21   22   23   24   25   ...   28


    написать администратору сайта