Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Машинные языки Швидченко Д.В.на 4 Семестр / Теоретический материал / Арифметические операции с двоичными числами.docx
Скачиваний:
61
Добавлен:
11.02.2015
Размер:
1.02 Mб
Скачать

Арифметические операции

В настоящем разделе рассмотрим некоторые правила выполнения основных арифметических операций над числами в системах счисления с основанием 2, 8, 10 и 16 представленных в прямом, обратном или дополнительном коде.

Операция изменения знака

Выполнение операции изменения знака числа сводится:

• в прямом коде – к инвертированию знакового разряда кода;

• в обратном коде – к инвертированию знакового разряда и замене цифр всех значащих разрядов кода обратными;

• в дополнительном коде – к инвертированию знакового разряда и к вычислению дополнения значащих разрядов кода до веса знакового разряда.

Правило изменения знака в прямом коде очевидно. Правила изменения знака в обратном и дополнительном кодах следуют из правил преобразования прямого кода в обратный или в дополнительный код и наоборот, но не совпадают с последними. При преобразовании кодов знак сохраняется, а при изменении знака он инвертируется. В остальном правила аналогичны.

Внимание. В дополнительном коде нельзя изменить знак минимального числа (отрицательного максимального по модулю) при сохранении формата. Это следует из асимметрии представления чисел в дополнительных кодах. Если формат расширять нельзя, то изменению знака должна предшествовать проверка кода операнда на значение 1⎢00…0доп с последующим блокированием выполнения операции либо приняты меры для исключения образования этого значения на предшествующих этапах вычислений.

Следующие примеры пар кодов иллюстрируют результаты изменения знака операнда в различных кодах и системах счисления:

0⎢1011 1002п

0⎢7657 100

0⎢1011 100

0⎢9AF0 3616о

0⎢3764 430

1⎢1011 1002п

1⎢0120 700

1⎢0100 011

1⎢650F C916о

1⎢4013 347

1⎢F876 AB016д

0⎢1011 100

1⎢4019 34710о

0⎢7345 4268п

1⎢9876 20010д

0⎢0789 55016д

1⎢0100 100

0⎢5980 65210о

1⎢7345 4268п

0⎢0123 80010д

Сложение и вычитание чисел без знака

Сложение и вычитание беззнаковых чисел происходит по обычным для

позиционных систем счисления алгоритмам. Примеры (для n =3):

0012 +1002 = 1012

1012 – 0102 = 0112

Ситуации, когда уменьшаемое меньше вычитаемого или когда результат суммы не умещается в n разрядов, считаются ошибочными и должны отслеживаться устройством компьютера. Реакция на такие ошибки может быть различной в разных типах компьютеров.

Сложение

Операция алгебраического сложения в дополнительном коде

Как было отмечено ранее, алгоритмы выполнения операции алгебраического сложения в прямых кодах относительно сложны. В обратном и дополнительном кодах сложение выполняется проще, поскольку не возникает необходимость в анализе знаков операндов, в сравнении их модулей и т.п.

Сложение в дополнительном коде сводится к сложению одноименных разрядов чисел, начиная с младшего разряда включая знаковый разряд, с учетом переноса из предыдущего разряда. Знаковые разряды складываются по правилам сложения двоичных цифр с учетом переноса из предшествующего разряда. Перенос из знакового разряда отбрасывается. Полученный результат представлен в дополнительном коде.

Рассмотрим примеры сложения чисел в дополнительном коде. При их анализе обратите внимание на то, как складываются знаковые разряды.

Пусть операнды – десятичные числа –231,15 и +215,04. Их сумма равна –016,11.

Дополнительные коды операндов и суммы соответственно равны 1⎜768.85 0⎜215.04 и 1⎜983.89. Выполним сложение операндов в дополнительном коде:

Пусть десятичные операнды равны –231,15 и –215,04. Их сумма равна –446,19.

Дополнительные коды операндов и суммы: 1⎜768.85, 1⎜784.96 и 1⎜553.81. Выполним сложение дополнительных кодов слагаемых:

Примеры сложения двоичных чисел в дополнительном коде:

При сложении одноразрядных двоичных, восьмеричных или шестнадцатеричных чисел следует пользоваться таблицами сложения цифр в этих системах счисления или следующим правилом. Если количественному эквиваленту суммы цифр соответствует цифра из алфавита системы счисления, то перенос в следующий разряд равен нулю, а сумма равна цифре

