Умножение в дополнительных кодах без коррекции

Наряду с традиционным методом умножения в дополнительных кодах, требующим коррекции результата, достаточно широкое применение в ЭВМ находит метод Бута, при котором не требуется выполнять коррекцию. Особенность метода состоит в выполнении сложения или вычитания СЧП и множимого на каждом шаге умножения в зависимости от того, как после сдвига вправо изменяется младший разряд множителя. При его изменении с единицы на ноль производится сложение СЧП с множимым, а при изменении с нуля на единицу – вычитание множимого из СЧП, которое может быть реализовано как сложение с дополнением множимого. Если младший разряд множителя при сдвиге не изменяется, то на данном шаге не производится сложения (вычитания), а выполняется только сдвиг СЧП и множителя вправо.

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

Необходимо отметить, что:

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

б) При умножении на младшие нули множителя осуществляется сдвиг нулевой СЧП и множителя вправо до появления единицы в младшем разряде множителя, после чего производится вычитание множимого из СЧП.

Пример 2. A = 11, B = 15.

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

[+A]пр = 0.1011; [–A]доп= 1.0101;

[+B]пр= 0.1111; [–B]доп= 1.0001.

а) Оба операнда положительные (A > 0, B > 0):

СЧП 0 0 0 0 0 0 1 1 1 1 Обнуление старших разрядов СЧП
[–A]доп СЧП 1 0 1 0 1 1 0 1 0 1 1 1 0 1 0   0 1 1 1 1 1│0 1 1 1 Младший разряд множителя равен 1: вычитание множимого из СЧП Сдвиг СЧП и множителя вправо
  1 1 1 0 1   0 1│0 1 1 При сдвиге младший разряд не изменился Сдвиг СЧП и множителя вправо
  1 1 1 1 0   1 0 1│0 1 При сдвиге младший разряд не изменился Сдвиг СЧП и множителя вправо
  1 1 1 1 1   0 1 0 1│0 При сдвиге младший разряд не изменился Сдвиг СЧП и множителя вправо
[A]пр СЧП   0 1 0 1 1 0 1 0 1 0   0 0 1 0 1   0 1 0 1│0   0 0 1 0 1 При сдвиге младший разряд множителя изменился с 1 на 0: сложение СЧП с множимым Сдвиг СЧП и множителя вправо

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

[C]пр = 20 + 22 + 25 + 27 = 1 + 4 + 32 + 128 = 165.

б) Оба операнда отрицательные (A < 0, B < 0):

СЧП 0 0 0 0 0 1 0 0 0 1 Обнуление старших разрядов СЧП
[–A]пр СЧП 0 1 0 1 1 0 1 0 1 1 0 0 1 0 1   1 0 0 0 1 1│1 0 0 0 Вычитание множимого из СЧП   Сдвиг СЧП и множителя вправо
[A]доп СЧП 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1   1│1 0 0 0 0 1│1 0 0 Сложение СЧП с множимым   Сдвиг СЧП и множителя вправо
1 1 1 1 0 1 0 1│1 0 Сдвиг СЧП и множителя вправо
1 1 1 1 1 0 1 0 1│1 Сдвиг СЧП и множителя вправо
[–A]пр СЧП 0 1 0 1 1 0 1 0 1 0 0 0 1 0 1   0 1 0 1│1 0 0 1 0 1 Сложение СЧП с множимым   Сдвиг СЧП и множителя вправо

П

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

[C]пр = [A]доп × [B]доп = (0.010100101)2 = (165)10

Задание 5 Деление целых чисел

1. Выполнить операцию деления заданных целых чисел A и B со всеми комбинациями знаков, используя метод деления в дополнительных кодах. Для представления делимого (A) использовать 16 двоичных разрядов (один –знаковый и 15 – цифровых), для представления делителя (B) – 8 разрядов (один – знаковый и 7 – цифровых). Остаток от деления и частное представляются в той же разрядной сетке, что и делитель.

2. Результаты операции представить в десятичной системе счисления и проверить их правильность.

Варианты задания приведены в табл.5 приложения 1.

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

