СЛОЖЕНИЕ И ВЫЧИТАНИЕ ЧИСЕЛ В ДОПОЛНИТЕЛЬНОМ КОДЕ

February 18, 2011 by admin Комментировать »

Графически 8-разрядные двоичные (2-разрядные шестнадцате- ричные) числа со знаком в дополнительном коде показаны на рис. 3.1 позициями (внутри круга указаны десятичные значения, снаружи – их шестнадцатеричные изображения). Сложение с положительным числом N легко интерпретировать, перемещая указатель по ходу часовой стрелки на N позиций; вычитание (-N) – против хода часовой стрелки или перемещая по ходу часовой стрелки на (256-N) позиций, что равносильно замене вычитания сложением с дополнением числа до 2^ = 256. Если при сложении (или вычитании) получают результат, который выходит за пределы диапазона чисел (от -128 до +127), фиксируется переполнение.

Правило выявления переполнения. При сложении переполнение возникает только в том случае, если слагаемые имеют одинаковые знаки, а знак суммы отличается от знака слагаемых. При вычитании переполнение происходит, если операнды имеют разные знаки, а знак разности отличается от знака уменьшаемого. Правило переполнения можно сформулировать иначе, используя понятие переносов, возникающих при сложении;вычитании. Переполнение OVR возникает, если значения переносов в знаковый разряд pv и из знакового разряда pg различны (OVR = pg Ф р?)- Из анализа рис. ЪЛ,а следует, что переполнение возникает при сложении, если указатель перейдет границу между позициями +127 и -128.

Числа в дополнительном коде складываются и вычитаются так же, как и числа без знака той же длины. Поэтому при сложении (вычитании) чисел со знаком и без знака необходима одна и та же команда сложения (вычитания). Различие заключается лишь в том, что результаты интерпретируются по-разному в зависимости от того, какими числами оперирует пользователь: числами со знаком (от -128 до +127) или без знака (от О до 255).

Рис. 3.1. Круговые диаграммы

На рис. 3.1, б представлены графически 8-разрядные двоичные (2-разрядные шестнадцатеричные) числа без знака. Видно, что двоичные кодовые комбинации занимают те же позиции, что и на рис. 3.1, а, а сложение и вычитание можно осуществить, перемещая указатель на N позиций в том или ином направлении.

При сложении чисел без знака результат выходит за пределы диапазона представления при пересечении границы между 255 и 0. В этом случае говорят о возникновении переноса из старшего разряда. При вычитании чисел без знака результат выходит за пределы диапазона при пересечении границы между О и 255. В этом случае возникает заем, а разность получается в дополнительном коде. Но так как вычитание N можно заменить сложением с дополнительным кодом числа N, равным (256 – N), то из диаграммы видно, что заем возникает без переноса из старшего разряда. Тот же вывод следует при выполнении операции в машинном коде. Действительно, вычитая из шестнадцатеричного числа $05 число $07, имеем $05 – $07 – $05 + $F9 = $FE = -2 . Переноса нет. Заем, определяемый по отсутствию переноса при операции вычитания, есть. И наоборот, вычитая из $07 число $05, имеем $07 – $05 = = $07 + $FB = $102 = $100 (перенос) + $02 = 2. Перенос есть, что при вычитании соответствует отсутствию заема. Сказанное необходимо учитывать при обработке операндов двойной длины, например 16-разрядных операндов в 8-разрядном процессоре.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты