WWW.DISSERS.RU

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

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


Pages:     | 1 |   ...   | 7 | 8 || 10 | 11 |   ...   | 13 |

[PМz]1=11001011;

РПz=10000110 (был увеличен на 1 при делении мантисс на шаге пробного вычитания).

Так как старший числовой разряд мантиссы равен 1– нет нарушения нормализации.

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

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

Z= – 1,001011*26= – 1001011 (2)= – 113(8).

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

X/Y = – 113(8).

Результат верен.

4.7. Ускорение операции умножения в цифровых процессорах Операция умножения относится к так называемым длинным операциям, т.е. время ее выполнения намного больше времени выполнения коротких операций (сложения, вычитания). В то же время она часто используется при вычислениях. Поэтому разработаны различные способы сокращения времени выполнения операции умножения.

Рассмотрим эти способы.

Первый способ. Время выполнения операции умножения можно сократить за счет операций сдвига. Для этого в состав арифметического устройства включают дополнительное оборудование, которое позволяет производить сдвиги на произвольное количество битов за один такт, что сокращает время, если в множителе встречаются следующие двоичные комбинации:

а) если встречается комбинация 0000…0 (количество 0 равно m), то дополнительное оборудование позволяет сдвинуть частичное произведение и множитель на m битов за один такт (вместо m тактов);

б) если встречается комбинация 01111…1 (количество 1 равно m), тогда она преобразуется в 1000…0 (количество 0 равно m), и в этом случае из частичного произведения вычитается множимое, а затем производится сдвиг на m битов (тратится два такта вместо m).

Второй способ. Использование аппаратной реализации матричного метода умножения. В приведенном ниже примере показано умножение четырехбитовых операндов Z=Х*У, где Х=х1х2х3х4 и У=y1y2y3y х1 х2 х3 х * y1 y2 y3 y х1*y4 х2*y4 х3*y4 х4*y х1*y3 х2*y3 х3*y3 х4*y х1*y2 х2*y2 х3*y2 х4*yх1*y1 х2*y1 х3*y1 х4*y_ _ _ _ _ _ z7 z6 z5 z4 z3 z2 zПоскольку произведение xi*yi равно конъюнкции этих битов, то можно построить комбинационную схему, реализующую умножение (рис. 4.13).

Рис. 4.13. Аппаратная реализация матричного метода умножения Третий способ состоит в одновременном умножении на два разряда множителя. Алгоритм этого умножения следующий:

1. В СЧТ устанавливается значение, равное половине количества битов множителя, на которые производится умножение.

2. Если очередные два бита множителя, на которые производится умножение, равны 0 (комбинация 00), то производится сдвиг на два разряда вправо частичного произведения и множителя.

3. Если очередные два бита множителя, на которые производится умножение, равны 01, то к частичному произведению прибавляется множимое, а затем производится сдвиг на два разряда вправо частичного произведения и множителя.

4. Если очередные два бита множителя, на которые производится умножение, равны 10, то к регистру РСМ прибавляется удвоенное множимое, а затем производится сдвиг на два разряда вправо частичного произведения и множителя.

5. Если очередные два бита множителя, на которые производится умножение, равны 11, то к регистру РСМ прибавляется отрицательное множимое, а затем производится сдвиг на два разряда вправо частичного произведения и множителя, т.е. 11(2)=3(10) преобразуется в 4(10)=100(2). При этом следующая комбинация двух битов множителя учитывает добавляемую 1.

Рассмотрим пример выполнения такого алгоритма.

Выполнить в дополнительном коде умножение Х*У в девятиразрядном процессоре (крайний левый разряд – знаковый) ускоренным способом на два разряда множителя.

Х=112(8)=1001010(2);

Y=307(8)=11000111(2);

[Х]2=001001010;

[Y]2=011000111;

[– Х]2=110110110;

[2*Х]2=010010100.