Использование метода деления в дополнительных кодах предполагает, что положительные операнды участвуют в операции в прямом, а отрицательные – в дополнительном коде. Результат операции (остаток и частное) получается в коде, зависящем от знака. Знак частного определяется знаками делимого и делителя и формируется в ходе выполнения операции по тем же правилам, что и цифровые разряды. Знак остатка должен совпадать со знаком делимого. Нулевые частное и остаток содержат в знаковом разряде ноль («положительный» ноль) независимо от знаков операндов.

Формирование частного. Операция деления при ее реализации в ЭВМ представляет собой многошаговый процесс, на каждом шаге которого формируется один разряд частного (знаковый или цифровой). Значение разряда частного зависит от знаков делителя и остатка, полученного на данном шаге. При их совпадении формируемый разряд частного равен единице, при несовпадении – нулю.

Разряды частного заносятся на место освобождающихся при сдвиге влево младших разрядов делимого (остатка). Частное формируется, начиная от старших разрядов. На первом шаге деления вырабатывается его знаковый разряд, а на последующих – цифровые разряды.

Действия над остатком. На каждом шаге деления производится удвоение остатка, полученного на предыдущем шаге, посредством его сдвига на один разряд влево (на первом шаге производится сдвиг делимого) и формирование нового остатка путем сложения старших разрядов с делителем или вычитания делителя из старших разрядов остатка. Вычитание делителя, как правило, заменяется сложением с его дополнением. Действие, выполняемое над остатком, определяется знаками остатка и делителя. При их совпадении производится вычитание делителя из остатка, при несовпадении – делитель прибавляется к остатку.

Следует помнить, что:

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

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

Коррекция результата. Результат операции деления (остаток и частное) может потребовать коррекции. Коррекция остатка производится в случае несовпадения знака окончательного остатка, полученного после формирования всех разрядов частного, со знаком делимого и состоит в сложении остатка с делителем или в вычитании делителя из него. Действие, выполняемое при коррекции остатка, определяется так же, как и в основном цикле деления, связанном с формированием разрядов частного, т.е. зависит от совпадения или несовпадения знаков делителя и остатка. Исключением из этого правила является нулевой остаток, который независимо от знака делимого не подлежит коррекции.

Кроме общего правила коррекции остатка, существует особый случай, который имеет место при получении нулевого промежуточного остатка на каком-либо шаге деления. На следующем шаге к нулевому остатку, который имеет знак “+”, будет прибавлен отрицательный делитель или его дополнение при положительном делителе. При сдвиге полученного остатка влево на последующем шаге его величина удвоится. Сложение отрицательного остатка с положительным делителем (или с дополнением отрицательного делителя) снова дает отрицательный остаток, по модулю равный величине делителя. Если же в этом случае делимое отрицательное, то получаемый в конце операции отрицательный остаток не может быть скорректирован по общему правилу, так как имеет знак, совпадающий со знаком делимого. Вследствие этого общее правило коррекции остатка дополняется следующим: при отрицательных остатке и делимом производится сравнение модулей остатка и делителя и, если они совпадают, осуществляется коррекция остатка по общему правилу, после чего остаток становится нулевым.

Практическая реализация этого случая на ЭВМ может быть осуществлена следующим образом. При получении отрицательного окончательного остатка в случае отрицательного делимого делается попытка скорректировать полученный остаток. Если в результате коррекции получается нулевой остаток, он является правильным. При получении ненулевого остатка он восстанавливается путем сложения с делителем (если делитель положительный) или с его дополнением (если делитель отрицательный).

Коррекция частного производится при получении нулевого остатка в случае отрицательного делимого и состоит в вычитании единицы из отрицательного частного (делитель положительный) или в прибавлении единицы к положительному частному (делитель отрицательный)

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

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

а) │А│/│В│ < 2n , при одинаковых знаках операндов;

б) │A│/│B│ < 2n + 1, при разных знаках операндов,

где n – число цифровых разрядов частного (делителя).

Правая часть этих неравенств определяется максимальным по модулю целым числом, которое можно представить в формате с использованием n цифровых разрядов (с учетом знакового разряда формат частного составляет n+1 разрядов). При этом предполагается, что положительное частное представляется в прямом коде (случай а), а отрицательное – в дополнительном (случай б).

