WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 |   ...   | 3 | 4 || 6 | 7 |   ...   | 13 |

Пример 4. Пусть регистр Р восьмиразрядного процессора хранит операнд 11100111.

До сдвига 1 1 1 0 0 1 1 После сдвига AR(Р,1) 1 1 1 1 0 0 1 CF=1; SF=1; ZF=0; OF=0.

До сдвига Р= – 31(8), а после сдвига Р= – 15(8) (результат деления (– 31(8)) нацело на 2).

4.2.3.3. Алгоритм арифметического сдвига в обратном коде Алгоритм арифметического сдвига в обратном коде выполняется так же, как и в дополнительном коде, но при сдвиге влево значение выдвигаемого бита записывается в младший бит регистра.

Пример. Пусть регистр Р восьмиразрядного процессора хранит операнд 11100111.

Регистр Р до сдвига 1 1 1 0 0 1 1 Регистр Р после сдвига AL(Р,1) 1 1 0 0 1 1 1 CF=<без изменения>; SF=1; ZF=0; OF=0.

До сдвига Р= – 30(8), а после сдвига Р= – 60(8) (результат умножения (– 30(8)) на 2).

4.3. Алгоритм операции сложения (вычитания) в формате с плавающей точкой Рассмотрим общие положения по сложению (вычитанию) операндов с плавающей точкой. Исходя из рассмотренного ранее формата представления чисел с плавающей точкой операнды X и Y представляются как:

Х=Мх*2Рх, где 0,5<=Мх<1 и Pmin<=Px<=Pmax;

Y=Мy*2Рy, где 0,5<=Мy<1 и Pmin<=Py<=Pmax.

Напомним, что только при записи чисел в память в формате с плавающей точкой мантиссы хранятся в диапазоне 1<=М<2, а при извлечении из памяти в ОА скрытый бит восстанавливается и 0,5<=М<1.

Полученная сумма Z=Х+Y также должна быть представлена как Z=Мz*2Рz, где 0,5<=Мz<1 и Pmin<=Pz<=Pmax.

Для стандарта «короткое вещественное»:

Pmax=127(10);

Pmin= – 126(10);

P=128(10) – «превышение порядка» (больше максимально допустимого);

Р= – 127(10) – «потеря порядка» (меньше минимально допустимого).

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

Так как можно складывать только разряды чисел, имеющих одинаковый вес, то для сложения (вычитания) мантисс нужно, чтобы их порядки были одинаковы. Это достигается тем, что процессор перед сложением (вычитанием) выравнивает порядки. Порядки обязательно выравниваются до большего порядка. Если выравнивать порядки до меньшего, то может возникнуть переполнение, т.е. потеря значимых разрядов. При выравнивании порядков процессор действует по следующему алгоритму:

1) из порядка первого операнда вычитается порядок второго;

2) если разность равна 0, то порядки равны и выполняется сложение мантисс;

3) если разность > 0, то нужно выравнять порядок второго операнда до порядка первого, а если < 0, то порядок первого операнда до порядка второго.

Выравнивание порядков производится следующим образом. В счетчик заносится разность порядков. Мантисса соответствующего операнда арифметически сдвигается вправо на один разряд и из счетчика вычитается единица. Это повторяется в цикле до тех пор, пока счетчик не станет равным 0.

После сложения мантисс процессор проверяет результат на нарушение нормализации:

1) 0,5<Мz<1 – нарушения нормализации нет;

2) Мz1 – нарушение нормализации влево, т.е. мантисса не поместилась в разрядную сетку (способы обнаружения нарушения нормализации влево такие же, как и способы обнаружения переполнения при сложении чисел с ФТ). В этом случае выполняется операция нормализации вправо – мантисса суммы арифметически сдвигается вправо на один разряд, а порядок увеличивается на 1. При выполнении операции нормализации вправо процессор после сдвига проверяет, не превышает ли порядок суммы максимально допустимый. Если такая ситуация возникла, процессор фиксирует переполнение при сложении чисел с плавающей точкой;

3) Мz<0,5 – нарушение нормализации вправо, т.е. старший разряд мантиссы равен 0. В этом случае процессор в цикле применяет операцию нормализации влево, а именно: мантисса суммы арифметически сдвигается влево, порядок уменьшается на 1, до тех пор, пока не выполнится условие 0,5Мz<1. При этом процессор проверяет ситуацию, не оказался ли Рz