CF РСМ Р2 СЧТ Комментарий * * * * * * * * * * * * * * * * * * * * Исходное состояние 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 100 CF:=0; РСМ:=0; Р2:=[Y]2; СЧТ= 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1 1 1 100 +( – Р1) 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1 1 1 100 РСМ:=РСМ+( – Р1) 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1 100 (CF,PCM,Р2):=AR((CF,PCM,Р2),2) 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1 011 СЧТ:=СЧТ – 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 0 0 0 1 011 +(2*Р1), так как 01+1=1 0 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 1 011 РСМ:=РСМ+(2*Р1) 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 011 (CF,PCM,Р2):=AR((CF,PCM,Р2),2) 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 010 СЧТ:=СЧТ – 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 1 1 010 (CF,PCM,Р2):=AR((CF,PCM,Р2),2) 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 1 1 001 СЧТ:=СЧТ – 0 1 1 0 1 1 0 1 1 0 0 0 0 1 1 0 0 1 1 001 +( – Р1) 0 1 1 0 1 1 1 1 1 0 0 0 0 1 1 0 0 1 1 001 РСМ:=РСМ+( – Р1) 0 1 1 1 1 0 1 1 1 1 1 0 0 0 0 1 1 0 0 001 (CF,PCM,Р2):=AR((CF,PCM,Р2),2) 0 1 1 1 1 0 1 1 1 1 1 0 0 0 0 1 1 0 0 000 СЧТ:=СЧТ – 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 1 1 0 0 000 +Р1 0 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 0 0 000 РСМ:=РСМ+Р1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 0 0 n+1 сдвиг Результат= 000011100110000110(2)=11100110000110(2)=34606(8) верен Следует отметить (такой случай есть в вышеприведенном примере), что если при значении СЧТ=0 в Р2 нужно учесть дополнительную 1 от предыдущей комбинации 11, то к РСМ прибавляется множимое без последующего сдвига; затем делается «n сдвиг», если умножаются целые операнды, а если дробные – обнуляется последний бит Р2.

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

Например, сложение операндов двойной длины будет выполнено не одной командой, а двумя, и затрачено будет на это два такта. Такую арифметику будем называть арифметикой многократной точности.

Для поддержки такой арифметики в процессоре есть специальные команды. Например, для сложения в процессорах фирмы Intel есть команды ADD <регистр источник>,<регистр приемник> и ADC <регистр источник >,<регистр приемник>. Первая команда складывает регистр источника с регистром приемником. Результат сложения запоминается в регистре приемнике, а значение переноса из старшего разряда суммы запоминается во флаге CF. Вторая команда складывает регистр источника с регистром приемником и с флагом переноса.

Результат сложения запоминается в регистре приемнике, а значение переноса из старшего разряда суммы запоминается во флаге CF. Используя эти две команды друг за другом можно по «цепочке» складывать операнды любой длины кратной разрядности процессора.

Рассмотрим примеры сложения и вычитания в арифметике с многократной точностью. Пусть процессор, работающий в дополнительном коде, имеет разрядность четыре и крайний левый разряд знаковый. Выполнить операции Х+Y и Х –Y над восьмиразрядными операндами, у которых крайний левый разряд знаковый. Пусть операнды Х и Y хранятся соответственно в следующих регистрах процессора:

РХ1 – младшие 4 бита;

РХ2 – старшие 4 бита;

РY1 – младшие 4 бита;

РY2 – старшие 4 бита.

Результат сложения записывается в РY.

Пример 1. Х+Y, где Х=73(8)=00111011(2);

Y=52(8)=00101010(2);

[Х]2=00111011(2);

[Y]2=00101010(2).

Тогда РХ1=1011;

РХ2=0011;

РY1=1010;

РY2=0010.

Такты CF Слагаемые операнды Комментарий * 1 0 1 1 РХ* 1 0 1 0 РY(ADD) 1 0 1 0 1 результат сложения в РY1 0 0 1 1 РХ2 1 0 0 1 0 РY(ADC) 1 1 CF 0 0 1 1 0 результат сложения в РYSF=0; CF=0; ZF=0; OF=0.

Сумма находится в [(РY2,РY1)]2=01100101=01100101(2)=145(8). Результат верен.

Пример 2. Х – Y=Х+( – Y), где Х=73(8)=00111011(2);

Y=52(8)=00101010(2);

[Х]2=00111011(2);

[– Y]2=11010110(2);

Тогда РХ1=1011;

РХ2=0011;

РY1=0110;

РY2=1101.

Такты CF Слагаемые операнды Комментарий * 1 0 1 1 РХ1 * 0 1 1 0 РY1 0 0 0 1 результат сложения в РY1 0 0 1 1 РХ1 1 1 0 1 РY1 1 CF 1 0 0 0 1 результат сложения в РYSF=0; CF=1; ZF=0; OF=0.

Разность находится в [(РY2,РY1)]2=00010001=00010001(2)=21(8).

Результат верен.

Пример 3. Х+Y, где Х=73(8)=00111011(2);

Y=121(8)=01010001(2);

[Х]2=00111011(2);

[Y]2=01010001(2).

Тогда РХ1=1011;

РХ2=0011;

РY1=0001;

РY2=0101.

Слагаемые Такты CF Комментарий операнды * 1 0 1 1 РХ1 * 0 0 0 1 РY0 1 1 0 0 результат сложения в РY1 0 0 1 1 РХ1 0 1 0 1 РY1 0 CF 0 1 0 0 0 результат сложения в РYSF=1; CF=0; ZF=0; OF=1.