Для проверки корректности деления вычисляется разность:

а) │А│–│В│ ´ 2n, при одинаковых знаках операндов;

б) │А│–│В│–│В│ ´ 2n, при разных знаках операндов – и в зависимости от знака этой разности устанавливается корректность или некорректность деления.

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

Фактически проверка корректности деления, выполняемая путем так называемого «пробного вычитания», совмещается с первым шагом деления, на котором вырабатывается знаковый разряд частного. На этом шаге при одинаковых знаках операндов производится сдвиг делимого на один разряд влево, и затем вычитание делителя (сложение его с дополнением) из его старших разрядов. Знак остатка, полученного на первом шаге, сравнивается со знаком делимого, и если они совпадают, то процесс деления завершается ввиду некорректности результата.

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

Особенности проверки корректности деления:

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

б) При сложении делимого с делителем, выровненным по младшим разрядам, старшие разряды делителя дополняются его знаковым разрядом (расширение знака на старшие разряды).

в) Некорректность деления сказывается на неправильном формировании знака частного на первом шаге деления. Действительно, при одинаковых знаках операндов частное должно иметь знак “+”, однако при совпадении знака первого остатка со знаком делимого (и следовательно делителя) в качестве знакового разряда частного сформируется единица (знак “–”). Аналогично при разных знаках операндов частное должно иметь знак “–”, но при совпадении знаков остатка и делимого (и, следовательно, несовпадении знаков остатка и делителя) в качестве знакового разряда сформируется ноль (знак “+”).

Пример 1. Деление с ненулевым остатком.

А = 139, В = 13.

Для иллюстрации метода используется укороченная по сравнению с заданием разрядная сетка: для делимого 10 разрядов (один знаковый и 9 – цифровых), для делителя, остатка и частного – 5 разрядов (один знаковый и 4 – цифровых).

Представление операндов с разными знаками в разрядной сетке:

[+А]пр = 0.010001011; [–А]доп = 1.101110101;

[+В]пр = 0.1101; [–В]доп = 1.0011.

а) Делимое положительное (A > 0), делитель отрицательный (B < 0):

№ шага Операнды и действия Делимое и остаток (старшие разряды) Делимое и остаток (младшие разряды), частное Пояснения
[A]пр 0 0 1 0 0 0 1 0 1 1 Делимое
  [B]доп [B]доп 1 1 1 1 1 0 0 0 1 1   0 0 1 1 1   1 0 0 1 1 1 1 0 1 0   1 1 0 1 0 ЗнR1=ЗнВ 1 0 0 1 1 1 1 1 1 0   1 1 1 0│0   1 1 1 0│1   Сложение с делителем, выровненным по младшим разрядам Сдвиг остатка влево Сложение с делителем, выровненным по старшим разрядам Знак первого остатка не совпадает со знаком делимого–деление корректно Формирование знака част­ного
[–B]пр 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 ЗнR2≠ЗнВ 1 1 0│1 0     1 1 0│1 0 Сдвиг остатка влево Вычитание делителя Формирование цифры частного
[B]доп 0 0 1 0 1 1 0 0 1 1 1 1 0 0 0 ЗнR3=ЗнВ 1 0│1 0 0     1 0│1 0 1   Сдвиг остатка влево Сложение с делителем Формирование цифры частного
[–B]пр 1 0 0 0 1 0 1 1 0 1 1 1 1 1 0 ЗнR4=ЗнВ 0│1 0 1 0     0│1 0 1 1   Сдвиг остатка влево Вычитание делителя Формирование цифры частного
[–B]пр 1 1 1 0 0 0 1 1 0 1 0 1 0 0 1 ЗнR5≠ЗнВ 1 0 1 1 0     1 0 1 1 0   Сдвиг остатка влево Вычитание делителя Формирование цифры частного

В результате выполнения операции получено отрицательное частное

[C]доп = (1.0110)2, [C]пр = (1.1010)2 = (–10)10 и положительный остаток

[R]пр = (0.1001)2 = (+9)10, которые соответствуют истинным значениям:

