Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОДЕРЖАНИЕ 3 (2).doc
Скачиваний:
46
Добавлен:
31.08.2019
Размер:
6 Мб
Скачать
☆
      1. Вычитание в дополнительном коде

Рассмотрим способы вычитания в дополнительном коде (вариант B) в одинаковых форматах. Особенности вычитания в дополнительных кодах в вариантах A и C оговорим отдельно.

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

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

Здесь

  • и – цифры уменьшаемого и вычитаемого в разряде ;

  • – значение займа в разряде ;

  • – значение разности в разряде ;

  • – значение займа из последующего разряда.

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

При вычитании чисел в системах счисления с основанием или значение разности цифр и заём определяют по таблицам или по следующему правилу.

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

Например, в восьмеричной системе счисления и заём из последующего разряда равен 0. Разность и заём из последующего разряда равен 1. Действительно, так как количественный эквивалент разности , то заём равен 1, а цифра разности будет равна .

В шестнадцатеричной системе счисления и заём из последующего разряда равен 0. Разность и заём из последующего разряда равен 1, т.к. и .

Вычитание с расширением поля значащих разрядов операндов на одну позицию слева.

Поскольку при вычитании чисел с разными знаками разрядность разности может превышать разрядность операндов на один разряд, предварительно расширим формат операндов влево на одну позицию целого, как это делалось при сложении (раздел 4.3.2). Это позволит исключить переполнение формата разности и вычислить результат точно.

A B C

Займы: 11 10100111 00 00 00000000 10 00 00000000 00

0|00100111|011 (+393/8) 1|11111001|101 (-63/8) 1|10001110|101(-1133/8)

- 0|01010011|101 (+835/8) - 0|01110001|011 (+1133/8) - 1|10001110|101 (-1133/8)

1|11010011|110 (-442/8) 1|10001000|010 (-1196/8) 0|00000000|000 (+0)

Пример 4-6. Выполнено вычитание двоичных чисел в дополнительном коде. Формат операндов расширен на один бит, выделенный жирным шрифтом. Результат вычитания в расширенном формате всегда точный.

Пример 4-7. Выполнено вычитание шестнадцатеричных чисел в дополнительном коде в формате операндов расширенном на одну позицию. Цифра в дополнительной позиции выделена жирным шрифтом.

Знаковые разряды вычисляются по правилам вычитания в двоичной системе счисления. Разность в дополнительном коде.

A B C D

11 1 01 00 00 0 00 000 00 110

0|0 27 |6 (+396/16) 1|FF9|A (-66/16) 1|F8E|A (-1136/16) 1|F00|0 (-256)

- 0|0 53 |A (+8310/16) - 0| 07 1|6 (+1136/16) - 1|F8E|A (-1136/16) - 0|0 FF|0 (+255)

1|FD3 |С (-444/16) 1|F8 8|4 (-11912/16) 0|0 0 0|0 (+0) 1|E01|0 (-511)

1|02C|4пр 1|077|Cпр 1|1FF|0пр

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

Выполнение операции при расширении поля операндов одним битом рассмотрим на примерах.

A B C D E F

1 1 100 0 0 000 11 010 11 010 00 011 00 101

0|027|6 0|097|6 0|097|6 0|071|6 1|172|4 (-27,6) 1|102|4 (-97,6)

- 0|053|4 - 0|071|6 - 1|128|4 (-71,6) - 1|102|4 (-97,6) - 1|146|6 (-53,4) - 0|071|6 (+71,6)

1|174|2 0|026|0 0|169|2 0|169|2 0|025|8 1|030|8

1|974|2д 0|026|0 0|169|2 0|169|2 0|025|8 1|830|8 доп

1|025|8пр 1|169|2пр

Пример 4-8. Здесь операнды представлены в десятичной системе счисления в дополнительном коде, причем формат операндов в целой части расширен на 1 бит выделенный жирным шрифтом. В нижней строке приведены результаты, передаваемые системе Записи.

Вычитание без расширения поля значащих разрядов операндов на одну позицию слева.

Можно не расширять поле целого, а лишь выравнивать идентичные поля операндов. Тогда код разности в формате операндов можно интерпретировать двояко:

  • как дополнительный код значащих разрядов точной разности без разряда знака;

  • как дополнительный код разности со знаком в формате операндов, но возможно переполненный.

В первом случае разряд знака точной разности должен быть вычислен по отдельным правилам. В двоично-кодированных системах счисления старший значащий разряд разности будет представлен в одном бите подобно тому, как это имеет место в примере 4-8.

