1. Выполнить операцию деления заданных чисел А и В со всеми комбинациями знаков, используя метод деления в дополнительных кодах. Для представления делимого (А) использовать 16 двоичных разрядов (один-знаковый,15-цифровых), для представления делителя (В) – 8 разрядов (один-знаковый,7-цифровых). Остаток от деления и частное представляются в той же разрядной сетке, что и делитель.
2. Результаты операции представить в десятичной системе счисления и проверить их правильность.
А = 139, В = 13.
[A]пр. = 0.010001011, [A]доп = 1.101110101;
[В]пр. = 0.1101, [В]доп = 1.0011.
.
а) А<0, B<0.
N шага | Операнды | Действия | Комментарии | |
Делимое/остаток (старшие разряды) | Делимое/остаток (младшие разряды) | |||
[A]доп | 1 1 0 1 1 | 1 0 1 0 1 | Делимое | |
←[A]доп [-B]пр R1 | +1 0 1 1 1 0 1 1 0 1 0 0 1 0 0 | 0 1 0 1¦ 0 0 1 0 1¦ 0 | Сдвиг А. Вычитание В. Деление корректно. | |
←R1 [B]доп R2 | +0 1 0 0 0 1 0 0 1 1 1 1 0 1 1 | 1 0 1 0¦ 0 1 0 1 0¦ 1 | Сдвиг остатка влево. Сложение с В. Формирование цифры частного. | |
←R2 [-B]пр R3 | +1 0 1 1 1 0 1 1 0 1 0 0 1 0 0 | 0 1¦ 0 1 0 0 1¦ 0 1 0 | Сдвиг остатка влево. Вычитание делителя. Формирование цифры частного. | |
←R3 [B]доп R4 | +0 1 0 0 0 1 0 0 1 1 1 1 0 1 1 | 1¦ 0 1 0 0 1¦ 0 1 0 1 | Сдвиг остатка влево. Сложение с В. Формирование цифры частного. | |
←R4 [-B]пр R5 | +1 0 1 1 1 0 1 1 0 1 0 0 1 0 0 | 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
и отрицательный остаток
[B]доп = (1.0111)2 = (-9)10,
которые соответствуют значениям:
10·(-13) + 9 = -139.
а) А<0, B>0.
N шага | Операнды | Действия | Комментарии | |
Делимое/остаток (старшие разряды) | Делимое/остаток (младшие разряды) | |||
[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 1 1 0 1 0 0 0 1 0 0 0 1 0¦ 0 0 0 1 0¦ 1 | Сложение с делителем, выровненным по младшим разрядам. Сдвиг остатка влево. Сложение с делителем, выровненным по старшим разрядам. Деление корректно. | |
←R1 [-B]доп R2 | +0 1 0 1 0 1 0 0 1 1 1 1 1 0 1 | 0 1 0¦ 1 0 0 1 0¦ 1 0 | Сдвиг остатка влево. Вычитание делителя. Формирование цифры частного. | |
←R2 [B]пр R3 | +1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 | 1 0¦ 1 0 0 1 0¦ 1 0 0 | Сдвиг остатка влево. Сложение с В. Формирование цифры частного. | |
←R3 [-B]доп R4 | +0 1 1 1 1 1 0 0 1 1 0 0 0 1 0 | 0¦ 1 0 1 0 0¦ 1 0 1 1 | Сдвиг остатка влево. Вычитание делителя. Формирование цифры частного. | |
←R4 [-B]доп R5 | +0 0 1 0 0 1 0 0 1 1 1 0 1 1 1 | 1 0 1 1 0 1 0 1 1 0 | Сдвиг остатка влево. Вычитание делителя. Формирование цифры частного. |
В результате выполнения операции получено отрицательное частное:
|
|
[C]доп = (1.0110)2 = (-10)10
и отрицательный остаток
[B]доп = (1.0111)2 = (-9)10,
которые соответствуют значениям:
(-10)·13 + (-9) = -139.
Особый случай алгоритма
Такой случай может иметь место только при отрицательном делимом, нулевом остатке и четном частном. В этом случае получаемый окончательный остаток оказывается не равным нулю, но не подлежит коррекции по общим правилам. Для устранения этого недостатка необходимо модернизировать предлагаемый алгоритм, расширив его на подобные ситуации.
[А]пр = (-168)10 = (1.0101000)2 [В]пр = (-14)10 = (1.1110)2
[А]доп = (1.1011000)2 [В]доп = (1.0010)2
N шага | Операнды | Действия | Комментарии | |
Делимое/остаток (старшие разряды) | Делимое/остаток (младшие разряды) | |||
[A]доп | 1 1 0 1 0 | 1 1 0 0 0 | Делимое | |
←[A]доп [-B]пр R1 | +1 0 1 0 1 0 1 1 1 0 0 0 0 1 1 | 1 0 0 0¦ 0 1 0 0 0¦ 0 | Сдвиг делимого влево. Вычитание делителя. Деление корректно. | |
←R1 [B]доп R2 | +0 0 1 1 1 1 0 0 1 0 1 1 0 0 1 | 0 0 0¦ 0 0 0 0 0¦ 0 1 | ||
←R2 [-B]пр R3 | +1 0 0 1 0 0 1 1 1 0 0 0 0 0 0 | 0 0¦ 0 1 0 0 0¦ 0 1 0 | ||
←R3 [B]доп R4 | +0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 | 0¦ 0 1 0 0 0¦ 0 1 0 0 | ||