Коды
Когда у нас был всего один бит, мы имели всего два варианта хранимой информации. Теперь у нас есть целый байт, и мы можем использовать его уже для куда более сложных задач, чем управление светофором!
Давайте, подумаем, как можно использовать наш байт с пользой. У нас есть алфавит, в котором 32 заглавных и 32 прописных буквы. А ещё у нас есть цифры от 0 до 9, а ещё различные штуки, вроде знаков препинания, кавычек, различных специальных знаков в формулах и т.д. В компьютерном мире любую букву, цифру, знак препинания или любой другой знак принято называть единым названием «Символ». Так вот, если посчитать все символы, которые обычно используются в книгах, мы получим число около 120. А в нашем байте можно может быть целых 256 вариантов! Если каждому символу присвоить собственное значение, например А – 0000 0000, Б – 0000 0001, В – 0000 0010 и так далее, мы с лёгкостью сможем запомнить один любой символ, а чтобы запомнить целую книгу, нам просто понадобится столько байтов, сколько символов в этой книге. Вот видите? В компьютере всё-таки нет никаких букв или цифр. Внутри по-прежнему только биты и их состояния.
Допустим, мы придумали соответствие состояний бита каждому символу и теперь можем записать в память компьютера и прочитать какую-либо книгу. Но как эту книгу прочитать на другом компьютере? Для этого на заре компьютеро-строения были придуманы специальные стандарты.
Один из них «Американский стандартный код» ASCII– читается как «aass-key». В таблице приведены коды этого стандарта для некоторых букв латиницы. Примерно так выглядят коды и остальных символов, думаю, приводить здесь полный список всех кодов нет необходимости. Обратите внимание, что разработчики сделали стандарт таким образом, что коды заглавных и строчных букв отличаются только третьим слева битом.
Таким образом, чтобы написать фразу «Hello Joe», например, нам понадобится девять байтов. «Почему девять, если букв всего восемь?» - спросите вы. Ответ прост: потому что компьютер не понимает, что вы храните в памяти и понятия не имеет о том, что такое буквы и слова и поэтому пустое пространство между словами тоже является символом (пробел). Кстати, код пробела 0010 0000.
Теперь давайте поместим в какой-то байт код 0100 0101, Который, согласно стандарту ASCII, соответствует латинской букве «Е». Будет ли это означать, что мы поместили в байт букву «Е»? Не совсем. Это значит, лишь то, что мы поместили в наш байт код, который по стандарту ASCIIсоответствует букве «Е». Ведь если бы Томас Эдисон установил в ряд восемь лампочек и включил бы вторую, шестую и восьмую из них, увидел бы хоть кто-то в этой инсталляции букву «Е»? Конечно же, - нет, так как стандарт ASCII, как и компьютеры, ещё даже не изобрели. В каждом байте может быть записан только какой-то код. Код – это что-то, что связывает каждое из 256 возможных вариантов байта с чем-то ещё.
Возвращение байта
Помните память на один байт, которую мы рисовали чуть ранее, где были объединены восемь бит с общим разрешающим ‘s’ сигналом? Практически каждый раз, когда нам необходимо запомнить байт в компьютере, нам так же нужно кое-что, что подключалось бы к «выходу» байта. Это «кое-что» состоит из восьми элементов «ИС» и называется такая штука «enabler» (англ. «Активатор»). Слева показана подробная схема, а справа сокращённая.
Вторые входы всех восьми элементов объединены и подключены к общему контакту ‘e’ «enable» - «разрешение». Данные байта проходят на выход, только если ‘e’ включен. Таким образом, активатор пропускает биты, если e = 1 и не пропускает, если e = 0. Теперь подключим наш активатор к байту, как показано на рисунке слева.
Эта комбинация активатора и байта имеет собственное название «регистр» и на схемах в более удобном виде отображается как на рисунке справа.
Далее мы будем часто пользоваться регистром при составлении схем. И в некоторых схемах нам не нужно будет отключать активатор, поэтому в таких случаях мы будем отображать только контакт ‘s’. В таком случае мы могли бы называть его просто «байт», скажете вы. Но делать этого мы не будем потому, что регистр назван так не случайно. Дело в том, что название регистр означает: сохранение информации в определённом месте. Более подробно это явление мы разберём позже.
Чудо-Шина
Вообще в компьютере много мест, где проходят по восемь проводов между входами и выходами устройств и рисовать все эти линии крайне утомительно. Давайте-ка заменим восемь параллельных линий данных всего двумя. Теперь наш регистр примет вот такой вид:
Зачем это делать? Да просто потому, что так проще рисовать и проще понимать схемы. А когда мы будем соединять параллельно несколько линий данных отнескольких устройств, будем изображать это таким образом:
В компьютерах, такие группы из восьми проводов используются повсеместно. И называется это «Шина» (в англ. «bus»). Почему именно такое название? Скорее всего, это название перекочевало из силовой электрики, где шиной называют основные силовые провода. В английской версии названия (bus – англ. Автобус), это связано с транспортировкой, ведь по шинам транспортируются данные.
В следующем примере у нас есть пять регистров, каждый из которых имеет вход и выход, и все эти регистры подключены к общей шине:
Если все ‘s’ и ‘e’ во всех битах будут выключены, то все регистры будут держать свои данные при себе. Допустим, нам надо скопировать данные из R1 в R4. Сначала мы должны включить ‘e’ регистра R1. Данные из R1 появятся на шине и будут доступны для записи в любой другой регистр. Теперь если мы кратковременно включим ‘s’ регистра R4, данные из шины запишутся в этот регистр. Таким же образом мы можем скопировать данные из любого регистра в любой регистр, причём копировать данные можно сразу в несколько регистров одновременно. Вот что нельзя делать, так это включать ‘e’ на нескольких регистрах одновременно, ведь это приведёт к тому, что по одним и тем же проводам мы будем пытаться передать данные от двух регистров, а это невозможно.
Итак, раз уж входы и выходы регистров всё равно физически подключены к одной шине, то давайте ещё немного упростим их начертание на схеме. Изображать регистр можно любым из показанных способов:
Итак, закрепим понимание работы регистров. Байт может иметь одно из 256 состояний. Когда говорят «перенести байт из R1 в R2», это не значит, что байт куда-то физически перемещается в компьютере. Это означает, что состояние байта в регистре R4 станет идентичным состоянию байта в R1.
Еще больше логических элементов
Теперь мы рассмотрим ещё две комбинации из простых логических элементов. Первая комбинация понадобится, если нам будет необходимо более двух входов в элементе «И». Теперь, чтобы на выходе ‘d’ появилась 1, нужно чтобы на всех входах ‘a’, ’b’и ‘c’ также была 1. Слева изображена подробная схема, а справа – более лаконичная:
Таблица истинности для такого элемента будет выглядеть следующим образом:
Как вы уже догадались, таким образом, количество входов вентиля И можно увеличивать сколько угодно. Но так как это всё равно остаётся элементом И, то единица на выходе всегда будет только в одном единственном случае.
Теперь пришло время узнать о чём-то новеньком. Это будет необычный элемент, так как у него выходов больше, чем входов. А именно два входа и четыре выхода. Это не очень сложное устройство включает в себя два элемента НЕ и четыре И. На схеме ниже ‘a’ и ‘b’ – это входы, которые подключены к элементам НЕ. Элементы НЕ, естественно, инвертируют состояния входов. Таким образом, каждый вход имеет два провода, по одному из которых передаётся состояние «как есть», а по другому - в инвертированном виде. Далее по схеме установлены четыре элемента И таким образом, что на каждый элемент приходится один из четырёх вариантов состояний двух входов. Первый элемент И срабатывает, когда оба входа выключены, второй И – когда ‘a’ включен, а ‘b’ выключен, и т.д. В данной схеме включенным может быть всегда только один выход.
Таблица истинности:
Эта комбинация называется «Декодер». Это значит, что на входы приходит некий код, а на выходе мы получаем номер этого кода. У рассмотренного нами декодера два входа, а значит, есть четыре возможных состояния этих двух входов. Поэтому у данного декодера есть четыре выхода, каждый из которых отображает конкретное состояние.
Декодер так же можно сделать больше, добавив входы. Если у декодера будет три входа, то возможных комбинаций уже будет восемь, соответственно и выходов столько же. Если построить декодер с четырьмя входами, то выходов уже будет 16. Декодеры можно маркировать так количество входов «х» количество выходов. Например: 2х4, 3х8, 4х16, 5х32, 6х64 и т.д.
Устройство это крайне полезное, но если рисовать декодер 2х4 ещё куда ни шло, то любой больший декодер нарисовать уже куда сложнее. Только взгляните на декодер 3х8:
В общем, рисовать декодер каждый раз таким образом довольно затратно. Поэтому, давайте упростим его до «коробки»:
Часть 2 - Назад Далее - Часть 4