соответствующей количественному эквиваленту суммы. Если количественный эквивалент суммы цифр больше количественного эквивалента максимальной цифры алфавита, то перенос в следующий разряд равен единице, а цифра суммы имеет количественный эквивалент суммы уменьшенный на основание системы счисления.

Например, в восьмеричной системе счисления 3+2=5 и перенос равен 0. Сумма 4+6=2 и перенос равен 1, так как количественный эквивалент суммы 4+6>7 (4+6=1010), а количественный эквивалент единицы переноса в восьмеричной системе счисления равен 8.

В шестнадцатеричной системе счисления 4+6=А (А имеет количественный эквивалент 1010) и перенос равен 0. Сумма 4+А=Е (Е=1410) и перенос равен 0. Сумма А+А=4 и перенос равен 1 так как вес переноса равен 1610, а А+А=2010.

Примеры сложения шестнадцатеричных чисел в дополнительных кодах.

Операция алгебраического сложения в обратном коде

Сложение в обратном коде выполняется также как и в дополнительном коде, но с той разницей, что перенос из знакового разряда не отбрасывается, а прибавляется к младшему разряду промежуточной суммы. Этот перенос называют циклическим. Результат сложения будет получен в обратном коде.

Примеры сложения двоичных чисел в обратном коде:

Примеры сложения восьмеричных чисел в обратном коде:

Сложение в обратном коде можно начинать с любого, необязательно с младшего разряда, что в некоторых случаях может быть полезно при реализации устройств.

Циклическое распространение переноса при сложении является серьезным недостатком обратного кода по сравнению с дополнительным кодом. Поэтому, несмотря на простоту преобразования прямого кода в обратный код и наоборот, и на простоту изменения знака числа в обратном коде, обратный код сравнительно редко применяют в устройствах вычислительной техники и автоматики.

Переполнение разрядной сетки при сложении

При ограниченной разрядной сетке диапазон представления чисел ограничен. Поэтому сумма двух операндов принадлежащих диапазону может оказаться за его пределами, что приведет к существенной ошибке в вычисленной сумме. Например, пусть в двоичном дополнительном пятиразрядном коде представлены целые положительные операнды со знаком 0⎢0111 (+7) и 0⎢1100 (+12). Сложим их по правилу сложения в дополнительном коде. Величина ошибки недопустимо велика и вызвана выходом правильного значения суммы 0⎢10011 (+19) за пределы диапазона (+15; –16) представления целых со знаком в двоичном дополнительном коде в выбранной пятиразрядной сетке. Такое явление называют переполнением разрядной сетки.

В ЭВМ применяют аппаратуру контроля переполнения разрядной сетки, назначение которой состоит в формировании сигнала R=1 при переполнении. В основу функционирования аппаратуры контроля могут быть положены различные алгоритмы.

Очевидно, что при сложении операндов с разными знаками модуль суммы меньше модуля любого из операндов. Поэтому при разных знаках операндов результат не может выйти за пределы диапазона представления чисел и, следовательно, R=0.

Переполнение разрядной сетки суммы может возникнуть только при одинаковых знаках операндов.

Если операнды положительны и их сумма не укладывается в диапазон представимых чисел, то при их сложении в дополнительном коде образуется перенос из старшего значащего разряда в разряд знака, который приводит к формированию ошибочного отрицательного результата. Поэтому признак переполнения при положительных операндах anan–1a1a0a–1a–2am и bnbn–1b1b0b–1b–2bm можно описать двумя вариантами булевого выражения:

где Sn – знаковый разряд суммы; pn – перенос в знаковый разряд.

Если оба операнда отрицательны и сумма выходит за пределы диапазона представляемых чисел, то отсутствие переноса в знаковый разряд приводит к ошибочному положительному результату. Поэтому признаки переполнения при отрицательных операндах – положительный знак результата или отсутствие переноса в знаковый разряд:

Сказанное позволяет определить булевы уравнения, описывающие варианты комбинационных схем вычисляющих признак переполнения разрядной сетки суммы:

Если R=1, то код суммы содержит ошибку.

Существует простой способ ее устранить. Для этого достаточно

• в двоичной системе счисления приписать к ошибочному результату слева знаковый разряд любого из операндов;

• в восьмеричной, десятичной и шестнадцатеричной системах счисления приписать к ошибочному результату слева знаковый разряд любого из операндов и, если знаковый разряд ошибочного результата равен нулю, заменить его на 6, 8 или E соответственно.

Например,