(–10) ´ (–13) + 9 = 139.

б) Делимое отрицательное (A < 0), делитель положительный (B > 0):

[A]доп 1 1 0 1 1 1 0 1 0 1 Делимое
  [B]пр [B]пр R1 0 0 0 0 0 1 1 1 0 0   1 1 0 0 0   0 1 1 0 1 0 0 1 0 1   0 0 1 0 1   ЗнR1=ЗнВ 0 1 1 0 1 0 0 0 1 0   0 0 1 0│0   0 0 1 0│1 Сложение с делителем, выровненным по младшим разрядам Сдвиг остатка влево Сложение с делителем, выровненным по старшим разрядам Знак первого остатка не совпадает со знаком делимого–деление корректно Формирование знака част­ного
[–B]доп R2 0 1 0 1 0 1 0 0 1 1 1 1 1 0 1   ЗнR2≠ЗнВ 0 1 0│1 0   0 1 0│1 0 Сдвиг остатка влево   Вычитание делителя Формирование цифры частного
[B]пр R3 1 1 0 1 0 0 1 1 0 1 0 0 1 1 1   ЗнR3=ЗнВ 1 0│1 0 0   1 0│1 0 1 Сдвиг остатка влево   Сложение с делителем Формирование цифры частного
[–B]доп R4 0 1 1 1 1 1 0 0 1 1 0 0 0 1 0   ЗнR4=ЗнВ 0│1 0 1 0   0│1 0 1 1 Сдвиг остатка влево   Вычитание делителя Формирование цифры частного
[–B]доп R5 0 0 1 0 0 1 0 0 1 1 1 0 1 1 1   ЗнR5≠ЗнВ 1 0 1 1 0   1 0 1 1 0   Сдвиг остатка влево   Вычитание делителя Формирование цифры частного

В результате выполнения операции получено отрицательное частное

[C]доп = (1.0110)2, [C]пр = (1.1010)2 = (–10)10 и отрицательный остаток

[R]доп = (1.0111)2, [R]пр = (1.1001)2 = (–9)10, которые соответствуют истинным значениям: (–10) ´ 13 + (–9) = –139.

в) Оба операнда отрицательные (A < 0, B < 0):

[A]доп 1 1 0 1 1 1 0 1 0 1 Делимое
  [–B]пр R1 1 0 1 1 1 0 1 1 0 1 0 0 1 0 0   0 0 1 0 0   ЗнR1≠ЗнВ 0 1 0 1│0   0 1 0 1│0 Сдвиг делимого влево Вычитание делителя Знак первого остатка не совпадает со знаком делимого–деление корректно   Формирование знака частного
[B]доп   R2 0 1 0 0 0 1 0 0 1 1 1 1 0 1 1 ЗнR2=ЗнВ 1 0 1│0 0   1 0 1│0 1 Сдвиг остатка влево   Сложение с делителем Формирование цифры частного
[–B]пр   R3 1 0 1 1 1 0 1 1 0 1 0 0 1 0 0 ЗнR3≠ЗнВ 0 1│0 1 0   0 1│0 1 0 Сдвиг остатка влево   Вычитание делителя Формирование цифры частного
[B]доп   R4 0 1 0 0 0 1 0 0 1 1 1 1 0 1 1 ЗнR4=ЗнВ 1│0 1 0 0   1│0 1 0 1 Сдвиг остатка влево   Сложение с делителем Формирование цифры частного
[–B]пр R5 1 0 1 1 1 0 1 1 0 1 0 0 1 0 0 ЗнR5≠ЗнВ 0 1 0 1 0   0 1 0 1 0   Сдвиг остатка влево   Вычитание делителя Формирование цифры частного
[B]доп   R6 1 0 0 1 1 _________ 1 0 1 1 1     0 1 0 1 0 Коррекция остатка: сложение с делителем Результат

В результате выполнения операции получено положительное частное

[C]пр = (0.1010)2 = (+10)10 и отрицательный остаток [R]доп = (1.0111)2, [R]пр = (1.1001)2 = (–9)10, которые соответствуют истинным значениям: 10 ´ (–13) – 9 = –139.

