- •Лабораторная работа № 1
- •Тема: Представление чисел и арифметические операции в прямом,
- •Обратном и дополнительном кодах в машинах с фиксированной запятой
- •Цель – освоить арифметические основы компьютерных операций
- •Варианты заданий ( по номеру в списке группы)
- •Теоретические положения
- •1. Прямой, обратный и дополнительный код
- •Прямой код
- •Обратный код
- •Дополнительный код
- •Модифицированный обратный код
- •Модифицированный дополнительный код
- •2. Сложение чисел в дополнительном коде
- •Сложение чисел в обратном коде
- •Контрольные вопросы к лабораторной работе 1.
Теоретические положения
1. Прямой, обратный и дополнительный код
В ЭВМ схемы, реализующие операцию сложения, получаются гораздо проще и компактнее, чем схемы, выполняющие операцию вычитания. Поэтому обычно в цифровых машинах применяют только схемы сложения, а операцию вычитания заменяют сложением специально подобранных кодов чисел.
Применяются следующие коды чисел: прямой, обратный и дополнительный. Прямой код применяют при умножении и делении, а обратный и дополнительный - используют для замены операции вычитания сложением. Существуют также модифицированные обратный и дополнительный коды. Изображения положительных чисел совпадают во всех трех кодах: прямом, обратном и дополнительном.
Обратный и дополнительный коды отрицательных чисел (а также их модификации) различны.
Простановка знака суммы при алгебраическом сложении должна производиться автоматически. Знаки (+) и (–) у слагаемых могут обозначаться только при помощи сигналов, "понятных" машине, т. е. при помощи нулей и единиц. При этом следует иметь в виду, что электронные считающие элементы назад не срабатывают, а поэтому вычитание в них заменяется сложением в дополнительном или обратном кодах. Рассмотрим сначала сложение в дополнительном коде. Пусть нужно произвести следующее действие: от 176 – 27, не используя вычитание. Условимся все числа писать с одинаковым количеством цифр, равным количеству цифр в наибольшем числе: 176 – 027. Заменив число 027 его дополнением до 1000, которое называется дополнительным кодом числа 027, т. е. числом 1000 – 973 = 027, получим: 176 – (1000 – 973) = 176 + 973 – 1000.
Решение: +176
973
_1149
1000
+149
Очевидно, в этом примере можно обойтись без вычитания, так как вычитание числа 1000 можно не производить, если единица переноса в старший разряд каким-либо действием будет обращена в нуль.
Рассмотрим еще один пример: 027 - 176.
Как и прежде, заменим число 176 его дополнением до 1000.
Тогда 027 - 176 = +027
824
_851
1000
-149
Здесь единицы переноса в старший разряд не образуется, но отрицательный результат получился в виде дополнения его до 1000.
Таким образом, в наших примерах получается, что если отрицательные слагаемые заменять их дополнением до 1000, то отрицательная сумма тоже получится в виде дополнения до 1000.
Положительные числа в приведенных примерах остаются без изменения. Применим это же правило для алгебраического сложения двух отрицательных чисел:
- 176 - 527 = - (1000 - 824) - (1000 - 473) = -1000 + 824 - 1000 + 473 =
= +824
473
_1297
1000
_297
1000
-703
Правило соблюдается и в этом примере. Условимся число (–1000) обозначать перед нашими числами в виде 1, а в случае его отсутствия ставить перед числом О. Тогда 1 будет ставиться перед всеми отрицательными числами:
176 - 027 = +0.176
1.973
0.149
_
По-видимому, можно 1 заменить 1, если при использовании 1 как знака производить “сложение" цифр, заменяющих знаки (+) и (–), по определенным правилам. В первом примере это правило выглядит так:
1 - 1
176 - 027 = +0.176
1.973
0.149, т.е. “сложение” цифр, заменяющих знаки, должно идти без переноса в старший разряд.
1
Во втором примере: 027 - 176 = + 0.027
1.824
1.851
Поскольку 1 изображается (-1000), то результат 1.851 есть дополнение числа 851 до 1000, взятое со знаком минус: 1.851 à 1.149 = - 149.
В третьем примере: -176 - 527 = + 1.824
1.473
1.297
Здесь также теряется единица переноса в старший разряд при "сложении” цифр, заменяющих знаки (+) и (–). Во всех трех примерах слагаемые трехзначные, а суммы не превосходят 1000. Рассмотрим примеры, в которых сумма не меньше тысячи при трехзначных слагаемых:
+0.176
0.825
1.001
Если придерживаться правила, предложенного в предыдущих примерах, то сумма 1.001 означает (– 1000 + 001) = – 999, что неправильно. В то же время, если сдвинуть всю сумму вправо, освободив место для знака, то результат 0.1001= + 1001 будет правильным, но станет четырехзначным. Рассмотрим случай, когда оба слагаемых отрицательны.
-176 - 825 = +1.824
1.175
0.999
Результат +999 явно неправилен, и если “сложение" знаков производить по предложенному правилу, то его даже невозможно исправить. Нужно сохранить единицу переноса в старший разряд знака, что можно сделать, выделив для обозначения знаков (+) и (–) два разряда. Такой код числа называется модифицированным дополнительным кодом. В этом коде очевидно плюс следует обозначать 00, а минус 11. Тогда при четырехзначной сумме трехзначных слагаемых получим:
+00.176
00.825
01.001
В двух разрядах для знака разные цифры: 0 и 1. Сдвинув всю сумму вправо, получим правильный результат 00.1001.
Рассмотрим другой пример:
- 176 - 825 = +11.824
11.175
10.999
В знаковом разряде опять-таки разные цифры: 1 и 0. Сдвинем результат вправо, причем в первом знаковом разряде поставим 1, а в цифровых разрядах получившегося числа 11.0999 заменим первый 0 на 1, а остальное число – его дополнением до 1000. Тогда получим правильный четырехзначный результат 11.1001.
Рассмотрим, будут ли справедливы все предложенные правила в общем случае для чисел в двоичной системе счисления.
В цифровых вычислительных машинах различными кодами изображаются только двоичные числа, являющиеся правильными дробями.