Наряду с традиционным методом умножения в дополнительных кодах, требующим коррекции результата, достаточно широкое применение в ЭВМ находит метод Бута, при котором не требуется выполнять коррекцию. Особенность метода состоит в выполнении сложения или вычитания СЧП и множимого на каждом шаге умножения в зависимости от того, как после сдвига вправо изменяется младший разряд множителя. При его изменении с единицы на ноль производится сложение СЧП с множимым, а при изменении с нуля на единицу – вычитание множимого из СЧП, которое может быть реализовано как сложение с дополнением множимого. Если младший разряд множителя при сдвиге не изменяется, то на данном шаге не производится сложения (вычитания), а выполняется только сдвиг СЧП и множителя вправо.
При реализации этого метода происходит чередование сложений и вычитаний множимого и СЧП, вследствие чего старший разряд СЧП в явном виде представляет его знак. При сдвиге СЧП вправо значение знакового разряда сохраняется (арифметический сдвиг).
Необходимо отметить, что:
а) При умножении на младшую единицу множителя производится вычитание множимого из СЧП, поскольку считается, что происходит изменение младшего разряда множителя с нуля на единицу.
б) При умножении на младшие нули множителя осуществляется сдвиг нулевой СЧП и множителя вправо до появления единицы в младшем разряде множителя, после чего производится вычитание множимого из СЧП.
Пример 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.
Основные положения. Основная особенность операции деления целых чисел в ЭВМ состоит в том, что делимое (первый операнд) представляется в удвоенной разрядной сетке по сравнению с делителем (вторым операндом). В качестве результата операции формируются частное и остаток, представляемые в той же разрядной сетке, что и делитель, причем остаток замещает старшие разряды делимого, а частное – младшие.
Использование метода деления в дополнительных кодах предполагает, что положительные операнды участвуют в операции в прямом, а отрицательные – в дополнительном коде. Результат операции (остаток и частное) получается в коде, зависящем от знака. Знак частного определяется знаками делимого и делителя и формируется в ходе выполнения операции по тем же правилам, что и цифровые разряды. Знак остатка должен совпадать со знаком делимого. Нулевые частное и остаток содержат в знаковом разряде ноль («положительный» ноль) независимо от знаков операндов.
Формирование частного. Операция деления при ее реализации в ЭВМ представляет собой многошаговый процесс, на каждом шаге которого формируется один разряд частного (знаковый или цифровой). Значение разряда частного зависит от знаков делителя и остатка, полученного на данном шаге. При их совпадении формируемый разряд частного равен единице, при несовпадении – нулю.
Разряды частного заносятся на место освобождающихся при сдвиге влево младших разрядов делимого (остатка). Частное формируется, начиная от старших разрядов. На первом шаге деления вырабатывается его знаковый разряд, а на последующих – цифровые разряды.
Действия над остатком. На каждом шаге деления производится удвоение остатка, полученного на предыдущем шаге, посредством его сдвига на один разряд влево (на первом шаге производится сдвиг делимого) и формирование нового остатка путем сложения старших разрядов с делителем или вычитания делителя из старших разрядов остатка. Вычитание делителя, как правило, заменяется сложением с его дополнением. Действие, выполняемое над остатком, определяется знаками остатка и делителя. При их совпадении производится вычитание делителя из остатка, при несовпадении – делитель прибавляется к остатку.
Следует помнить, что:
а) При сдвиге остатка (делимого) влево в освобождающийся младший разряд заносится ноль, а затем (после выполнения соответствующего действия над остатком) на этом месте формируется разряд частного.
б) В качестве знака остатка, по которому определяется последующее действие над ним (сложение с делителем или вычитание делителя), используется значение знакового разряда остатка полученного на предыдущем шаге, т.е. до его сдвига влево. При сдвиге остатка влево это значение может измениться в случае несовпадения знакового и старшего цифрового разрядов остатка до сдвига. Использование модифицированного кода (с двумя знаковыми разрядами) для представления остатка позволяет упростить процедуру анализа его знака, так как при сдвиге влево может быть искажен только младший (правый) знаковый разряд, старший же (левый) знаковый разряд будет представлять истинное значение знака остатка как до, так и после сдвига, и по нему можно определить последующее действие над остатком.
Коррекция результата. Результат операции деления (остаток и частное) может потребовать коррекции. Коррекция остатка производится в случае несовпадения знака окончательного остатка, полученного после формирования всех разрядов частного, со знаком делимого и состоит в сложении остатка с делителем или в вычитании делителя из него. Действие, выполняемое при коррекции остатка, определяется так же, как и в основном цикле деления, связанном с формированием разрядов частного, т.е. зависит от совпадения или несовпадения знаков делителя и остатка. Исключением из этого правила является нулевой остаток, который независимо от знака делимого не подлежит коррекции.
Кроме общего правила коррекции остатка, существует особый случай, который имеет место при получении нулевого промежуточного остатка на каком-либо шаге деления. На следующем шаге к нулевому остатку, который имеет знак “+”, будет прибавлен отрицательный делитель или его дополнение при положительном делителе. При сдвиге полученного остатка влево на последующем шаге его величина удвоится. Сложение отрицательного остатка с положительным делителем (или с дополнением отрицательного делителя) снова дает отрицательный остаток, по модулю равный величине делителя. Если же в этом случае делимое отрицательное, то получаемый в конце операции отрицательный остаток не может быть скорректирован по общему правилу, так как имеет знак, совпадающий со знаком делимого. Вследствие этого общее правило коррекции остатка дополняется следующим: при отрицательных остатке и делимом производится сравнение модулей остатка и делителя и, если они совпадают, осуществляется коррекция остатка по общему правилу, после чего остаток становится нулевым.
Практическая реализация этого случая на ЭВМ может быть осуществлена следующим образом. При получении отрицательного окончательного остатка в случае отрицательного делимого делается попытка скорректировать полученный остаток. Если в результате коррекции получается нулевой остаток, он является правильным. При получении ненулевого остатка он восстанавливается путем сложения с делителем (если делитель положительный) или с его дополнением (если делитель отрицательный).
Коррекция частного производится при получении нулевого остатка в случае отрицательного делимого и состоит в вычитании единицы из отрицательного частного (делитель положительный) или в прибавлении единицы к положительному частному (делитель отрицательный)
Проверка корректности деления. Одной из особенностей операции деления целых чисел, связанной с представлением делимого в удвоенном по сравнению с делителем формате, является возможность получения такого частного, которое не помещается в отведенный для него формат. Этот случай классифицируется как «некорректность деления с фиксированной запятой» и является причиной прерывания выполняемой программы. В связи с этим при делении целых чисел производится проверка корректности результата, осуществляемая в начале операции.
При использовании метода деления и дополнительных кодах условие корректности деления имеет вид:
а) │ А │/│ В │ < 2 n, при одинаковых знаках операндов;
б) │ A │/│ B │ < 2 n + 1, при разных знаках операндов,
где n – число цифровых разрядов частного (делителя).
Правая часть этих неравенств определяется максимальным по модулю целым числом, которое можно представить в формате с использованием n цифровых разрядов (с учетом знакового разряда формат частного составляет n+1 разрядов). При этом предполагается, что положительное частное представляется в прямом коде (случай а), а отрицательное – в дополнительном (случай б).
Для проверки корректности деления вычисляется разность:
а) │ А │–│ В │ ´ 2 n, при одинаковых знаках операндов;
б) │ А │–│ В │–│ В │ ´ 2 n, при разных знаках операндов – и в зависимости от знака этой разности устанавливается корректность или некорректность деления.
Вследствие того, что при делении в дополнительных кодах операнды участвуют в операции вместе со своими знаками, вычитание производится только в случае одинаковых знаков операндов. При разных знаках операндов вычитание заменяется сложением.
Фактически проверка корректности деления, выполняемая путем так называемого «пробного вычитания», совмещается с первым шагом деления, на котором вырабатывается знаковый разряд частного. На этом шаге при одинаковых знаках операндов производится сдвиг делимого на один разряд влево, и затем вычитание делителя (сложение его с дополнением) из его старших разрядов. Знак остатка, полученного на первом шаге, сравнивается со знаком делимого, и если они совпадают, то процесс деления завершается ввиду некорректности результата.
При разных знаках операндов на первом шаге производится сложение делимого и делителя, выровненных по младшим разрядам, затем сдвиг полученного остатка влево, после чего осуществляется его сложение с делителем, выровненным по старшим разрядам. Знак полученного после этого сложения остатка сравнивается со знаком делимого, и если они совпадают, деление является некорректным.
Особенности проверки корректности деления:
а) Нулевой остаток содержит в знаковом разряде ноль и поэтому рассматривается как положительный.
б) При сложении делимого с делителем, выровненным по младшим разрядам, старшие разряды делителя дополняются его знаковым разрядом (расширение знака на старшие разряды).
в) Некорректность деления сказывается на неправильном формировании знака частного на первом шаге деления. Действительно, при одинаковых знаках операндов частное должно иметь знак “+”, однако при совпадении знака первого остатка со знаком делимого (и следовательно делителя) в качестве знакового разряда частного сформируется единица (знак “–”). Аналогично при разных знаках операндов частное должно иметь знак “–”, но при совпадении знаков остатка и делимого (и, следовательно, несовпадении знаков остатка и делителя) в качестве знакового разряда сформируется ноль (знак “+”).
Пример 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 Зн R 1=Зн В | 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 Зн R 2≠Зн В | 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 Зн R 3=Зн В | 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 Зн R 4=Зн В | 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 Зн R 1=Зн В | 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 Зн R 2≠Зн В | 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 Зн R 3=Зн В | 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 Зн R 4=Зн В | 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 Зн R 1≠Зн В | 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 Зн R 2=Зн В | 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 Зн R 3≠Зн В | 0 1│0 1 0 0 1│0 1 0 | Сдвиг остатка влево Вычитание делителя Формирование цифры частного | |
[ B ] доп R 4 | 0 1 0 0 0 1 0 0 1 1 1 1 0 1 1 Зн R 4=Зн В | 1│0 1 0 0 1│0 1 0 1 | Сдвиг остатка влево Сложение с делителем Формирование цифры частного | |
[– B ] пр R 5 | 1 0 1 1 1 0 1 1 0 1 0 0 1 0 0 Зн R 5≠Зн В | 0 1 0 1 0 0 1 0 1 0 | Сдвиг остатка влево Вычитание делителя Формирование цифры частного | |
[ B ] доп R 6 | 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 ] пр R 1 | 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 Зн R 1=Зн В | 0 0 1 1 0 1 1 1 1 0 1 1 1 0│0 1 1 1 0│1 | Сложение с делителем, выровненным по младшим разрядам Сдвиг остатка влево Сложение с делителем, выровненным по старшим разрядам Знак первого остатка не совпадает со знаком делимого–деление корректно Формирование знака частного | |
[– B ] доп R 2 | 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 Зн R 2≠Зн В | 1 1 0│1 0 1 1 0│1 0 | Сдвиг остатка влево Вычитание делителя Формирование цифры частного | |
[ B ] пр R 3 | 1 1 0 1 1 0 0 1 1 0 0 0 0 0 1 Зн R 3=Зн В | 1 0│1 0 0 1 0│1 0 1 | Сдвиг остатка влево Сложение с делителем Формирование цифры частного | |
[– B ] доп R 4 | 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 Зн R 4≠Зн В | 0│1 0 1 0 0│1 0 1 0 | Сдвиг остатка влево Вычитание делителя Формирование цифры частного | |
[ B ] пр R 5 | 1 1 0 1 0 0 0 1 1 0 0 0 0 0 0 Зн R 5=Зн В | 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 ] пр R 1 | 1 1 0 1 1 0 0 1 1 0 0 0 0 0 1 0 0 0 0 1 Зн R 1≠Зн В | 1 0 0 0│0 1 0 0 0│0 | Сдвиг делимого влево Вычитание делителя Знак первого остатка не совпадает со знаком делимого–деление корректно Формирование знака частного | |
[ B ] доп R 2 | 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 Зн R 2≠Зн В | 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 Зн R 3≠Зн В | 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 Зн R 4≠Зн В | 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 Зн R 5≠Зн В | 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 ] доп R 1 | 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 Зн R 1=Зн В | 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 Зн R 2≠Зн В | 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 Зн R 3≠Зн В | 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 Зн R 4≠Зн В | 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 Зн R 5≠Зн В | 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 Зн R 1=Зн В | 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 Зн R 2≠Зн В | 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 Зн R 3≠Зн В | 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 Зн R 4≠Зн В | 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 Зн R 5≠Зн В | 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
№ | R | S | № | R | S | |
1. | 41A40000 | BC8A0000 | 61. | 40B40000 | BF3A0000 | |
2. | C1B80000 | 3C4B0000 | 62. | C1C50000 | 3E7B0000 | |
3. | 423E5000 | BD250000 | 63. | 41D60000 | BD6C0000 | |
4. | C25C2000 | 3D1A0000 | 64. | C2E70000 | 3F9E0000 | |
5. | 4310DC00 | BE320000 | 65. | 42F8B000 | BE5F0000 | |
6. | C320FD00 | 3E5B0000 | 66. | C3A90700 | 3D4C0000 | |
7. | 419A0000 | BF680000 | 67. | 43BA0200 | BFA40000 | |
8. | C1AB0000 | 3F790000 | 68. | C0CB0000 | 3EB60000 | |
9. | 424B3000 | BC1A0000 | 69. | 40DC0000 | BDF90000 | |
10. | C23CF000 | 3C2D0000 | 70. | C1EDC000 | 3FD70000 | |
11. | 4310D500 | BD460000 | 71. | 41F68000 | BEB30000 | |
12. | C320E300 | 3D870000 | 72. | C29F4000 | 3DC50000 | |
13. | C39CE000 | 3DB40000 | 73. | 42FBD000 | BFF40000 | |
14. | 42BEC000 | BFBF0000 | 74. | C3FD0000 | 3FA10000 | |
15. | C3CFD000 | 3D8B0000 | 75. | 42FB0000 | BED60000 | |
16. | 41C0D300 | BEA80000 | 76. | C22F0000 | 3EA70000 | |
17. | C3A0B000 | 3D7B0000 | 77. | C3AA0000 | 3CEC0000 | |
18. | 43F40200 | BF1A0000 | 78. | 42B80000 | BE650000 | |
19. | 40AB0000 | BEC60000 | 79. | 434B0000 | BEAF0000 | |
20. | C2E48000 | 3DC70000 | 80. | 42ED0000 | BECD0000 | |
21. | 42F27000 | BDE30000 | 81. | B56D0000 | 435CB000 | |
22. | 41FF0000 | BE980000 | 82. | 42AE0800 | BFE70000 | |
23. | C1E08000 | 3EA70000 | 83. | C3BD0500 | 3EC80000 | |
24. | 426A7000 | BFB50000 | 84. | 43CC0700 | BDD90000 | |
25. | C2A98000 | 3F8A0000 | 85. | C0EB0000 | 3FE10000 | |
26. | 43AA0000 | BCDC0000 | 86. | 40FA0000 | BEF70000 | |
27. | C380F000 | 3C4B0000 | 87. | C119C000 | 3D780000 | |
28. | 41FC0000 | BD890000 | 88. | BFD70000 | ||
29. | C1B10000 | 3D470000 | 89. | C237A000 | 3FA50000 | |
30. | 42ABC000 | BEF60000 | 90. | BDB30000 | ||
31. | C2FF0000 | 3EA00000 | 91. | C3598400 | 3FCB0000 | |
32. | 43FA0000 | BFD50000 | 92. | C0D40000 | 3E5A0000 | |
33. | C11F0000 | 3EC70000 | 93. | 436A7600 | BDBC0000 | |
34. | C33A0000 | 3C290000 | 94. | C0780000 | 3F830000 | |
35. | 41B90000 | BE580000 | 95. | 408C0000 | BEA90000 | |
36. | 43AF0000 | BEBС0000 | 96. | C19DE000 | 3DF40000 | |
37. | 43E40000 | BED00000 | 97. | 41AEC000 | BEDF0000 | |
38. | B51
Дата добавления: 2016-12-18; Мы поможем в написании ваших работ!; просмотров: 576 | Нарушение авторских прав Поиск на сайте: Лучшие изречения: Ваше время ограничено, не тратьте его, живя чужой жизнью © Стив Джобс |
Ген: 0.012 с.