Во втором случае следует вычислить признак R переполнения формата и при переполнении сформировать сигнал прерывания.

Знак разности можно вычислить следующими способами.

  1. Сложить по модулю 2 знаковые разряды операндов и заем из знакового разряда.

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

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

  1. Если отбрасываемый заем совпадает с займом из знакового разряда, код знака равен старшему значащему разряду; иначе – инверсии старшего значащего разряда.

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

A B C D E F

P=2 P=2 P=2 P=2 P=2 P=10

10000 01 100 00 000 01 111 10 000 00 0

0|0111 ( +7) 1|1001 (–7) 1|1100 (–4) 1|0000 (–16) 0|1111 (+15) 1|39 (–61)

-1|0100 (–12) - 0|1100 (+12) - 0|1100 (+12) - 0|1111 (+15) - 1|0001 (–15) - 0|39 (+39)

1 0011 0 1101 1 0000 0 0001 1 1110 1 00

0|10011 (+19) 1|01101 (–19) 1|10000 (–16) 1|00001 (–31) 0|11110 (+30) 1|900 (–100)

Пример 4-9. Выполнено вычитание в дополнительном коде без р

G L M N O P

P=16 P=16 P=16 P=16 P=16 P=10

10 1 01 0 00 0 01 1 10 0 10 0

0|B9 (+185) 1|47 (–185) 1|79 (–135) 1|00 (–256) 0|FF (+255) 0|87 (+87)

-1|8E (–114) - 0|72 (+114) - 0|79 (+121) - 0|FF (+255) - 1|01 (–255) - 1|75 (–25)

1 2B 0 D5 1 00 0 01 1 FE 1 12

0|12B (+299) 1|ED5 (–299) 1|F00 (–256) 1|E01 (–511) 0|1FE (+510) 0|112 (+112)

асширения поля целого операндов.

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

Проявление ситуации переполнения формата операндов разностью.

Если разность должна быть представлена в формате операндов, то возможна исключительная ситуация переполнения формата результата. Для ускорения вычислений целесообразно выполнять вычитание в формате операндов и считать, что старший разряд разности является разрядом знака. В процессе вычитания проявить признак R исключительной ситуации переполнения формата результата, и, если R=1, формировать сигнал прерывания, не обращаясь к системе Записи. При отсутствии переполнения (R=0) разность вычислена в формате операндов точно и может быть немедленно отправлена по назначению. При переполнении (R=1) точный результат может вычислить обработчик прерывания по переполнению программным способом.

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

  1. Знаки операндов разные и знак разности не совпадает со знаком уменьшаемого.

  1. Знаки операндов разные, а заем из разряда знака не равен коду знака вычитаемого.

  1. Заем из разряда знака не совпадает с займом, отбрасываемым при вычитании.

Вычисление признака R переполнения формата по правилу 2 выполняется одновременно с вычислением знака разности и отбрасываемого займа, а поэтому раньше, чем по правилам 1 и 3.

Вычисление признака переполнения по правилу 3 проще, чем по правилам 1 и 2, так как функция переполнения по правилу 3 зависит от двух переменных, а по правилам 1 и 2 от трех переменных.

Если код 1|00…0 не применяется для кодирования числа (варианты A и C дополнительного кода), то при определении признака переполнения необходимо дополнительно проверить код разности на равенство его 1|00…0.

Если дополнительный код 1|00…0 кодирует не число (вариант С), то ситуация сложившаяся в вариантах D и N примера 4-9 случиться не может, так как операнд с кодом 1|00…0 вызовет исключительную ситуацию невыполнимая операция и сигнал прерывания. Действия системы аналогичны описанным при сложении раздел 4.3.1. В вариантах C, F, M признак переполнения формата примет значение R=1, так как код суммы будет дополнительно проверен на значение 1|00…0 не применяемое для кодирования числа. Обработчик прерывания и в этом случае вычислит точное значение разности.

Если дополнительный код 1|00…0 кодирует число (-0) (вариант A), то операнды проверяют на наличие нулей в значащих разрядах кода. Если только уменьшаемое 0, то результат принимают равным вычитаемому с обратным знаком, так как . Если только вычитаемое 0, то результат равен уменьшаемому, так как . Если оба операнда нули и код знака уменьшаемого 1, а вычитаемого 0, то код результата 1|00…0, так как . Иначе код результата 0|00…0. При вычитании равных чисел результат должен быть равным (+0). Ситуация сложившаяся в вариантах D и N примера 4-9 случиться не может, так как операнд с кодом 1|00…0 имеет значение (-0). В вариантах C, F, M признак переполнения формата примет значение R=1.