Представление слова МАМА в памяти
16 à 8C808C80
10 à 140128140128
8 à 214200214200
2 à 1000110010000001000110010000000
занимает 32 бита (4 байта)
Машинная арифметика
Способы изображения числовой информации в ЦВМ тесно связаны с организацией выполнения арифметических действий над этими изображениями чисел.
Операция умножения может выполняться как ряд последовательных сложений и сдвигов двоичных кодов чисел, а операция деления - как последовательность вычитаний, поэтому можно предположить, что четыре действия арифметики в ЦВМ можно свести лишь к двум: сложению и вычитанию и некоторым вспомогательным действиям над кодами, например сдвигам. Если же найти метод, позволяющий осуществлять операцию вычитания с помощью сложения (в сочетании с некоторой предварительной подготовкой чисел, участвующих в операции), то вычислительный процесс можно свести к последовательности сложений и преобразований операндов (кодов чисел, участвующих в операциях). Иначе говоря, выполнять все арифметические действия с помощью схемы, реализующей сложение (сумматора) и ряда вспомогательных схем (для преобразования кодов, их сдвигов).
Одним из достоинств двоичной системы счисления является возможность простой реализации не только сумматоров, но и схем, осуществляющих преобразования кодов из одной формы в другую, что позволяет практически осуществить выполнение всех арифметических операций с помощью операции суммирования кодов операндов.
Для изображения знака мантиссы и знака порядка числа также используются двоичные цифры 1 и 0. Например, знак «минус» изображается как «1», знак «плюс» - как «0». Так, число - 7 в ячейке памяти записывается как 1,111 ..., а число +7 - как 0,111 ... (запятая в ячейке никак не представлена и приведена здесь для удобства изложения) .
Такой способ записи положительных и отрицательных двоичных чисел называется прямым кодом. Он может использоваться для выполнения на сумматоре операций сложения положительных чисел и умножения чисел с произвольными знаками на основании правил двоичного сложения и умножения. Для реализации с помощью двоичного сумматора операций сложения чисел, имеющих разные знаки, разработаны специальные коды: дополнительный и обратный. Идея состоит в том, что операцию вычитания чисел, записанных в любой позиционной системе счисления, можно заменить операцией сложения уменьшаемого с алгебраическим дополнением вычитаемого. Например, операцию 53 - 23 = 30 можно заменить операцией
где 77 - алгебраическое дополнение (100 - 23) числа ( -23) .
Очевидно, что если не учитывать старшую единицу результата, то ответ получится правильным (30) . Как следует из примера, такая замена операций вычитания сложением связана с поиском алгебраического дополнения отрицательного числа, что в свою очередь требует реализации операции вычитания (в нашем примере 100 - 23 = 77) .
Это противоречие легко устраняется в двоичной системе счисления, где алгебраическое дополнение числа можно получить путем простого преобразования прямого кода отрицательного числа. Опуская доказательство, можно сказать, что обратный код отрицательного числа можно получить путем замены всех значащих цифр его мантиссы на противоположные, т. е. нулей - единицами, а единиц - нулями.
Например, обратный код отрицательного числа -0,1010110 имеет вид 1,0101001. Дополнительный код этого числа отличается от обратного тем, что в младший разряд обратного кода добавляется единица, т. е.
Здесь 1,0101010 - это дополнительный код числа -0,1010110. Простота аппаратного получения этих кодов делает идею замены операции вычитания сложением кодов технически реализуемой и, значит, позволяет свести выполнение всех арифметических действий к сложению кодов.
Пусть, например, необходимо осуществить операцию вычитания двоичных чисел 0,1110101 и 0,1010101 с помощью операции суммирования кодов. По правилам действий над двоичными числами
0,1110101
0,1010101
0,0100000
Воспользовавшись дополнительным кодом, получим:
Прямой код Дополнительный код
0,1110101 0,1110101
+
1,1110101 1,0101011
10,0100000
Старшая единица в разрядах знака во внимание не принимается (она оказывается вне разрядной сетки машины), результат равен 0,0100000. Как следует из примера, положительные числа в дополнительный и обратный коды не преобразуются. При выполнении операций сложения и вычитания знак результата получается автоматически (благодаря свойствам кодов). При умножении и делении знак произведения и частного выясняется с помощью отдельной схемы путем сложения содержимого знаковых разрядов по правилам:
Логические основы и элементная база ЦВМ
При обработке двоичных кодов вычислительная машина выполняет некоторые преобразования над их изображениями (наборами сигналов), в процессе которых образуются новые наборы сигналов, интерпретируемые как результаты операций. В устройствах, выполняющих указанные функциональные преобразования, в качестве входной информации используются обрабатываемые двоичные коды, а в качестве выходной - генерируются новые коды (результаты обработки).
Поскольку переменные и функции от них, принимающие только два значения (0 или 1), называют логическими, а двоичные коды, являющиеся объектами обработки в вычислительных машинах, представляют собой последовательности двоичных цифр, поступающие на обработку отдельные разряды этих кодов можно рассматривать как логические переменные, а полученные результаты - как логические функции.
Для связи простых переменных в выражениях (образования логических функций) используются знаки логических связей (знаки логических операций), составляющие аппарат алгебры логики - науки, которая формулирует правила действий над логическими переменными.
Рассмотрим некоторые из логических операций, широко используемых в теории ЦВМ для описания функционирования отдельных элементов аппаратуры и алгоритмов работы построенных на их базе устройств.
Операция отрицания реализует действие, называемое инверсией и заключающееся в изменении значения аргумента на противоположное, обозначается чертой над аргументом этой операции (читается как НЕ) . Так, если А = 1, то , если А = 0, то. , Функциональный элемент, реализующий операцию отрицания, называется инвертором, или схемой НЕ. Наборы таких элементов необходимы, например, для генерации дополнительных или обратных кодов отрицательных двоичных чисел.
Операция логического умножения, или конъюнкция, позволяет образовать логическую функцию, принимающую значение, равное единице, только тогда, когда все ее аргументы равны единице. Логическая связь этого типа обозначается символом который читается как И. Значение конъюнкции любого числа аргументов определяется с помощью таблицы логического умножения, имеющей вид:
Отсюда можно получить ряд обобщений: , используемых для упрощения выражений, содержащих более двух аргументов. Функциональный элемент, реализующий конъюнкцию аппаратно, называется схемой совпадения.
Операция логического сложения, или дизъюнкция, используется для образования логической функции, принимающей значение, равное нулю, только тогда, когда все ее аргументы также равны нулю. Такая логическая связь обозначается символом , который читается как ИЛИ. Значение дизъюнкции любого числа аргументов определяется с помощью таблицы логического сложения, имеющей вид:
На основании таблицы легко выводятся следующие обобщения
являющиеся основой для упрощения выражений, содержащих несколько аргументов. Функциональный элемент, аппаратно реализующий дизъюнкцию, называется собирательной схемой.
Операции логического умножения и сложения, подобно операциям алгебраического сложения и умножения, подчиняются переместительному, сочетательному и распределительному законам. На основании этих правил и указанных выше обобщений осуществляются преобразования и упрощения сложных логических зависимостей, содержащих функции типа И, ИЛИ и НЕ.
В алгебре логики используются и другие типы функций, однако можно доказать, что любые из них могут быть представлены как некоторые комбинации функций типа И, ИЛИ и НЕ, называемых поэтому основными. Это означает, что технические устройства, реализующие сколь угодно сложные операции преобразования данных, могут быть построены из элементов, реализующих лишь основные логические функции.
Поскольку в качестве таких элементов используются электронные схемы, современные цифровые вычислительные машины получили название электронных вычислительных машин (ЭВМ).
В качестве аргументов, поступающих на входы электронных схем, используются комбинации электрических сигналов, изображающие подлежащие преобразованию данные. При этом на выходах таких схем должны вырабатываются комбинации выходных электрических сигналов, изображающие результаты выполненных преобразований.
Характеристика таких сигналов зависит от типа используемых для построения схем элементов и здесь не рассматривается. Для удобства изложения будем далее считать, что отсутствие сигнала изображает двоичный код нуль, а его присутствие - двоичный код единица. Не вдаваясь в детали технической реализации логических схем, перечислим основные из них и рассмотрим приемы использования аппарата алгебры логики для описания и проектирования этих устройств.
Инвертор - схема, реализующая операцию отрицания (схема НЕ). Схема инвертора работает следующим образом: если сигнал на входе схемы отсутствует (код нуля), то на ее выходе есть сигнал (код единицы), и наоборот.
Схема совпадения - реализующая операцию (схема И). Код единицы на выходе такой схемы может появиться только в том случае, если на всех ее входах одновременно присутствуют коды единицы.
Собирательная схема - реализующая операцию (схема ИЛИ). Код нуля на выходе схемы может появиться только тогда, когда на всех ее входах одновременно присутствуют коды нуля.
Схемы И, ИЛИ и НЕ являются теми «кирпичиками», из которых строится все «здание» ЭВМ. Каким же образом осуществляется проектирование на этой элементной базе более крупных составляющих машин: блоков, узлов и устройств? Основой для такого проектирования является математический аппарат алгебры логики.
Вначале в соответствии с назначением проектируемого узла составляют таблицы, связывающие наборы его входных и выходных сигналов. Затем с помощью аппарата алгебры логики составляют логические формулы, описывающие указанные связи. После анализа и упрощения формул (если это возможно) на основании содержащихся в них логических функций создают структурную схему будущего узла. Для получения принципиальной схемы такого узла необходимо заменить каждый элемент структурной схемы конкретным физическим элементом, реализующим соответствующую операцию. В качестве примера ниже приведен разработки принципиальной схемы сумматора: