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

  • Входы Выходы D Clk Q Q

  • Входы Выходы Sel 2 Sel 1 Sel 0 Q

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


    Скачать 6.11 Mb.
    НазваниеКнига принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании
    Анкоркр гаряев
    Дата19.10.2022
    Размер6.11 Mb.
    Формат файлаpdf
    Имя файлаЧарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе.pdf
    ТипКнига
    #743064
    страница13 из 28
    1   ...   9   10   11   12   13   14   15   16   ...   28
    Двоичное число
    Шестнадцатеричное число
    Десятичное число
    0000 0
    0 0001 1
    1 0010 2
    2 0011 3
    3 0100 4
    4 0101 5
    5 0110 6
    6 0111 7
    7 1000 8
    8 1001 9
    9 1010
    A
    10 1011
    B
    11 1100
    C
    12 1101
    D
    13 1110
    E
    14 1111
    F
    15

    208
    Код
    Таким образом, двоичное число 10110110 можно представить шестнадцате- ричным числом B6, не рисуя футбольный мяч. Как вы помните, в предыдущих главах я указывал основание системы счисления с помощью нижнего индекса, например: 10110110
    ДВА
    — для двоичной системы; 2312
    ЧЕТЫРЕ
    — для четвертич- ной; 266
    ВОСЕМЬ
    — для восьмеричной; 182
    ДЕСЯТЬ
    — для десятичной.
    По аналогии мы можем использовать обозначение B6
    ШЕСТНАДЦАТЬ
    для шест- надцатеричной системы.
    Однако такое выражение чересчур громоздко. К счастью, для шестнадца- теричных чисел существуют и другие, более краткие, обозначения. Вы можете записать такое число следующим образом:
    B6
    HEX
    В этой книге я буду использовать распространенный способ представле- ния шестнадцатеричных чисел, предполагающий добавление к числу строч- ной латинской буквы h:
    B6h.
    В шестнадцатеричном числе положение каждой цифры соответствует сте- пени числа 16.
    Количество 1
    Количество 16
    Количество 256
    Количество 4096
    Количество 65 536
    Шестнадцатеричное число 9A48Ch можно представить так:
    9A48Ch = 9 × 10000h +
    A × 1000h +
    4 × 100h +
    8 × 10h +
    C × 1h.

    Глава 15. Байты и шестнадцатеричные числа
    209
    Это выражение можно записать, используя степени числа 16:
    9A48Ch = 9 × 16 4
    +
    A × 16 3
    +
    4 × 16 2
    +
    8 × 16 1
    +
    C × 16 0
    Или десятичные эквиваленты этих степеней:
    9A48Ch = 9 × 65 536 +
    A × 4096 +
    4 × 256 +
    8 × 16 +
    C × 1.
    Обратите внимание на отсутствие двусмысленности при записи отдель- ных цифр числа (9, А, 4, 8 и C) без нижнего индекса, обозначающего основание сис темы счисления. Девять — это 9, будь то десятичная или шестнадцатерич- ная система счисления. С другой стороны, А очевидно представляет шестнад- цатеричный эквивалент десятичного числа 10.
    По сути, преобразование всех цифр в десятичные числа позволяет выпол- нить расчет итогового значения:
    9A48Ch = 9 × 65 536 +
    10 × 4096 +
    4 × 256 +
    8 × 16 +
    12 × 1.
    В итоге получается число 631 948. Таким образом шестнадцатеричные чис- ла преобразуются в десятичные.
    Шаблон для преобразования любого четырехзначного шестнадцатерич- ного числа в десятичное выглядит следующим образом.
    × 4096
    +
    × 256
    × 16
    × 1
    +
    +
    =

    210
    Код
    В качестве примера преобразуем число 79ACh. Имейте в виду, что шест- надцатеричные цифры A и C эквивалентны десятичным числам 10 и 12.
    × 4096
    +
    × 256
    × 16
    × 1
    +
    +
    =
    28 672 2304 160 12 31 148 7
    9
    A
    C
    Преобразование десятичных чисел в шестнадцатеричные обычно пред- полагает выполнение операций деления. Число меньшее или равное 255 мож- но представить одним байтом, состоящим из двух шестнадцатеричных цифр.
    Чтобы вычислить эти две цифры, нужно разделить число на 16, в результате чего получится частное и остаток. Вернемся к примеру с десятичным числом
    182. Разделив 182 на 16, получим 11 (что соответствует цифре B в шестнадца- теричной системе) и 6 в остатке. Так, шестнадцатеричным эквивалентом де- сятичного числа 182 является B6h. Если десятичное число, которое вы хотите преобразовать, меньше 65 536, то шестнадцатеричный эквивалент будет состо- ять не более чем из четырех цифр. Шаблон для преобразования такого числа в шестнадцатеричное следующий.
    : 256
    : 16
    : 1
    : 4096
    Сначала поместите десятичное число в верхний левый прямоугольник.
    Это наше первое делимое. Разделим число на 4096 (первый делитель). Частное впишем в прямоугольник, расположенный под делимым, а остаток — в пря- моугольник справа от делимого. Этот остаток — новое делимое, которое мы разделим на 256. Вот как число 31 148 преобразуется в шестнадцатеричный формат.
    : 256
    : 16
    : 1 31 148 2476 172 12 7
    9 10 12
    : 4096
    Десятичные числа 10 и 12 соответствуют шестнадцатеричным цифрам A и C, поэтому результат равен 79ACh.

    Глава 15. Байты и шестнадцатеричные числа
    211
    Одна из проблем этой техники заключается в том, что для деления вы, ве- роятно, решите использовать калькулятор, а калькуляторы не показывают оста- ток от деления. Если вы разделите 31 148 на 4096 на калькуляторе, то получите
    7,6044921875. Чтобы рассчитать остаток, нужно умножить 4096 на 7 (получится
    28 672) и вычесть это значение из 31 148. Или умножить 4096 на 0,6044921875 — дробную часть результата от деления. (Правда, некоторые калькуляторы пред- усматривают функцию преобразования десятичных чисел в шестнадцатерич- ные и обратно.)
    Другой способ преобразования десятичных чисел от 0 до 65 535 в шест- надцатеричные предполагает разделение числа на два байта путем его де- ления на 256. Затем каждый байт делится на 16. Шаблон для этого следу- ющий.
    : 16
    : 16
    : 256
    Начнем сверху. После каждой операции деления частное помещается в пря- моугольник, расположенный слева от делителя, а остаток — в прямоугольник справа. Например, число 51 966 преобразуется таким образом.
    : 16
    : 16
    : 256 12 10 15 14 51966 202 254
    Шестнадцатеричными эквивалентами чисел 12, 10, 15 и 14 являются бук- вы С, А, F и Е, поэтому результат скорее напоминает слово, чем число.

    Код
    Далее представлена таблица сложения для шестнадцатеричной системы счисления.
    +
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    A
    B
    C
    D
    E
    F
    0
    0 1
    2 3
    4 5
    6 7
    8 9
    A
    B
    C
    D
    E
    F
    1
    1 2
    3 4
    5 6
    7 8
    9
    A
    B
    C
    D
    E
    F
    10
    2
    2 3
    4 5
    6 7
    8 9
    A
    B
    C
    D
    E
    F
    10 11
    3
    3 4
    5 6
    7 8
    9
    A
    B
    C
    D
    E
    F
    10 11 12
    4
    4 5
    6 7
    8 9
    A
    B
    C
    D
    E
    F
    10 11 12 13
    5
    5 6
    7 8
    9
    A
    B
    C
    D
    E
    F
    10 11 12 13 14
    6
    6 7
    8 9
    A
    B
    C
    D
    E
    F
    10 11 12 13 14 15
    7
    7 8
    9
    A
    B
    C
    D
    E
    F
    10 11 12 13 14 15 16
    8
    8 9
    A
    B
    C
    D
    E
    F
    10 11 12 13 14 15 16 17
    9
    9
    A
    B
    C
    D
    E
    F
    10 11 12 13 14 15 16 17 18
    A
    A
    B
    C
    D
    E
    F
    10 11 12 13 14 15 16 17 18 19
    B
    B
    C
    D
    E
    F
    10 11 12 13 14 15 16 17 18 19 1A
    C
    C
    D
    E
    F
    10 11 12 13 14 15 16 17 18 19 1A
    1B
    D
    D
    E
    F
    10 11 12 13 14 15 16 17 18 19 1A
    1B
    1C
    E
    E
    F
    10 11 12 13 14 15 16 17 18 19 1A
    1B
    1C 1D
    F
    F
    10 11 12 13 14 15 16 17 18 19 1A
    1B
    1C 1D
    1E
    Используя эту таблицу и обычные правила сложения в столбик, можно складывать шестнадцатеричные числа.
    4A3378E2
    +
    877AB982
    D1AE3264
    В главе 13 я упоминал, что для представления отрицательных чисел мож- но применять дополнение до двойки. Если вы имеете дело с 8-битными двоич- ными числами со знаком, то отрицательные числа начинаются с 1. В шестна- дцатеричной системе счисления двузначные числа со знаком отрицательные, если они начинаются с цифр 8, 9, A, B, C, D, E или F, поскольку их двоичные эквиваленты начинаются с 1. Например, число 99h может соответствовать либо десятичному числу 153 (если вы знаете, что имеете дело с однобайтны- ми числами без знака), либо десятичному числу –103 (если вы знаете, что это число со знаком).
    Кроме того, байт 99h может соответствовать и десятичному числу 99. Это интересно, но, похоже, противоречит всему, о чем мы говорили до сих пор.
    В главе 23 объясню, как это работает, а теперь остановимся на памяти.

    213
    Глава 16
    Сборка памяти
    Каждое утро, когда мы просыпаемся, включается наша память. Мы вспоми- наем, где находимся, что делали накануне, что планируем сделать сегодня. Па- мять возвращается сразу или фрагментами, и в течение еще нескольких ми- нут человек может чего-то не помнить («Забавно, я не помню, что лег спать в носках»), однако в целом мы способны восстановить непрерывность своей жизни, чтобы начать новый день.
    Разумеется, человеческая память не вполне упорядочена. Попытайтесь вспомнить что-нибудь из школьного курса геометрии. Вероятно, начнете ду- мать о сидевшем перед вами однокласснике или о том дне, когда сработала по- жарная тревога как раз в тот момент, когда учитель собирался объяснить вам, что значит выражение «что и требовалось доказать».
    Человеческая память не является вполне надежной. Письменность, воз- можно, была изобретена специально, чтобы компенсировать недостатки че- ловеческой памяти. Может быть, прошлой ночью вы внезапно проснулись в 3:00 с отличной идеей для сценария. Схватили ручку и бумагу, которые дер- жите у кровати специально для таких случаев, и записали идею. На следую- щее утро вы читаете свою блестящую мысль и начинаете работу над сценари- ем («Парень встречает девушку, погоня на машинах и взрывы»… и это всё?).
    Или не начинаете.
    Мы пишем, а затем читаем. Мы сохраняем, а потом извлекаем. Мы хра-
    ним информацию, а в дальнейшем получаем кней доступ. Функция памяти заключается в том, чтобы сохранять информацию без искажений между этими двумя событиями. Каждый раз, когда мы сохраняем информацию, мы исполь- зуем разные типы памяти. Бумага — хороший носитель для хранения тексто- вой информации, магнитная лента подходит для хранения музыки и фильмов.
    Телеграфные реле, будучи объединенными в вентили, а затем в триггеры, также могут хранить информацию. Как мы видели ранее, триггер способен хранить один бит. Это не очень много, но это начало. Как только мы научим- ся сохранять один бит, мы легко сможем справиться с двумя, тремя и более.

    214
    Код
    В главе 14 мы познакомились с D-триггером со срабатыванием по уров- ню, который состоит из инвертора, двух вентилей И и двух вентилей ИЛИ-НЕ.
    Q
    Данные
    Clk
    Q
    Когда вход Clk равен 1, выходной сигнал Q совпадает с входным сигна- лом «Данные». Когда значение входа Clk меняется на 0, выход Q сохраняет последнее значение входа «Данные». Дальнейшие изменения входного сигна- ла «Данные» не влияют на выходы до тех пор, пока значение входа Clk снова не изменится на 1. Вот таблица логики для триггера.
    Входы
    Выходы
    D
    Clk
    Q
    Q
    0 1
    0 1
    1 1
    1 0
    Х
    0
    Q
    Q
    В главе 14 этот триггер использовался в разных схемах, а сейчас он бу- дет применяться исключительно для хранения одного бита. По этой причине я собираюсь переименовать входы и выходы, чтобы они соответствовали цели.
    Ввод данных
    Запись
    Вывод данных
    Это тот же триггер, только теперь выход Q называется «Вывод данных»
    (Data Out, DO), а вход Clk («Запомнить этот бит») стал «Записью» (Write, W).
    Так же, как мы можем записать некоторую информацию на бумаге, сигнал
    «Запись» приводит к записи или сохранению сигнала «Ввод данных» (Data In,

    Глава 16. Сборка памяти
    215
    DI) в схеме. Обычно вход «Запись» равен 0, а сигнал «Ввод данных» не влия- ет на выход. Однако всякий раз, когда мы хотим сохранить значение сигна- ла «Ввод данных» в триггере, подаем на вход «Запись» 1, а затем снова 0. Как я упоминал в главе 14, схема такого типа также называется защелкой, посколь- ку она как бы «запирает» данные. Вот как мы можем представить однобитную защелку без изображения всех отдельных компонентов.
    DI
    W
    DO
    Мы можем достаточно легко объединить несколько однобитных защелок в многобитную. Все, что для этого нужно сделать, — соединить входы «Запись».
    Выходы
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    Входы
    Запись
    Эта 8-битная защелка содержит восемь входов и восемь выходов. Кроме того, защелка имеет один вход под названием «Запись», который обычно равен
    0. Чтобы сохранить 8-битное значение в этой защелке, подайте на вход «За- пись» 1, а затем 0. Эту защелку также можно изобразить следующим образом.
    W
    8-битная защелка
    DI
    7
    DI
    6
    DI
    5
    DI
    4
    DI
    3
    DI
    2
    DI
    1
    DI
    0
    DO
    7
    DO
    6
    DO
    5
    DO
    4
    DO
    3
    DO
    2
    DO
    1
    DO
    0
    Или так, чтобы она больше напоминала изображение однобитной.
    W
    DI
    DO
    8
    Ввод данных
    Вывод данных
    Запись
    8-битная защелка
    8

    216
    Код
    Другой способ соединения восьми однобитных защелок более сложен.
    Допустим, нам нужен только один сигнал «Ввод данных» и один сигнал «Вы- вод данных». Однако мы хотим сохранить значение сигнала «Ввод данных» восемь раз в течение дня или восемь раз в течение следующей минуты. Кро- ме того, мы хотим иметь возможность в дальнейшем просмотреть эти восемь значений, только бросив взгляд на один сигнал «Вывод данных».
    Другими словами, вместо сохранения одного 8-битного значения, как в случае с 8-битной защелкой, мы хотим сохранить восемь отдельных одно- битных значений.
    Почему мы хотим сделать именно так? Вероятно, потому, что у нас есть только одна лампочка.
    Мы знаем, что нам требуется восемь однобитных защелок. Давайте пока не будем волноваться, как именно данные в них сохраняются. Сосредоточимся на проверке сигналов «Вывод данных» этих восьми защелок, используя только одну лампочку. Конечно, мы могли бы проверять выход каждой защелки, вруч-
    ную перенося лампочку от одной защелки к другой, но мы бы предпочли более автоматизированный способ. Фактически мы хотим выбирать одну из восьми однобитных защелок, используя переключатели.
    Сколько переключателей нужно? Если хотим выбрать один из восьми эле- ментов, потребуются три переключателя. Три переключателя могут представ- лять восемь разных значений: 000, 001, 010, 011, 100, 101, 110 и 111.
    Итак, вот наши восемь однобитных защелок, три переключателя, лам- почка и устройство, которое необходимо поместить между переключателями и лампочкой.
    V
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    Что это?

    Глава 16. Сборка памяти
    217
    Устройство — это некий корпус с восемью входами сверху и тремя входа- ми слева. Замыкая и размыкая три переключателя, мы можем выбрать, какой из восьми входов должен быть перенаправлен на выход в нижней части кор- пуса. Этот выход зажигает лампочку.
    Так что же это за устройство? Мы уже видели что-то подобное, хотя и не с та- ким количеством входов. Оно похоже на схему, которую мы использовали в гла- ве 14 в первой модифицированной версии сумматора. В том случае нам нужно было нечто позволяющее выбрать, откуда должен поступать сигнал на вход сумматора: от ряда переключателей или с выхода защелки. Тогда мы назвали устройство селектором «2 на 1». В данном случае нам нужен селектор «8 на 1».
    Входы для выборки
    Селектор «8 на 1»
    D
    7
    D
    6
    D
    5
    D
    4
    D
    3
    D
    2
    D
    1
    D
    0
    Входы для данных
    Выход
    Sel
    0
    Sel
    1
    Sel
    2
    Селектор восьми линий на одну имеет восемь входов для данных (вверху) и три входа для выборки (Select, Sel) (слева). Входы Select позволяют выбрать, сигнал какого входа для данных появится на выходе. Например, если сигналы
    Select равны 000, то выходной сигнал совпадает с D
    0
    . Если входы Select равны
    111, то выходной сигнал совпадает с D
    7
    . Если входы Select — 101, выходной сигнал совпадает с D
    5
    . Приведем таблицу логики для этого селектора.
    Входы
    Выходы
    Sel
    2
    Sel
    1
    Sel
    0
    Q
    0 0
    0
    D
    0 0
    0 1
    D
    1 0
    1 0
    D
    2 0
    1 1
    D
    3 1
    0 0
    D
    4 1
    0 1
    D
    5 1
    1 0
    D
    6 1
    1 1
    D
    7

    218
    Код
    Селектор «8 на 1» состоит из трех инверторов, восьми четырехвходовых вентилей И и одного восьмивходового вентиля ИЛИ.
    Вывод
    D
    7
    D
    6
    D
    5
    D
    4
    D
    3
    D
    2
    D
    1
    D
    0
    Sel
    0
    Sel
    1
    Sel
    2
    Эта схема может показаться довольно запутанной, однако с помощью следующего примера постараюсь убедить вас, что она работает. Допустим, сигналы Sel
    2
    и Sel
    0 равны 1, а сигнал S
    1
    — 0. На входы шестого сверху вентиля
    И подаются сигналы Sel
    0
    , Sel
    1
    , Sel
    2
    , каждый из которых равен 1. Ни на один другой вентиль И эти три сигнала не подаются, поэтому выход всех осталь- ных вентилей И будет равен 1. Выход шестого вентиля И — 0 при D
    5
    , рав- ном 0, или 1 при D
    5
    , равном 1. То же касается крайнего справа вентиля ИЛИ.
    Таким образом, если сигналы для выборки равны 101, выходной сигнал со- впадает с сигналом D
    5
    Давайте еще раз повторим, чего хотим добиться. Мы пытаемся соединить восемь однобитных защелок так, чтобы в них можно было записывать и счи- тывать данные по отдельности, используя один сигнал «Ввод данных» и один сигнал «Вывод данных». Мы уже выяснили, что можно выбрать сигнал «Вывод данных» одной из восьми защелок, используя селектор «8 на 1».

    Глава 16. Сборка памяти
    219
    V
    DI
    W
    DO
    DI
    W
    DO
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    Селектор «8 на 1»
    Sel
    0
    Sel
    1
    Sel
    2
    Выход
    D
    7
    D
    6
    D
    5
    D
    4
    D
    3
    D
    2
    D
    1
    D
    0
    DI
    Итак, наша задача наполовину решена. Теперь, когда мы определились с устройством на выходе, давайте займемся входом.
    На входе мы имеем сигналы «Данные» и «Запись». Входы «Данные» заще- лок можно соединить между собой. Однако мы не можем сделать то же самое с сигналами «Запись», поскольку хотим записывать данные отдельно, следова- тельно, должны подавать один сигнал «Запись» на одну (и только одну!) защелку.
    V
    V
    Что это?
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    DI
    W
    DO
    Ввод данных
    Запись

    220
    Код
    Теперь нужна другая схема, которая немного похожа на селектор «8 на 1», но выполняет прямо противоположное действие. Эта схема называется деши-
    фратор «3 на 8». В главе 11 мы уже видели простой дешифратор данных, когда соединяли переключатели для выбора цвета нашей идеальной кошки.
    Дешифратор «3 на 8» имеет восемь выходов. В любой момент все эти вы- ходы равны 0, кроме одного, который выбран входными сигналами Sel
    0
    , Sel
    1
    и Sel
    2
    . Значение этого выхода совпадает со значением входа «Ввод данных».
    O
    7
    O
    6
    O
    5
    O
    4
    O
    3
    O
    2
    O
    1
    O
    0
    Sel
    0
    Sel
    1
    Sel
    2
    Ввод данных
    Обратите внимание: входными сигналами шестого вентиля И сверху яв- ляются Sel
    0
    , Sel
    1
    , Sel
    2
    . Они не подаются ни на один другой вентиль И, поэтому если на входы для выборки подается значение 101, то выходы всех остальных вентилей И будут равны 0. Вход шестого вентиля И может иметь значение 0, если вход «Ввод данных» равен 0, или 1, если вход «Ввод данных» равен 1. Пол- ная таблица логики имеет следующий вид.
    1   ...   9   10   11   12   13   14   15   16   ...   28


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