ЗНАЕТЕ ЛИ ВЫ?

Алгоритмы реализации арифметических действий с операндами, представленными в форме с плавающей запятой



 

Устройство для арифметических действий с числами с плавающей запятой можно представить следующим образом:

 

Рис. 11.9.

 

АС - накапливающий сумматор;

SR - запоминающий регистр;

MQ - регистр множителя-частного;

SC - счетчик сдвигов;

CHOV - индикатор переполнения порядка;

CHUN - индикатор исчезновения порядка;

DVOV - индикатор ошибки при делении;

FR - часть регистра, относящаяся к мантиссе (разряды:m 1; 1 _ младший разряд, m - старший);

CH - часть регистра, относящаяся к порядку;

QCH, QFR _ служебные разряды субрегистров AC(CH), AC(FR) соот-ветственно, которые используются для контроля за переполнением разрядной сетки;

L - регистр со значением смещения l.

Напомним, что обычно в формате с плавающей запятой вместо показателя p используют так называемую характеристику ("смещенный порядок"):

 

r = p + l,

 

где l - избыток (смещение), значение которого подбирается таким образом, чтобы при изменении значения показателя от некоторого минимального значения -|pmax| до максимального +|pmax|, характеристика r менялась от 0 до rmax\ Следовательно, характеристика не меняет своего знака. Для этого принимается, что

 

l = 2k-1,

 

где k - число разрядов, выделеных для представления порядка числа в формате с плавающей запятой.

Таким образом, каждый из регистров AC, SR, MQ включает в себя два субрегистра, один из которых предназначен для размещения кода характеристики операнда, а другой для размещения мантиссы. Эти субрегистры могут независимо участвовать в тех или иных арифметических процедурах.

В этом АУ, как и в АУ для операндов с фиксированной запятой, при вычитании содержимого регистра SR из содержимого регистра АС вычитаемое представляется в дополнительном коде непосредственно на входах параллельного сумматора

Субрегистры FC(FR), MQ(FR) объединены в один так называемый "касрегистр" (линия связи 1 и 2) для процедуры сдвига их содержимого вправо или влево. Причем, таким образом, чтобы при каждом таком сдвиге по линии связи 1 очередной младший разряд FC(FR) попадал в старший разряд MQ(FR) и наоборот. По линиии связи 2 содержимое старшего разряда субрегистра FC(FR) передается младшему разряду субрегистра MQ(FR). При активизации одной линии связи другая блокируется.

Здесь так же, как и на рис.11.1 не показан узел управления АУ.

 

Сложение и вычитание

При сложении складываются содержимое регистров SR и AC. При вычитании вычитаемое размещается в регистре SR, а уменьшаемое - в АС. Результат формируется в регистре АС.

Граф-схема алгоритма алгебраического сложения операндов с плавающей запятой приведена на рис.11.10. В этом алгоритме не учитывается особенность используемого в АУ параллельного сумматора.

Процедура сложения или вычитания состоит из 4 основных частей:

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

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

сложения или вычитания мантисс;

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

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

1. Если в OPCODE код вычитания, то содержимое SR(S) инвертируется, т.е. [SR(S)].

2. 0 MQ.

3. Если AC(FR) = 0, то переход к пункту 5, иначе к пункту 4.

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

5. Если SR(FR) = 0, то переход к пункту 6, иначе [SR] FC и переход к пункту 6.

6. Конец процедуры алгебраического сложения.

Во время выравнивания порядков мантисса операнда с меньшим порядком (характеристикой) сдвигается по разрядной сетке вправо с прибавлением единицы к его характеристике при каждом сдвиге на один разряд. Эта процедура продолжается до тех пор, пока характеристики обоих операндов не станут равными. Полученная таким образом характеристика, одинаковая для обоих операндов, присваивается, как предварительная, результату операции. Значение этой характеристики засылается в субрегистр AC(CH). Граф-схема процедуры выравнивания порядков приведена на рис.11.11 и более подробно на рис.11.12.

Далее осуществляется сложение или вычитание мантисс по правилам, аналогичным правилам для чисел с фиксированной запятой. В этой процедуре использутся субрегистры SR(S, FR), FC(S, QFR, FR).

В этом арифметическом устройстве при выполнении алгебраического сложения мантисса отрицательного операнда также представляется в дополнительном коде. Например, если SR(S) = 1, то SR(FR) := [SR(FR)] + 1, если же AC(S) = 1, то AC(FR) := [AC(FR)] + 1.

Если результат получился в дополнительном коде: AC(S) = 1= то он преобразуется в прямой, т.к. мантисса всегда модуль со знаком. Для этого выполняется следующая процедура: AC(FR) := [AC(FR)] + 1.

После алгебраического сложения выполняется процедура нормализации результата, граф-схема которой приведена на рис.11.13.

1. Если [AC(QFR)] = 1, то мантисса результата сдвигается вправо вместе с этим разрядом, а характеристика результата увеличивается на единицу.

2. Если в процессе нормализации произошло переполнение порядка: AC(QCH) = 1= то единица засылается в регистр CHOV\

3. Если [AC(QFR)] = 0 и старший разряд субрегистра AC(FR) также равен 0, то в счетчик SС загружается число равное числу разрядов, выделенных под мантиссу числа. После этого выполняется сдвиг [AC(FR)] на один разряд влево с вычитанием единицы из [AC(CH)] и SC = [SC] _ 1. Эта процедура продолжается пока в старшем разряде не появится единица или пока не станет [SС] = 0.

4. Если не произошло исчезновение порядка (r < 0), то процедура сложения или вычитания заканчивается. При исчезновении порядка в регистр CHUN засылается единица, а в регистр AС - 0.

 

Умножение

 

При умножении множитель размещается в регистре 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.

 

Деление

 

При делении делимое находится в регистре 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б Нормализация результата деления

 





Последнее изменение этой страницы: 2016-06-23; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 35.153.39.7 (0.017 с.)