Рассмотрим детально алгоритм сложения (вычитания) с плавающей точкой в формате КВ, входными данными для которого являются операнды X и Y, хранящиеся в оперативной памяти в формате КВ.

1. Извлекаются операнды из ОП и размещаются в процессоре с плавающей точкой (из-за сложной структурной схемы такого процессора она здесь не приводится – будет рассмотрена в других дисциплинах).

Порядок и мантисса каждого операнда записываются в отдельные регистры (регистр порядка, регистр мантисс). При извлечении операнда из ОП восстанавливается скрытый бит мантиссы, поэтому разрядность регистра мантиссы составляет 25 бит (а не 24 бит).

2. С использованием арифметики целых чисел с ФТ определяется разность порядков первого и второго операндов (Рх – Ру).

3. С учетом разности порядков выполняется денормализация одного из операндов так, чтобы порядки чисел были равны (выравнивание порядков).

4. Переводятся мантиссы из прямого кода в дополнительный код.

С использованием арифметики дробных чисел с ФТ выполняется сложение мантисс.

5. Определяется нарушение нормализации влево или вправо.

Если нарушение есть – выполняется соответствующая операция нормализации. Проверяется превышение максимально допустимого порядка, и если оно есть, то фиксируется переполнение. Проверяется достижение порядком величины меньше минимально допустимой, и если оно есть, то фиксируется потеря значимости. Мантисса суммы переводится в прямой код.

6. Полученный результат записывается в ОП в формате КВ (со скрытием бита мантиссы и объединением содержимого регистра порядка и регистра мантиссы).

Рассмотрим примеры выполнения такого алгоритма. Выполним операции сложения и вычитания над операндами X и Y.

Пример 1. X+Y, где X=24(8), Y= – 65(8). Представим эти операнды в формате КВ, в том виде, в котором они хранятся в ОП.

X=24(8)=10100(2)=1,0100(2)*2100. Тогда с учетом скрытия старшего бита мантиссы получаем:

X= 0 1 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 байт байт байт байт Y= – 65(8)= – 110101(2)= – 1,10101(2)*2101. Тогда с учетом скрытия старшего бита мантиссы получаем:

Y= 1 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 байт байт байт байт Рассмотрим выполнение алгоритма сложения.

Шаг 1. Операнды извлекаются из ОП (с восстановлением скрытого бита) и помещаются в ОА в регистры мантисс и порядков:

РПх= 1 0 0 0 0 1 0 РМх= 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 РПy= 1 0 0 0 0 1 0 РМy= 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Шаг 2. Определяется разность порядков [РПх+( – РПy)]2:

РПх= 1 0 0 0 0 1 0 – РПy= 0 1 1 1 1 0 1 РПх+( – РПy)= 1 1 1 1 1 1 1 Так как разность отрицательная, нужно выравнять порядок первого операнда до порядка второго. Разность записывается в счетчик разности порядков:

СЧ= 1 1 1 1 1 1 1 Шаг 3. Денормализация первого операнда.

AR(РМх,1)= 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 После сдвига значение счетчика разности порядков увеличивается на 1 (так как разность отрицательная, в противном случае его значение уменьшалось бы на 1).

СЧ 1 1 1 1 1 1 1 +1 0 0 0 0 0 0 0 СЧ= 0 0 0 0 0 0 0 Так как счетчик равен 0, порядки операндов выравнены.

Шаг 4. Перевод мантисс в дополнительный код и их сложение:

[РМх]2= 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [РМy]2= 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [РМz]2= 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SF=1; OF=Шаг 5. Так как старший числовой разряд мантиссы значащий – нет нарушения нормализации вправо. Перевод мантиссы суммы Мz в прямой код:

[РМz]1= 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Шаг 6. Порядок результата РПz=РПy (так как до него происходило выравнивание). Далее объединяются порядок и мантисса суммы (со скрытием старшего числового бита) в формат КВ и записываются в ОП.

Z= 1 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 байт байт байт байт Переводим результат из формата КВ в восьмеричную систему счисления. Получаем:

Z= – 1,00001*25= – 100001(2)= – 41(8).

Проверяем результат:

Y 6 – X + 2 Z = – 4 Результат верен.

Пример 2. Х – Y с теми же операндами. Так как при выполнении этой операции шаги с первого по третий будут теми же, что и при сложении, покажем операцию вычитания, начиная с шага 4.