Возникло переполнение, которое обнаружено по значению цепей переноса из старшего числового разряда в знаковый и из знакового при сложении РХ2 и РY2.

Рассмотрим алгоритм умножения в арифметике с многократной точностью. Пусть надо умножить восьмиразрядные операнды Х и Y на четырехразрядном процессоре.

Обозначим младшие четыре разряда операндов соответственно через Х1 и Y1, а старшие – через Х2 и Y2 :

x7 x6 x5 x4 x3 x2 x1 xХ= Х2 Хy7 y6 y5 у4 у3 у2 у1 уY= Y2 YПредставим Х и Y следующим образом:

Х=X1+24*X2;

Y=Y1+24*Y2.

Тогда умножение Х на Y можно представить как X*Y=(X1+24*X2)*(Y1+24*Y2)=X1*Y1+X1*Y2*24+X2*Y1*24+X2*Y2*28.

Алгоритм умножения по этому выражению будет следующий:

1. Получить произведения: X1*Y1, X1*Y2, X2*Y1, X2*Y2. Каждое из них – восьмибитовое, будет храниться в двух регистрах (или ячейках памяти) процессора.

2. Просуммировать их значения в соответствии с вышеприведенным выражением. Схематично это будет выглядеть следующим образом:

Такты 215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20 Комментарий +X1*Y1 х х х х (мл. часть) +X1*Y2 х х х х (ст. часть) +X1*Y3 х х х х (мл. часть) +X2*Y4 х х х х (мл. часть) 5 х х х х +X1*Y (ст. часть) +X2*Y6 х х х х (ст. часть) +X2*Y7 х х х х (мл. часть) +X2*Y8 х х х х (ст. часть) Рассмотрим конкретный пример.

Х=00100100(2), Y=01010010(2).

X1=0100(2);

Y1=0010(2);

X2=0010(2);

Y2=0101(2);

1. Получаем произведения: X1*Y1, X1*Y2, X2*Y1, X2*Y2:

X1*Y1=00001000(2);

X1*Y2=00010100(2);

X2*Y1=00000100(2);

X2*Y2=00001010(2).

2. Просуммируем эти значения в соответствии с вышеприведенным выражением.

Такты 215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20 Комментарий Исходное 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 состояние +X1*Y1 0 0 (мл. часть) результат 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 суммирования +X1*Y0 0 0 (ст. часть) результат 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 суммирования +X1*Y3 0 1 0 (мл. часть) результат 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 суммирования +X2*Y0 1 0 (мл. часть) 4 результат 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 суммирования +X1*Y0 0 0 (ст. часть) 5 результат 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 суммирования +X2*Y0 0 0 (ст. часть) 6 результат 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 суммирования +X2*Y1 0 1 (мл. часть) 7 результат 0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0 суммирования +X2*Y0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 (ст. часть) 8 результат 0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0 суммирования Результат верен.

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

4.9. Операции сложения и вычитания в BCD-кодах Сложение в BCD-кодах выполняется суммированием тетрад слагаемых, имеющих одинаковый десятичный вес в двоичной системе счисления. При этом учитывается (прибавляется) перенос, возникающий при сложении тетрад слагаемых предыдущего десятичного разряда. После сложения должна корректироваться тетрада суммы (коррекция тетрады). Величина коррекции определяется из следующих положений:

1. Тетрада суммы должна получаться по тем же правилам, что и тетрады исходных слагаемых.

2. Тетрада суммы должна удовлетворять двум условиям (Хi – обозначает i-й десятичный разряд):

а) t(Хi)+t(Yi)+CFi – 1=t(Хi+Yi+CFi – 1), если Хi+Yi+CFi – 19(10);

б) t(Хi)+t(Yi)+CFi – 1=t(Хi+Yi+CFi – 1–10(10))+16(10), если Хi+Yi+CFi – 1>9(10).

Исходя из этих условий рассмотрим, какая коррекция должна быть в коде 8421.

Из условия а) для кода 8421 следует, что:

t(Хi)+t(Yi)+CFi – 1=t(Хi+Yi+CFi – 1)+К, где К – величина коррекции.

Чтобы выполнялось условие а), К должно равняться 0 (т.е. тетрада суммы остается без изменения). Рассмотрим пример.

4(10)+5(10)=9(10). Так как операнды одноразрядные, то CFi – 1=0.