Пример 2. Деление с нулевым остатком.

А = 72, В = 6.

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

[+А]пр = 0.001001000; [–А]доп = 1.110111000;

[+В]пр = 0.0110; [–В]доп = 1.1010.

а) Делимое отрицательное (A < 0), делитель положительный (B > 0):

[A]доп 1 1 1 0 1 1 1 0 0 0 Делимое
  [B]пр [B]пр   R1 0 0 0 0 0 1 1 1 0 1   1 1 0 1 1   0 0 1 1 0 0 0 0 0 1   0 0 0 0 1   ЗнR1=ЗнВ 0 0 1 1 0 1 1 1 1 0   1 1 1 0│0     1 1 1 0│1 Сложение с делителем, выровненным по младшим разрядам   Сдвиг остатка влево Сложение с делителем, выровненным по старшим разрядам Знак первого остатка не совпадает со знаком делимого–деление корректно Формирование знака част­ного
[–B]доп R2 0 0 0 1 1   1 1 0 1 0 1 1 1 0 1 ЗнR2≠ЗнВ 1 1 0│1 0     1 1 0│1 0 Сдвиг остатка влево   Вычитание делителя Формирование цифры частного
[B]пр R3 1 1 0 1 1   0 0 1 1 0 0 0 0 0 1 ЗнR3=ЗнВ 1 0│1 0 0     1 0│1 0 1 Сдвиг остатка влево Сложение с делителем   Формирование цифры частного
[–B]доп R4 0 0 0 1 1   1 1 0 1 0 1 1 1 0 1 ЗнR4≠ЗнВ   0│1 0 1 0     0│1 0 1 0 Сдвиг остатка влево   Вычитание делителя Формирование цифры частного
[B]пр R5 1 1 0 1 0   0 0 1 1 0 0 0 0 0 0 ЗнR5=ЗнВ 1 0 1 0 0     1 0 1 0 1   Сдвиг остатка влево   Сложение с делителем Формирование цифры частного
[–1]доп     0 0 0 0 0 1 1 1 1 1 _________ 1 0 1 0 0 Коррекция частного: вычитание единицы Результат

В результате выполнения операции получено отрицательное частное

[C]доп = (1.0100)2, [C]пр = (1.2100)= (–12)10 и нулевой остаток.

б) Оба операнда отрицательные (A < 0, B < 0):

[A]доп 1 1 1 0 1 1 1 0 0 0 Делимое
  [–B]пр R1 1 1 0 1 1 0 0 1 1 0 0 0 0 0 1   0 0 0 0 1   ЗнR1≠ЗнВ 1 0 0 0│0   1 0 0 0│0 Сдвиг делимого влево Вычитание делителя Знак первого остатка не совпадает со знаком делимого–деление корректно   Формирование знака частного
[B]доп R2 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 ЗнR2≠ЗнВ 0 0 0│0 0   0 0 0│0 1 Сдвиг остатка влево Сложение с делителем Формирование цифры частного
[–B]пр R3 1 1 0 1 0 0 0 1 1 0 0 0 0 0 0 ЗнR3≠ЗнВ 0 0│0 1 0   0 0│0 1 0 Сдвиг остатка влево Вычитание делителя Формирование цифры частного
[B]доп R4 0 0 0 0 0 1 1 0 1 0 1 1 0 1 0 ЗнR4≠ЗнВ 0│0 1 0 0   0│0 1 0 1 Сдвиг остатка влево Сложение с делителем Формирование цифры частного
[–B]пр R5 1 0 1 0 0 0 0 1 1 0 1 1 0 1 0 ЗнR5≠ЗнВ 0 1 0 1 0   0 1 0 1 1   Сдвиг остатка влево Вычитание делителя Формирование цифры частного
[–B]пр R6 0 0 1 1 0 0 0 0 0 0   0 1 0 1 1 Коррекция остатка, совпадающего с делителем: вычитание делителя
[+1]пр     0 0 0 0 0 0 0 0 0 1 _________ 0 1 1 0 0 Коррекция частного: сложение с единицей Результат

В результате выполнения операции получено положительное частное