Шаг 4. Перевод мантисс в дополнительный код и вычитание (через сложение):

[РМх]2= 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [– РМy]2= 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [РМz]2= 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 CF=0; SF=1; OF=1.

Шаг 5. Так как возникло нарушение нормализации влево, выполняется операция нормализации вправо (при OF=1 арифметический сдвиг вправо в дополнительном коде выполняется с вдвиганием в знаковый разряд флага CF).

AR(РМz,1)= 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Порядок суммы РПz=РПy увеличивается на 1.

РПz= 1 0 0 0 0 1 0 + 0 0 0 0 0 0 0 РПz= 1 0 0 0 0 1 1 Так как старший числовой разряд мантиссы стал равен 1, нарушение нормализации устранено. Далее следует перевод мантиссы суммы Мz в прямой код:

[РМz]1= 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Шаг 6. Объединяются порядок и мантисса разности (со скрытием старшего числового бита) в формат КВ и записываются в ОП.

Z= 0 1 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 байт байт байт байт Переведем результат из формата КВ в восьмеричную систему счисления. Получаем:

Z=1,001001*26=1001001(2)=111(8).

Проверяем результат:

X + 2 Y 6 Z = 1 1 Результат верен.

4.4. Поразрядные логические операции в цифровых процессорах Прежде чем изучать алгоритмы так называемых «длинных» операций – умножения и деления – рассмотрим четыре «поразрядные логические операции», которые являются составной частью этих алгоритмов. Одноместная (унарная) операция – «инверсия». В такой операции над каждым битом операнда выполняется булева функция отрицания.

x y= ¬x 0 1 Рассмотрим пример. Пусть содержимое восьмиразрядного регистра Р=37(8). Тогда поразрядная операция отрицания Р дает следующий результат:

Р= 0 0 0 1 1 1 1 ¬Р= 1 1 1 0 0 0 0 Эта операция используется для получения значения операнда со знаком «минус». Например, для операнда Х:

– Х= ¬Х+1 в дополнительном коде;

– Х= ¬Х в обратном коде.

Двухместная (бинарная) операция – поразрядное сложение «по модулю 2» или «исключающее или». В такой операции над каждыми битами двух операндов, имеющих одинаковый вес, выполняется булева функция «исключающее или».

x y y=x^y 0 0 0 1 1 0 1 1 Эта операция используется для сравнения операндов на равенство. Рассмотрим примеры.

Пример 1. Пусть в восьмиразрядном регистре Р1 находится операнд 32(8), а в регистре Р2 – операнд 65(8). Тогда поразрядная опера ция сложения «по модулю 2» содержимого регистров Р1 и Р2 дает следующий результат:

Р1= 0 0 0 1 1 0 1 Р2= 0 0 1 1 0 1 0 Р1^Р2 0 0 1 0 1 1 1 SF=0; ZF=0. Так как флаг ZF=0, операнды в регистрах не равны.

Пример 2. Пусть в восьмиразрядном регистре Р1 находится операнд 65(8), а в регистре Р2 – операнд 65(8). Тогда поразрядная операция сложения «по модулю 2» содержимого регистров Р1 и Р2 дает следующий результат:

Р1= 0 0 1 1 0 1 0 Р2= 0 0 1 1 0 1 0 Р1^Р2 0 0 0 0 0 0 0 SF=0; ZF=1. Так как флаг ZF=1, операнды в регистрах равны.

Двухместная (бинарная) операция – поразрядная конъюнкция.

В такой операции над каждыми битами двух операндов, имеющих одинаковый вес, выполняется булева функция – конъюнкция.

x y y=x&y 0 0 0 1 1 0 1 1 Эта операция используется для выделения (сохранения) заданных битов операнда, а остальные биты устанавливаются в 0. Рассмотрим пример.

Пусть в восьмиразрядном регистре Р1 находится операнд 65(8).

Нужно выделить левые два и правые три бита операнда. Тогда формируется так называемая маска (М), которая содержит 1 в сохраняемых битах и 0 – в остальных. Поразрядная конъюнкция Р1 и М дает следующий результат:

Р1= 0 0 1 1 0 1 0 М= 1 1 0 0 0 1 1 Р1&М 0 0 0 0 0 1 0 Из полученного результата видно, что сохранены значения выделяемых битов, а остальные установлены в 0.