Перенос (i)-тетрада Комментарий в (i+1)-тетраду 0 1 0 0 1-е слагаемого – 4(10) 0 1 0 1 2-е слагаемого – 5(10) 0 0 0 0 CFi – 1 перенос из предыдущей тетрады равен 0 1 0 0 1 сумма – 9(10) и перенос 0 в следующую тетраду 1 0 0 1 поскольку выполняется условие а), сумма (Хi+Yi+CFi – 1)8421(1001(2)=9(10)), коррекция тетрады не нужна Из условия б) для кода 8421 следует, что:

t(Хi)+t(Yi)+CFi – 1=t(Хi+Yi+CFi – 1 – 10)+10+К, где К – величина коррекции.

Чтобы выполнялось условие б), К+10 должно равняться 16.

К+10=16, откуда получаем, что К=6 (т.е. значение тетрады увеличивается на 110(2)).

Пример 1. 7(10)+6(10)=13(10) Перенос в (i+1)-тет- (i)-тетрада Комментарий раду 0 1 1 1 1-е слагаемого – 7(10) 0 1 1 0 2-е слагаемого – 6(10) 0 0 0 0 CFi–1 перенос из предыдущей тетрады равен 0 1 1 0 1 сумма и перенос 1 в следующую тетраду 0 1 1 0 поскольку выполняется условие б), сумма (Хi+Yi+CFi–1)8421>(1001(2)=9(10)), коррекция тетрады равна 110(2) 1 0 0 1 1 значение тетрады и переноса после коррекции, т.е. сумма в этом разряде равна 3 и перенос, равный 1, в следующую тетраду Пример 2. 7(10)+9(10)=16(10) Перенос в (i+1)-тет- (i)-тетрада Комментарий раду 0 1 1 1 1-е слагаемого – 7(10) 1 0 0 1 2-е слагаемого – 9(10) 0 0 0 0 CFi–1 перенос из предыдущей тетрады равен 1 0 0 0 0 сумма и перенос 1 в следующую тетраду 0 1 1 0 поскольку выполняется условие б), сумма с учетом переноса (Хi+Yi+CFi–1)8421>(1001(2)=9(10)), коррекция тетрады равна 110(2) 1 0 1 1 0 значение тетрады и переноса после коррекции, т.е. сумма в этом разряде равна 6 и перенос, равный 1, в следующую тетраду Таким образом, цифровой процессор, работающий в BCD-коде 8421, определяет необходимость коррекции (+110(2)) в тетраде по одному из двух признаков:

- значение тетрады суммы больше 1001(2);

- значение переноса из тетрады суммы равно 1.

Теперь рассмотрим, какая коррекция должна быть в коде 8421+3.

Из условия а) для кода 8421+3 следует, что (рассматриваем тетрады как двоичный код):

t(Хi)+t(Yi)+CFi–1=t(Хi+3)+t(Yi+3)+CFi–1=t(Хi+Yi+CFi–1+3)+3+К, где К – величина коррекции.

Чтобы выполнялось условие а), К+3 должно равняться 0, откуда получаем, что К= – 3 (т.е. значение тетрады уменьшается на 11(2)).

Пример. 4(10)+5(10)=9(10) Перенос в (i+1)-тет- (i)-тетрада Комментарий раду 0 1 1 1 1-е слагаемого – 4(10) 1 0 0 0 2-е слагаемого – 5(10) 0 0 0 0 CFi – 1 перенос из предыдущей тетрады равен 0 1 1 1 1 сумма и перенос в следующую тетраду 1 1 1 1 поскольку для кода 8421+3 выполняется условие а), сумма (Хi+Yi+CFi - 1)8421+3 (1100(2)= =9(10)), то коррекция тетрады равна – 11(2) 1 1 0 1 коррекция: прибавление –0011(2)=[1101]2. Обратите внимание, что при замене вычитания 0011(2) на сложение с [1101]2 перенос в следующую тетраду блокируется 1 1 0 0 результат равен 9(10) Из условия б) для кода 8421+3 следует, что:

t(Хi)+t(Yi)+CFi–1=t(Хi+3)+t(Yi+3)+CFi–1=t(Хi+Yi+3+CFi–1–10)+3+10+К, где К – величина коррекции.

Чтобы выполнялось условие б), К+10+3 должно равняться 16.

К+10+3=16, откуда получаем, что К=3 (т.е. значение тетрады увеличивается на 11(2)).

Цифровой процессор, работающий в BCD-коде 8421+3, определяет необходимость коррекции (–11(2) или +11(2)) в тетраде суммы соответственно по одному из двух признаков:

- из тетрады суммы перенос равен 0;

- из тетрады суммы перенос равен 1.

Pages:     | 1 |   ...   | 7 | 8 || 10 | 11 |   ...   | 13 |






















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

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