[C]пр = (0.1100)2 = (+12)10 и нулевой остаток.

Пример 3. Получение максимального по модулю частного и фиксация некорректности деления.

А = 254, В = 15.

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

[+А]пр = 0.011111110; [–А]доп = 1.100000010;

[+В]пр = 0.1111; [–В]доп = 1.0001.

а) Оба операнда положительные (A > 0, B > 0):

[A]пр 0 0 1 1 1 1 1 1 1 0 Делимое
  [–B]доп R1 0 1 1 1 1 1 0 0 0 1 0 0 0 0 0   1 1 1 0│0   Сдвиг делимого влево Вычитание делителя Знак первого остатка совпадает со знаком делимого – деление некорректно

б) Делимое положительное (A> 0), делитель отрицательный (B < 0):

[A]пр 0 0 1 1 1 1 1 1 1 0 Делимое
  [B]доп [B]доп   R1 1 1 1 1 1 0 0 1 1 1 0 1 1 1 0 1 0 0 0 1 _________ 1 1 1 1 1   1 1 1 1 1 ЗнR1=ЗнВ 1 0 0 0 1 0 1 1 1 1 1 1 1 1│0     1 1 1 1│1 Сложение с делителем, выровненным по младшим разрядам Сдвиг остатка влево Сложение с делителем, выровненным по старшим разрядам Знак первого остатка не совпадает со знаком делимого – деление корректно Формирование знака част­ного
[–B]пр R2 1 1 1 1 1 0 1 1 1 1 0 1 1 1 0 ЗнR2≠ЗнВ 1 1 1│1 0   1 1 1│1 0 Сдвиг остатка влево Вычитание делителя Формирование цифры частного
[B]доп R3 1 1 1 0 1 1 0 0 0 1 0 1 1 1 0 ЗнR3≠ЗнВ 1 1│1 0 0   1 1│1 0 0     Сдвиг остатка влево Сложение с делителем Формирование цифры частного
[B]доп R4 1 1 1 0 1 1 0 0 0 1 0 1 1 1 0 ЗнR4≠ЗнВ 1│1 0 0 0   1│1 0 0 0 Сдвиг остатка влево Сложение с делителем Формирование цифры частного
[B]доп R5 1 1 1 0 1 1 0 0 0 1 0 1 1 1 0 ЗнR5≠ЗнВ 1 0 0 0 0   1 0 0 0 0   Сдвиг остатка влево Сложение с делителем Формирование цифры частного

В результате выполнения операции получено отрицательное частное

[C]доп = (1.0000)2 = (–16)10 и положительный остаток [R]пр = (0.1110)2 = (+14)10, которые соответствуют истинным значениям:

(–16) ´ (–15) + 14 = 254.

В данном примере на 3-ем, 4-ом и 5-ом шагах выполняется сложение с отрицательным делителем, так как остаток, полученный на предыдущем шаге, положителен, но в результате сдвига влево его знак оказался искаженным. Для того, чтобы знак остатка при сдвиге влево не искажался, может быть использован модифицированный код (см. следующий пример).

в) Делимое отрицательное (A < 0), делитель положительный (B > 0):

1 1 1 0 0 0 0 0 0 1 0 Делимое
  R1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 0 0 0 1 0 0 1 1 1 1 0 0 0 0 0 0   0 0 0 0 0 0 ЗнR1=ЗнВ 0 1 1 1 1 1 0 0 0 1 0 0 0 1│0     0 0 0 1│1 Сложение с делителем, выровненным по младшим разрядам   Сдвиг остатка влево Сложение с делителем, выровненным по старшим разрядам Знак первого остатка не совпадает со знаком делимого – деление корректно. Формирование знака частного