Двухместная (бинарная) операция – поразрядная дизъюнкция. В такой операции над каждыми битами двух операндов, имеющих одинаковый вес, выполняется булева функция дизъюнкция («объединяющее или»).

x y y=xvy 0 0 0 1 1 0 1 1 Эта операция используется для установки определенных битов операнда в 1. Рассмотрим пример.

Пусть в восьмиразрядном регистре Р1 находится операнд 65(8).

Нужно установить в 1 левые два бита операнда. Тогда формируется так называемая маска (М), которая содержит 1 в устанавливаемых разрядах и 0 – в остальных. Поразрядная дизъюнкция Р1 и М дает следующий результат:

Р1= 0 0 1 1 0 1 0 М= 1 1 0 0 0 0 0 Р1vМ 1 1 1 1 0 1 0 Из полученного результата видно, что установлены в 1 значения двух левых битов, а остальные биты оставлены без изменения.

4.5. Алгоритмы умножения в цифровых процессорах Напомним алгоритмы умножения в десятичной системе счисления. Вначале рассмотрим алгоритм умножения с младших разрядов множителя. Пусть надо умножить 121(10) на 131(10).

1 2 1 множимое * 1 3 1 множитель — — — 1 2 1 умножение на младший разряд + 3 6 3 умножение на средний разряд — — — — суммирование 3 7 5 1 частичное произведение + 1 2 1 умножение на старший разряд — — — — — суммирование 1 5 8 5 1 произведение Теперь рассмотрим алгоритм умножения, начиная со старших разрядов множителя. Пусть надо умножить 121(10) на 131(10).

1 2 1 множимое * 1 3 1 множитель — — — 1 2 1 умножение на старший разряд + 3 6 3 умножение на средний разряд — — — — суммирование 1 5 7 3 частичное произведение + 1 2 1 умножение на младший разряд — — — — — суммирование 1 5 8 5 1 произведение Алгоритмы умножения в цифровых процессорах в двоичной системе счисления базируются на тех же принципах, что и в десятичной системе счисления. Рассмотрим пример. Пусть надо умножить 1001(2) на 101(2).

1 0 0 1 множимое * 1 0 1 множитель — — — — 1 0 0 1 умножение на младший разряд + 0 0 0 0 умножение на средний разряд — — — — суммирование 1 0 0 1 частичное произведение + 1 0 0 1 умножение на старший разряд — — — — — — суммирование 1 0 1 1 0 1 произведение Поскольку таблица умножения в двоичной системе тривиальна, то, как видно из примера, если очередная цифра множителя равна 1, к частичному произведению добавляется множимое, в противном случае – нули (т.е. частичное произведение не меняется).

Существует следующая классификация алгоритмов умножения (табл. 4.2).

Таблица 4.Классификация алгоритмов умножения Направление сдвига № Умножение частичного п/п начинается множимого множителя произведения 1 с младших неподвижно вправо вправо разрядов мно2 влево вправо неподвижно жителя 3 со старших неподвижно влево влево разрядов мно4 вправо влево неподвижно жителя Наибольшее применение в цифровых процессорах получил первый способ. Следующий по степени использования – четвертый способ. Он используется при умножении дробных чисел в формате с ФТ, когда на n-разрядном процессоре нужно получить не 2*n разрядное произведение, а только его старшие n разрядов.

Функциональная схема ОА для умножения по первому алгоритму приведена на рис. 4.6.

Рис. 4.6. Функциональная схема ОА для умножения по первому алгоритму В схеме использованы следующие обозначения:

ШФ – шинный формирователь управляет направлением передачи данных (или из ОП, или в ОП);

ШД – шина данных ОА;

Р1 – регистр, в который записывается множимое;

Р2 – регистр, в который записывается множитель, а затем в него по ходу умножения пересылаются младшие разряды произведения (по окончании умножения в нем находятся младшие разряды произведения);

СМ – сумматор, работающий в дополнительном коде;

РСМ – регистр для получения частичного произведения (по окончании умножения в нем находится старшая часть произведения);

СФФ – схема формирования флагов;

РФ – регистр флагов;

СЧТ – счетчик тактов работает на вычитание и служит для подсчета количества тактов умножения;

(CF, P2) – объединение в единое CF и Р2 при сдвиге;

(CF, PСМ) – объединение в единое CF и РСМ при сдвиге.

Pages:     | 1 |   ...   | 3 | 4 || 6 | 7 |   ...   | 13 |






















© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.