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

11.3.2. Умножение

При умножении множитель размещается в регистре MQ, а множимое в регистре SR.

Процедура умножения состоит из следующих частей:

инициализации;

сложения порядков, т.е. характеристик;

умножения мантисс;

нормализации.

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

1. Если MQ(S) = SR(S), то 0AC(S) и 0MQ(S), иначе 1AC(S) и 1MQ(S).

2. Если SR(FR) = 0 или MQ(FR) = 0, то 0 FC и 0 MQ и конец процедуры умножения, иначе переход к сложению характеристик и умножению мантисс.

Сложение характеристик сводится к следующим процедурам.

1. MQ(CH) AC(QCH, CH).

2. AC(QCH, CH) := [SR(CH)] + [AC(QCH, CH)] _ l, т.е. из этой суммы надо вычесть смещение, если складывались характеристики, а не порядки.

Сперва выполняется сложение:

AC(QCH, CH) := [SR(CH)] + [AC(QCH, CH)], а потом [L] SR(CH), далее:

AC(QCH, CH) := [AC(QCH, CH)] _ [SR(CH)].

Содержимое SR(СH) переводится в дополнительный код прямо на входе накапливающего сумматора AC.

3. Если AC(QCH) = 1= то произошло переполнение порядка поэтому засылается единица в CHOV и процедура умножения завершается.

4. Если AC(QCH) = 0, то происходит переход к умножению мантисс.

Умножение мантисс производится по одному из алгоритмов умножения чисел с фиксированной запятой. В процедуре умножения мантисс используются субрегистры SR(FR), MQ(FR) и касрегистр {AC(QFR, FR) - MQ(FR)}, причем субрегистр AC(QFR, FR) предварительно обнуляется. Произведение мантисс образуется в касрегистре, причем в AC(QFR, FR) содержатся старшие разряды произведения, а в MQ(FR) - младшие.

Граф-схема процедуры умножения приведена на рис.11.14а.

После завершения процедуры умножения мантисс производится нормализация результата умножения по следующему алгоритму (рис.11.14б).

1. Выполняется процедура [AC(CH)] MQ(CH).

2. Если [AC(FR)] 0, то производятся сдвиги содержимого касрегистра вправо последовательно на один разряд по линии 1 и MQ(CH) := [MQ(CH)] +1 пока не выполнится условие AC(FR) = 0.

3. Если в процессе этих сдвигов станет MQ(QCH) = 1, то выполняется засылка 1 в CHOV и процедура умножения прекращается.

4. При обнулении AC(FR), если старший разряд субрегистра MQ(FR) не содержит единицы, то производится последовательно сдвиг содержимого MQ(FR) на один разряд влево и MQ(CH) := [MQ(CH)] _ 1 пока старшая единица мантиссы результата не попадет в старший разряд субрегистра MQ(FR).

Таким образом, результат умножения формируется в регистре MQ.

11.3.3. Деление

При делении делимое находится в регистре AC, а делитель в SR. Результат деления получается в регистре MQ. Процедура деления состоит из следующих частей:

инициализации;

вычитания порядков, т.е. характеристик;

деления мантисс;

нормализации результата.

Во время инициализации выполняются следующие процедуры.

1. 0 MQ.

2. Если AC(S) = SR(S), то 0 MQ(S), иначе 1 MQ(S).

3. Если SR(FR) = 0= то 1 DVOV и конец процедуры деления, иначе переход к следующему пункту.

4. Если AC(FR) = 0= то 0 MQ, 0 FC и конец процедуры деления, иначе переход к вычитанию характеристик и делению мантисс.

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

1. AC(QCH, CH) = [AC(QCH, CH)] _ [SR(CH)] + l, т.е. к результату добавляется смещение, если оперируют характеристиками, а не порядками.

Сперва выполняется процедура AC(QCH, CH) = [AC(QCH, CH)]_[SR(CH)], потом [L] SR(CH) далее AC(QCH, CH) := [AC(QCH, CH)] + [SR(CH)].

Содержимое SR(CH) переводится в дополнительный код прямо на входе накапливающего сумматора AC.

2. Если [AC(QCH, CH)] < 0, то 1 CHUN и процедура деления заканчивается, иначе переход к делению мантисс.

Деление мантисс выполняется по одному из алгоритмов деления чисел с фикированной запятой, только с той разницей, что в этом случае исключается процедура выравнивания левых краев и поэтому в счетчик SC загружается число, равное числу разрядов, выделенных под мантиссу операндов. В процедуре деления мантисс используются субрегистры SR(FR), MQ(FR) и касрегистр {AC(QFR, FR) - MQ(FR)}. Результат деления мантисс получается в субрегистре MQ(FR), а остаток - в субрегистре AC(QFR, FR).

Граф-схема процедуры деления приведена на рис. 11.15а.

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

1. Выполняется процедура [AC(CH)] MQ(CH).

2. Если старший разряд (m) субрегистра MQ(FR) не содержит единицы, то выполняется сдвиг влево на один разряд содержимого касрегистра по линии связи 2 и одновременно процедура MQ(CH):=[MQ(CH)]_1. Если [m] = 1=, то конец нормализации.

Эти процедуры выполняются до тех пор пока не выполнятся условия [m] = 1 или [MQ(CH)] = -1. В последнм случае засылается единица в CHUN и процедура деления прекращается.

Таким образом результат деления и в этом случае формируется в регистре MQ.

[AC] [SR] AC

Рис. 11.10. Сложение и вычитание операндов с плавающей запятой

Рис. 11.11. Выравнивание порядков

Рис. 11.12. Процедура выравнивания порядков

Рис. 11.13. Нормализация результата алгебраического сложения

[SR] [MQ] { AC-MQ }

Рис. 11.14а. Умножение операндов с плавающей запятой

(Инициализация и сложение порядков)

Рис 11.14б. Нормализация результата умножения

[AC] / [SR] MQ

Рис. 11.15а Деление операндов с плавающей запятой

(Инициализация и вычитание порядков)

Рис. 11.15б Нормализация результата деления

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