Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
osnov.doc
Скачиваний:
9
Добавлен:
08.11.2019
Размер:
1.37 Mб
Скачать

11.2.3. Деление

Рассмотрим четыре варианта алгоритма деления. Первые два требуют выравнивания левого края делителя с левым краем делимого. При выполнении этих двух алгоритмов делимое загружается в регистр АС, а делитель в регистр SR регистр MQ обнуляется, частное формируется в регистре MQ:

[{AC-MQ}] / [SR] MQ, а остаток в АС. Делитель после выполнения операции остается в регистре SR, а делимое теряется.

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

1. Если делимое равно 0, то результату присваивается значение 0: 0 MQ и тем самым процедура деления заканчивается.

2. Если делитель равен 0, то вырабатывается сигнал ошибки: 1 DVOV, результату присваивается значение 0: 0 MQ, и тем самым процедура деления заканчивается.

3. Если делимое меньше делителя, то вырабатывается сигнал ошибки:

1 DVOV и процедура деления заканчивается: 0 MQ и 0 AC(S)\

4. Если у операндов одинаковые знаки, то результату присваивается положительнй знак: 0 MQ(S), 0 AC(S), 0 SR(S)\

5. Если у операндов разные знаки, то результату присваивается отрицательный знак: 1 MQ(S), 0 AC(S), 0 SR(S)\

В первых двух вариантах алгоритма деления инициализация завершается процедурой выравнивания.

Выравнивание левого края делителя по отношению к левому краю делимого выполняется путем сдвига влево содержимого SR(M). Тем самым "совмещаются" старшие единицы делимого и делителя. Если число сдвигов было равно, например, m, то число M = m + 1 записывается в счетчик SC, т.е нужно будет повторить М раз элементарные шаги деления.

Рассмотрим вначале эти два варианта алгоритма деления.

На каждом элементарном шаге деления с восстановлением остатка (первый вариант алгоритма) выполняются следующие действия.

1. AC := [AC] _ [SR].

2. Если [AC] < 0= то переход к пункту 3, иначе переход к пункту 4.

3. AC := [AC] + [SR] и сдвиг содержимого касрегистра влево на один разряд: [AC(M) - MQ(M)], потом MQ(0) := 0, далее переход к пункту 5.

4. Сдвиг содержимого касрегистра влево на один разряд и MQ(0) := 1.

5. SC := SC - 1. Если [SC] 0= то переход к пункту 1, иначе переход к пункту 6.

6. Выравнивание остатка: сдвиг содержимого AC(M) вправо на М разрядов.

7. Конец процедуры деления.

Граф-схема этого алгоритма приведена на рис. 11.5.

При делении без восстановления остатка (второй вариант алгоритма) изменяется только пункт 3:

3. Сдвиг содержимого касрегистра влево на один разряд и MQ(0) := 0, далее AC := [AC] + [SR], SC := SC _ 1. Если [SC] 0, то переход к пункту 2, иначе переход к пункту 6.

Процедура выравнивания левого края делителя, алгоритм которой приведен на рис. 11.8, очень часто получается достаточно длительной. Поэтому ускорение самой процедуры деления за счет уменьшения числа элементарных шагов деления не всегда уменьшает суммарное время, необходимое для выполнения всего алгоритма деления. В связи с этим используют также алгоритмы деления, не требующие процедуры выравнивания. Возможные варианты таких алгоритмов приведены на рис. 11.6 и 11.7. Разряд AC(Q) накапливающего сумматора АС используется только в последнем из этих алгоритмов, в котором учитывается специфика структуры используемого в АУ накапливающего сумматора. Этот алгоритм позволяет минимизировать аппаратуру описанного АУ, т.к. не требует применения регистров LR, SC1, T, которые используются в других вариантах алгоритма деления, и упрощает процедуру передачи информации из регистра MQ в регистр АС.

[AC] [SR] AC

Рис. 11.3. Алгоритм алгебраического сложения чисел в форме с фиксированной запятой.

[AC] [SR] AC

Рис. 11.3а. Алгоритм алгебраического сложения чисел в форме с фиксированной запятой.

Рис. 11.4. Умножение операндов с фиксированной запятой (вариант 2)

C:= A / B или MQ := {AC-MQ} / [SR], остаток в АС

Рис. 11.5. Алгоритм деления (вариант 1) операндов с фиксированной запятой с восстановлением остатка.

A / B = C : [{AC-MQ}] / [SR] MQ, остаток в АС

Рис. 11.6. Деление операндов с фиксированной запятой.

(вариант 3, не требует процедуры выравнивания левого края делителя)

A / B = C : [{AC-MQ}] / [SR] MQ, остаток в АС

Рис. 11.7. Деление операндов с фиксированной запятой.

(вариант 4, не требует процедуры выравнивания левого края делителя)

Рис. 11.8. Процедура выравнивания левого края делителя

(дополнение к алгоритму, приведенному на рис. 11.5.)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]