R2 0 0 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0 1 ЗнR2≠ЗнВ 0 0 1│1 0   0 0 1│1 0 Сдвиг остатка влево Вычитание делителя Формирование цифры частного
R3 1 0 0 0 1 0 0 0 1 1 1 1 1 1 0 0 0 1 ЗнR3≠ЗнВ 0 1│1 0 0   0 1│1 0 0 Сдвиг остатка влево Сложение с делителем Формирование цифры частного
R4 1 0 0 0 1 0 0 0 1 1 1 1 1 1 0 0 0 1 ЗнR4≠ЗнВ 1│1 0 0 0   1│1 0 0 0 Сдвиг остатка влево Сложение с делителем Формирование цифры частного
R5 1 0 0 0 1 1 0 0 1 1 1 1 1 1 0 0 1 0 ЗнR5≠ЗнВ 1 0 0 0 0   1 0 0 0 0   Сдвиг остатка влево Сложение с делителем Формирование цифры частного

В результате выполнения операции получено отрицательное частное

[C]доп = (1.0000)2 = (–16)10 и отрицательный остаток

[R]доп = (1.0010)2, [R]пр = (–14)10, которые соответствуют истинным значениям: (–16) ´ 15 + (–14) = –254.

г) Оба операнда отрицательные (A < 0, B < 0):

[A]доп 1 1 0 0 0 0 0 0 1 0 Делимое
  [–B]пр R1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1   0 0 1 0│0   Сдвиг делимого влево Вычитание делителя Знак первого остатка совпадает со знаком делимого – деление некорректно

Литература

1. Савельев А.Я. Прикладная теория цифровых автоматов. – М: Высш. шк., 1987. – 272 с.

2. Савельев А.Я. Основы информатики. – М.: Изд-во МГТУ им Н.Э. Баумана, 2001. — 328 с.

3. Угрюмов Е. Цифровая схемотехника – СПБ.: БХВ-Петербург, 2001. –528с.

4. Вальциферов Ю.В., Дронов В.П. ИНФОРМАТИКА: ч.1. Арифметические и логические основы ЭВМ. Учебное пособие. – М: Московский государственный университет экономики, статистики и информатики: 2005. – 253 с.

5. Гуров В.В., Чуканов В.О. Основы теории и организации ЭВМ. –Интернет-университет информационных технологий - ИНТУИТ.ру, 2006.

Приложение 1

Варианты заданий

Таблица 1

A B A B A B
1. 0,009 41. 0,105 81. 0,205
2. 0,008 42. 0,305 82. 0,405
3. 0,007 43. 0,505 83. 0,011
4. 0,006 44. 0,605 84. 0,022
5. 0,005 45. 0,705 85. 0,033
6. 0,004 46. 0,805 86. 0,044
7. 0,003 47. 0,905 87. 0,066
8. 0,002 48. 0,115 88. 0,077
9. 0,001 49. 0,125 89. 0,088
10. 0,09 50. 0,135 90. 0,099
11. 0,08 51. 0,145 91. 0,111
12. 0,07 52. 0,155 92. 0,222
13. 0,06 53. 0,165 93. 0,333
14. 0,05 54. 0,175 94. 0,444
15. 0,04 55. 0,185 95. 0,555
16. 0,03 56. 0,195 96. 0,666
17. 0,02 57. 0,205 97. 0,777
18. 0,01 58. 0,215 98. 0,888
19. 0,15 59. 0,225 99. 0,999
20. 0,25 60. 0,235 100. 0,12
21. 0,35 61. 0,245 101. 0,23
22. 0,45 62. 0,255 102. 0,34
23. 0,55 63. 0,265 103. 0,46
24. 0,65 64. 0,275 104. 0,56
25. 0,75 65. 0,285 105. 0,67
26. 0,85 66. 0,295 106. 0,78
27. 0,95 67. 0,305 107. 0,89
28. 0,123 68. 0,238 108. 0,076
29. 0,022 69. 0.792 109. 0.844
30. 0.127 70. 0.094 110. 0.062
31. 0.794 71. 0.845 111. 0.305
32. 0.379 72. 0.568 112. 0.367
33. 0.635 73. 0.478 113. 0.631
34. 0.046 74. 0.077 114. 0.048
35. 0.602 75. 0.162 115. 0.792
36. 0.263 76. 0.632 116. 0.196
37. 0.841 77. 0.703 117. 0.569
38. 0.368 78. 0.365 118. 0.946
39. 0.074 79. 0.052 119. 0.037
40. 0.567 80. 0.842 120. 0.479

Таблица 2

Наши рекомендации