Двоичное деление
Деление - это операция, обратная умножению. Иначе говоря, при делении операцию вычитания повторяют до тех пор, пока уменьшаемое не станет меньше вычитаемого. Число этих повторений показывает, сколько раз вычитаемое укладывается в уменьшаемом.
Рассмотрим процедуру деления на примере:
Десятичное деление |
|
Двоичное деление |
||
204 |
12 |
1100 1100 |
1100 |
|
- |
|
- |
|
|
12 |
17 |
1100 |
10001 |
|
84 |
|
0 1100 |
|
|
- |
|
- |
|
|
84 |
|
1100 |
|
|
0 |
|
0 |
|
|
Процедура деления нам знакома и начинается с анализа старших разрядов делимого 20410 и делителя 1210. Мы обнаруживаем, что число 12 укладывается в число 20 только один раз, поскольку остаток (8) меньше делителя (12). Объединяя остаток со следующей цифрой делимого, получаем число 84 и снова определяем, сколько раз делитель (12) укладывается в 84. Результатом деления является частное, равное 17. Аналогично происходит и при делении в двоичной системе. Все, казалось бы, просто, но организовать такую процедуру в машине не столь просто, и поэтому был разработан несложный способ двоичного деления используемый в МП.
Как и в случае двоичного умножения, удобным оказывается использование операций сдвига. Представим делитель в дополнительном коде, чтобы обойтись сложением вместо вычитания.
1210 = 01100 дополнительный код - 10100
Теперь переходим к так называемому длинному двоичному делению:
Будем вычитать из делимого делитель. О том, что делитель не укладывается в делимое, свидетельствует появление отрицательного результата вычитания (бит знака разности равен 1). Запишем в результат деления, частное - старший бит равный 0 и восстановим делимое. Если делитель укладывается в делимое (бит знака равен 0), то в частное запишем 1.
Такая операция повторяется необходимое число раз, пока делимое не будет короче по длине делителя. При каждой операции происходит сдвиг остатка от делимого на один бит влево.
Рассмотрим пример:
011001100 |
делимое 20410 |
||
+ |
|
||
10100 |
вычитаемое 1210 |
||
000001100 |
первый результат |
||
частное: 1.... |
|||
|
|||
Сдвинем результат |
|||
00001100 |
|||
|
|||
вторая операция: |
третья операция: |
||
00001100 |
0001100 |
||
+ |
+ |
||
10100 |
|
10100 |
|
10101100 |
|
1011100 |
|
|
|||
частное: 10... |
частное: 100.. |
||
|
|||
четвертая операция: |
пятая операция: |
||
001100 |
01100 |
||
+ |
+ |
||
10100 |
|
10100 |
|
110100 |
|
1 00000 |
остаток |
|
|||
частное: 1000. |
частное: 10001 |
||
Если мы сдвинем сейчас остаток еще раз, то он станет короче делимого, значит, операция деления завершена. Итак: 10001 = 1710
На практике МП оперирует числами известной длины, поэтому и разрядность результата известна заранее.
