Алгоритм деления чисел в дополнительном коде со сдвигом остатка
Основные методы деления нетрудно приспособить для выполнения операций с дополнительными кодами. Алгоритм деления со сдвигом остатка в этом случае имеет вид:
1. По знаку
делимого и знаку
делителя определить знак
частного. В качестве первого остатка взять делимое.
2. Если знаки очередного остатка и делителя совпадают, то из остатка вычесть делитель, в противном случае прибавить его к остатку. Полученный результат является новым остатком.
3. Если знаки остатка и делителя совпадают, то очередная цифра частного равна 1; если знаки не совпадают, то цифра частного равна нулю.
4. Удвоить остаток.
5. Повторить n + 1 раз пункты 2 – 4.
Рассмотрим пример. Пусть
,
, тогда
, а цифровая диаграмма деления будет соответствовать табл. 8.2. Конец операции здесь определяется по маркерной 1 в RGZ.
Таблица 8.2
| RGZ | Микрооперация | RGX | Такты | RGY |
| 000,00011 | + Y | 00,01111
11,010000 1T
11,10111
| Y = 1,01000 – Y = 0,11000 | |
| 000,00111 | < – Y | 11,01110
00,110000 2T
00,00110
| ||
| 000,01110 | < + Y | 00,01100
11,010000 3T
11,10100
| ||
| 000,11101 | < – Y | 11,01000
00,110000 4T
00,00000
| ||
| 001,11010 | < + Y | 00,00000
11,010000 5T
11,01000
| ||
| 011,10101 | < – Y | 10,10000
00,110000 6T
11,01000
| ||
| 111,01011 | < END | 10,10000 |
Как видно из примера, результат деления получился с погрешностью в 1 младшего разряда. Аналогичная ситуация имеет место всегда, когда в процессе деления на отрицательный делитель встречается остаток, равный нулю. Действительно, согласно алгоритму при делении нуля на отрицательный делитель получается группа единиц, в то время как в данном случае должна формироваться группа нулей. Устранить этот недостаток можно двумя способами. Если вычисляется n + 1 цифра после запятой, после чего производится округление, то правильный результат получается автоматически. Если же операция округления не предусмотрена, то необходимо фиксировать схемой совпадения момент появления нулевого остатка при отрицательном делителе, и в очередной разряд частного записывать 1, а во все последующие – нули.
Таким образом БД, работающие в дополнительном коде, как по структуре, так и по аппаратным затратам и быстродействию равноценны БД, работающим в прямых кодах.
00,01111
11,010000 1T
11,10111
11,01110
00,110000 2T
00,00110
00,01100
11,010000 3T
11,10100
11,01000
00,110000 4T
00,00000
00,00000
11,010000 5T
11,01000