книги из ГПНТБ / Архаров В.И. Арифметические и логические основы цифровых вычислительных машин учеб. пособие
.pdfПример 8. Найти [х—t/Г для чисел
95
[х]м = = 00,001011111= + — ;
1 V |
512 |
243
[«/]"„ = 11,011110011
512'
Используя при суммировании модифицированный дополнитель ный код,
iM |
|
95 |
|
К о П= 00*00101 И и |
512 |
||
■у]м |
=00,011110011 |
243 |
|
512 |
|||
доп |
* |
||
IX— |
= 00,101010010 = |
1169 |
|
256' |
|||
|
|
Положительный знак суммы свидетельствует о том, что алге браическая сумма получилась в прямом коде
169
[ * - < п = [ * - 0 ] п р = (Ю *1 0 1 0 1 0 0 1 = + 256'
Пример 9. Найти [х— для чисел
[*]“ =11,001101011 = — -107
ПР |
512 |
|
[у]м |
= 00,100111001 = + |
— |
|
|
i^Jnp |
|
|
512 |
[хГ |
= |
11,110010101 = — — |
||
1 |
J«on |
|
|
512 |
-у]‘ |
|
|
199 |
|
|
11,011000111 = — — |
|||
|
х/ J л |
|
|
512 |
|
|
|
|
|
[х— у]“ |
= |
|
23 |
|
11,001011100 = — — |
||||
L |
^J£On |
|
1 |
mn |
|
|
|
|
128 |
Отрицательный знак суммы свидетельствует о том, что алгебраи ческая сумма получилась в дополнительном коде, и ее необходимо преобразовать в прямой код
105
[х—#]“р = 11,1101001
128 '
§3. ВЫПОЛНЕНИЕ ОПЕРАЦИИ УМНОЖЕНИЯ В ЦВМ
СФИКСИРОВАННОЙ ЗАПЯТОЙ
ВЦВМ с фиксированной запятой при умножении двух чисел, представляемых в прямом коде, действия над знаковыми разрядами
идробной частью выполняются раздельно.
50
Умножение дробных частей сводится к элементарным операциям последовательных суммирований и сдвигов. Процессом суммиро вания управляют цифры множителя: если очередная цифра мно жителя изображается цифрой 1, то множимое с соответствующим весом добавляется к сумме частичных произведений; если очеред ная цифра множителя есть 0, суммирование не производится. Про цесс суммирования продолжается до тех пор, пока не будет произ ведено умножение на все разряды множителя.
Знак произведения получается в результате сложения по мо дулю два знаков сомножителей. При таком сложении перенос, если он возникает, теряется. Аналогично производится и определение знака частного при делении двух чисел (табл. 3-1).
Т а б л и ц а 3-1
Сложение знаковых разрядов
0 + |
0 = |
0 |
0 + 1 |
= |
1 |
1 + 0 = 1 |
|
|
1 + |
1 = 0 |
П равило знаков при умножении
( + ) Х ( + ) = |
+ |
( + ) х ( - ) = |
- |
< — ) X ( + ) = |
— |
( — ) X ( — ) = |
+ |
Правило знаков при делении
( + |
|
) ; ( |
+ |
) = |
+ |
|||
( |
+ |
|
) |
: ( |
- |
) |
= |
- |
( |
- |
) |
: |
( |
+ |
) |
= |
- |
( |
- |
) |
: |
( |
- |
) |
= |
+ |
Существуют, |
в основном, четыре варианта |
умножения двух чисел; |
1) умножение начинается с младших разрядов множителя, по |
||
сле каждого |
такта суммирования сумма |
частичных произведений |
имножитель сдвигаются вправо, множимое неподвижно;
2)умножение начинается с младших разрядов множителя, по сле каждого такта суммирования множимое сдвигается влево, а множитель — вправо, сумма частичных произведений неподвижна;
3)умножение начинается со старших разрядов множителя, по
сле каждого такта суммирования сумма частичных произведений
имножитель сдвигаются влево, множимое неподвижно;
4)умножение начинается со старших разрядов множителя, после каждого такта суммирования множимое сдвигается вправо, множитель — влево, сумма частичных произведений неподвижна.
Самым экономичным и наиболее распространенным в ЦВМ яв ляется вариант 1, который мы и рассмотрим подробно.
Пример 10. Найти произведение двух чисел, используя вариант
1.Исходные числа хранятся в ЗУ в прямом коде.
Множимое
[*l“p = ll,1011 = - i i .
Множитель
[г/Ш =00,1001 = + |
— . |
|
* |
1 |
J0 |
4* |
51 |
Произведение
W P |
_99 |
|
256 |
' |
При умножении двух чисел в ЦВМ действия над знаками и мно жителями выполняются раздельно. Знак произведения находится согласно таблице 3-1
00 + 11 = 11 (+ ) X ( - ) =
Знак произведения хранится в знаковых разрядах регистра ре зультата.
После нахождения знака результата знаковые разряды множи мого, множителя и сумматора устанавливаются в нулевое состоя ние.
I такт . |
00,0000 |
00,1001 — множитель. |
+ |
00,1011 |
Умножение на младший разряд множителя. |
|
00,1011 |
I частичное произведение (ЧП). |
|
00,01011 |
Сдвиг вправо на один разряд. |
IIтакт . 00,01011
^00,00000 Умножение на вторую цифру множителя.
|
00,01011 |
II |
частичное произведение. |
|
00,001011 |
Сдвиг вправо на один разряд. |
|
III такт , |
00,001011 |
|
|
+ |
00,000000 |
Умножение на третью цифру множителя. |
|
|
00,001011 |
III |
частичное произведение. |
|
00,0001011 |
Сдвиг вправо на один разряд. |
|
IV такт . |
00,0001011 |
|
|
+ |
00,1011000 |
Умножение на четвертую цифру множителя. |
|
|
00,1100011 |
IV |
частичное произведение. |
|
00,01100011 |
Сдвиг вправо на один разряд. |
|
|
00,01100011 |
Произведение мантисс. |
|
С учетом знака |
|
|
|
|
|
= |
11,01100011 = -----— . |
|
|
пр |
256 |
Пример 11. Найти произведение двух чисел
Множимое
м ; р= о о ,п п = - ! | .
52
Множитель
|
В Д Р = 00, П о д |
l i |
||
|
|
|
|
16 |
произведение |
|
|
|
195 |
|
Ш 1пр |
|
|
|
|
|
|
256 ' |
|
|
|
|
|
|
Знак произведения равен согласно табл. 3-1 |
||||
00 |
00 |
00 |
( ; ) X |
( ) |
I такт . 00,0000 |
00,1101 |
— множитель. |
+00,1111 Умножение на младшую цифру множителя.
00,1111 I частичное произведение (ЧП).
00,01111 Сдвиг вправо на I разряд.
II |
такт |
00,001111 |
Сдвиг вправо. Суммирование не произво |
|
|
|
|
дится, так как |
вторая цифра множителя |
|
|
|
равна 0. |
|
III |
такт |
00,001111 |
Умножение .на третью цифру множителя. |
|
|
|
00,111100 |
||
|
|
01,001011 |
III частичное |
произведение. |
|
|
00,1001011 |
Сдвиг вправо на I разряд. |
|
IV такт |
00,1001011 |
Умножение на четвертую цифру множи- |
||
|
|
”'00,1111000 |
||
|
|
-------------------- |
теля |
произведение. |
|
|
01,1000011 |
IV частичное |
|
|
|
00,11000011 |
Сдвиг вправо на I разряд. |
|
|
|
00,11000011 |
Произведение |
мантисс. |
|
|
|
|
195 |
С учетом знака произведения [хг/]“ =00,11000011 = -|----- . |
||||
|
|
|
|
256 |
|
Как видно из примера 11, после передачи множимого в сумматор |
до сдвига частичное произведение может превышать единицу (ком бинация 01 в знаковых разрядах сумматора).
Время выполнения операции умножения Туы будет определяться длительностью такта суммирования т2, длительностью такта сдвига тСдв и разрядностью п.
Т ум = (хх + хсяв)п.
Для сокращения времени выполнения операции умножения пользуются аппаратными методами, требующими увеличения аппа ратуры арифметического устройства, или логическими методами, связанными с усложнением только схемы управления.
Наиболее распространенным логическим методом ускорения выполнения умножения является пропуск тактов суммирования
53
в тех случаях, ког^а очередная цифра множителя есть нуль. Если полагать, что разряды множителя не зависят один от другого и в каждом из них с равной вероятностью могут находиться как 1, так и 0, то среднее количество тактов суммирования при умноже
нии п разрядных чисел оказывается равным — . Применение этого
метода сокращает среднее время выполнения умножения в отно шении
|
|
Т-СДВ |
|
|
Д |
|
|
сдв |
Обычно т2 |
= 2тсдв, поэтому Д = 0,667, т. е. сокращение сред |
|
него времени умножения составляет 33%. |
||
Для дальнейшего сокращения времени выполнения умножения |
||
в варианте |
1 |
можно в каждом такте анализировать содержимое |
не одного, |
а двух младших разрядов множителя. В этих разрядах |
с равными вероятностями могут встретиться комбинации 00, 01, 10, 11, которые можно выразить следующим образом:
00 = 0; 01 = 2°; 10 = 21; 11 = 22 — 2°.
В соответствии с этим представлением при выполнении первого шага умножения придется произвести не более одного прибавления или вычитания множимого. При необходимости добавить произве дение множимого на 22, т. е. на единицу третьего разряда, эта еди ница запоминается специальной схемой (СС). В дальнейшем перед началом каждого следующего шага умножения будет расшифро вываться комбинация из цифр, имеющихся в двух очередных раз рядах множителя и в схеме СС. Перечень элементарных операций в зависимости от возможных комбинаций трех цифр приведен в таблице 3-2.
Если после просмотра всех разрядов множителя схема СС будет находиться в «1», то к окончательному результату необходимо при бавить множимое в прямом коде.
Сокращение среднего времени умножения при попарном про смотре цифр разрядов множителя выражается отношением
АО
1—— т ------ >
Т2 + Тсдв
при т2 ^ 2тсдв Дх = 0,583, что соответствует экономии времени на 41,7%.
Пример 12. Найти произведение двух чисел, пользуясь методом просмотра двух очередных цифр множителя.
54
Т а б л и ц а 3-2
Номера |
Комбинация |
цифр |
Порядок выполнения элементарных операций |
|||||||
п. п. |
||||||||||
1 |
«00» |
и «0» |
СС |
Сдвиг вправо на |
2 разряда частичного про |
|||||
2 |
«01» |
и «0» |
СС |
изведения (ЧП) |
|
|
|
|
|
|
Прибавление |
множимого в |
ПК |
к частич |
|||||||
|
|
|
|
ному произведению и сдвиг результата на |
||||||
3 |
«10» |
и «0» |
СС |
2 разряда |
вправо |
|
|
|
|
|
Прибавление удвоенного |
множимого в ПК |
|||||||||
|
|
|
|
к ЧП и сдвиг |
результата |
на |
2 разряда |
|||
4 |
«11» |
и «0» |
СС |
вправо |
|
|
|
|
|
|
Вычитание множимого |
из ЧП, |
сдвиг ре |
||||||||
|
|
|
|
зультата на 2 разряда вправо. |
|
|||||
5 |
«00» |
и «1» |
СС |
Установка в «1» |
СС |
|
2 |
со |
сбросом в |
|
Выполняется |
аналогично п. |
|||||||||
6 |
«01» |
и «1» |
СС |
«0» СС |
аналогично п. |
3 |
со |
сбросом |
||
Выполняется |
||||||||||
7 |
«10» |
и «1» |
СС |
в «0» СС |
|
|
|
|
|
|
Выполняется аналогично п. 4 |
с установки |
|||||||||
8 |
«11» |
и «1» |
СС |
Выполняется |
аналогично п. |
1 |
||||
|
|
|
|
в «1» СС |
|
|
|
|
|
|
Множимое |
|
[х]" |
=11,111111 = — — . |
1пР |
64 |
Множитель |
|
[У]« |
=00,111001 = + — . |
Произведение
|
|
3591 |
|
[ ^ ] “р |
|
|
|
4096 ' |
Знак произведения определяется согласно таблице 3-1 |
||
|
11 |
+ 00 = 11 ( - ) X (+ ) = — . |
I такт |
00,000000 |
«01» и «0» СС. |
+00,111111 Прибавление множимого в ПК.
00,111111 I частичное произведение.
00,00111111 Сдвиг I ЧП на 2 разряда вправо.
II такт . 00,00111111 |
«10» и «0» СС. |
+01,11111000 Прибавление удвоенного множимого.
10,00110111 II частичное произведение.
55
00,1000110111 Сдвиг II части произведения на 2 раз ряда вправо.
III такт |
00,1000110111 |
«11» и «0» СС. |
‘11,0000010000 Дополнительный код множимого.
11,1001000111 III частичное произведение.
11,111001000111 Модифицированный сдвиг на 2 раз ряда вправо.
__ 11,111001000111 «1» СС.
1 00,111111000000 Прибавление множимого в ПК-
00,111000000111 Произведение мантисс.
С учетом знака
[хуГ = |
11,111000000 = — — . |
а ПР |
4096 |
§ 4. ДЕЛЕНИЕ ЧИСЕЛ В ЦВМ С ФИКСИРОВАННОЙ ЗАПЯТОЙ
Деление чисел в ЦВМ сводится к выполнению последовательных вычитаний делителя у первоначально из делимого х, а затем из об разующихся в процессе деления частичных остатков zh и сдвига частичных остатков на один разряд влево (10 zt).
Знак частного определяется как сумма по модулю два для зна ков делимого и делителя согласно таблице 3-1, а модуль частного— как частное от деления модуля делимого на модуль делителя. По этому деление двух чисел с произвольным сочетанием знаков может быть сведено к делению двух положительных чисел, заданных
впрямом коде.
Вцифровых машинах с запятой, фиксированной перед старшим . значащим разрядом, деление возможно только в случае, если де лимое х по модулю меньше делителя у. В противном случае частное превышает единицу и выходит за пределы разрядной сетки числа.
В дальнейшем будем считать, что
\ х \ < \ у \ . |
(3.1) |
При автоматическом выполнении деления делитель у вычитается из делимого х. и определяется знак остатка z ± — х—у. При выпол нении условия (3.1) остаток zx всегда будет отрицательным, по этому первая старшая цифра частного равна 0. В этом случае можно идти двумя различными способами.
По первому способу возвращаемся к делимому х путем прибав ления делителя у к остатку zlt то есть х = z1 -'r у. Сдвигаем делимое х на один разряд влево (10 х) и вновь вычитаем делитель у. Если полученный остаток z2 = 10х—у будет положительный, то простав ляем в частном 1, сдвигаем частичный остаток z2 на один разряд влево (10 z2) и вновь вычитаем делитель (z3 = 10z2—у) и т. д.
56
Если же остаток z2< 0 , проставляем в частном 0, восстанавли ваем предыдущий частичный остаток 10* = z 2 -j- у, сдвигаем его на один разряд влево (100*) и вновь вычитаем делитель (z3100x—у) и т. д. Операции повторяются до тех пор, пока не получится частич ный остаток Zi ----- 0 или пока в частном не получится требуемое ко личество разрядов.
Метод выполнения деления, когда в случае получения отрица тельного остатка к нему прибавляется делитель, называется мето дом с восстановлением остатка.
По второму способу при получении отрицательного остатка zt последний сдвигается на один разряд влево (Юг,-), после чего дели тель не вычитается, а прибавляется (Юг,- + у).
Пусть |
из делимого х вычитается делитель у, остаток будет ра |
|
вен zx — *—у, |
если + -<0, проставляем в частное 0, сдвигаем zx |
|
влево на |
один |
разряд |
- |
|
10Z! = 10 (х—у), |
а для нахождения следующего остатка прибавим к нему делимое у
z 2 ----- 10z, + у = 10* — 10у г у ----- Ю*—у.
Видим, что z2 представляет собой делимое *, сдвинутое на один разряд влево (10*), из которого вычитается делитель у. Происходит автоматическое восстановление остатка. Если г2<Ю, проставляем в частное 0, сдвигаем z2 опять влево (10z2) и к нему вновь прибав ляем у. Если z2>-0, прибавляем в частное 1, сдвигаем z2 влево и вычитаем делитель и т. д.
Описанный метод деления называется методом деления без вос становления остатка.
Пример 13. Разделить два числа, используя метод с восстанов лением остатка. Арифметические действия над дробными частями чисел производить в модифицированном дополнительном коде.
Делимое
[х]“р = 00,010010011 |
147 |
||
512 ' |
|||
|
|
||
Делитель |
|
|
|
[уГ |
=11,101010000 = — — . |
||
L^Jnp |
’ |
02 |
|
Знак частного согласно таблице 3-1 |
равен 00+11 = 11. |
Производим деление модулей дробных частей делимого и делителя
|
00,010010011 |
1) |
ПК делимого |
Цифры частного |
1 11,010110000 |
|
ДК делителя |
|
|
+, |
11,101000011 |
2) |
Z !< 0 |
0, |
00,10101 |
|
ПК делителя |
|
|
|
00,010010011 |
Восстановленный остаток |
57
, |
00,100100110 |
Сдвиг остатка |
влево |
|
' |
11,010110000 |
ДК делителя |
|
|
, |
11,111010110 |
3) z2< |
0 |
0,0 |
+ |
00,10101 |
ПК делителя |
|
|
|
00,100100110 |
Восстановление остатка |
||
. |
01,001001100 |
Сдвиг остатка влево |
||
+ |
11,010110000 |
ДК делителя |
|
|
|
00,011111100 |
4) z3> |
0 |
0,01 |
, |
00,111111000 |
Сдвиг |
остатка |
влево |
4 |
11,010110000 |
ДК делителя |
|
|
|
00,010101000 |
5) z4> 0 |
0,011 |
|
_j |
00,101010000 |
Сдвиг остатка влево |
||
г 11,010110000 |
ДК делителя |
|
||
|
00,000000000 |
6) z5 = |
0 |
0,0111 |
С учетом знака частное равно |
|
|||
|
X ” = 11,0111 = |
----- —7 . |
||
|
у |
. лр |
|
16 |
Пример 14. Разделить два числа методом деления без восстанов ления остатка. Арифметические действия над дробными частями числа производить в модифицированном дополнительном коде.
Делимое
|
|
М “р = 11,100000011 = — — . |
|||
|
|
|
|
|
512 |
|
Делитель |
|
|
|
|
|
|
[у\ы =11,111 |
= — — . |
||
|
|
l^ Jnp |
’ |
|
g |
|
Знак частного согласно таблице равен |
11 Д 1 1 -= 00. Произво- |
|||
дим деление модулей делимого и делителя |
|||||
|
00,100000011 |
1) |
ПК делимого |
|
Частное |
|
11,001000000 |
|
ДК делителя |
|
|
|
11,101000011 |
2) |
Zl< 0 |
|
0, |
, |
11,010000110 |
|
Сдвиг остатка zx влево |
||
+ |
00,111000000 |
|
ПК делителя |
|
|
|
00,001000110 |
3) |
z2> 0 |
|
0,1 |
|
00,010001100 |
Сдвиг остатка z2 влево |
|||
|
11,001000000 |
ДК делителя |
|
|
58
|
11,011001100 |
4) z3< 0 |
0,10 |
, |
10,110011000 |
Сдвиг остатка |
z3 влево |
'г 00,111000000 |
ПК делителя |
|
|
|
11,101011000 |
5) z4< 0 |
0,100 |
, |
11,010110000 |
Сдвиг остатка |
z4 влево |
г 00,111000000 |
ПК делителя |
|
|
|
|
|
А |
|
00,001110000 |
6) 2-л> 0 |
0,1001 |
|
, |
00,011100000 |
Сдвиг остатка гь влево |
||
_г 11,001000000 |
ДК делителя |
|
||
|
11,100100000 |
7) ze< 0 |
0,10010 |
|
, |
11,001000000 |
Сдвиг остатка |
z6 влево |
|
1 00,111000000 |
ПК делителя |
|
||
|
00,000000000 |
8) z7 = 0 |
0,100101 |
|
С учетом знака частное |
равно |
|
||
|
|
= |
00,100101 |
37 |
|
|
62 ‘ |
||
|
|
Jn p |
|
§ 5. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ В ЦВМ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
Как указывалось выше в главе второй, числа в ЦВМ с плаваю щей запятой могут быть нормализованными и ненормализованными.
При решении задач на ЦВМ ненормализованные числа обычно не применяются, потому что при выполнении арифметических опе раций над малыми ненормализованными числами они становятся машинными нулями, т. е. выходят за разрядную сетку вправо.
В нормализованных числах мантисса N 0 удовлетворяет условию
~< \ N 0\<1.
Положительные нормализованные числа должны иметь сочета ние 00,1 в двух знаковых разрядах числа и старшем цифровом раз ряде мантиссы.
Отрицательные нормализованные числа, представленные в мо дифицированном прямом коде, имеют сочетание 11,1. Отрицатель ные нормализованные числа, представленные в модифицированном дополнительном или обратном кодах, должны иметь сочетание 11,0. При выполнении арифметических действий над двумя нормализо ванными числами результат может быть ненормализованным чис лом, т. е. происходит нарушение нормализации. Невыполнение условия |iV0|< < l называется нарушением нормализации влево.
59