Содержание
Задание 1. Перевод чисел из одной позиционной системы в другую……………………….…3
1.1 Перевод чисел из десятичной системы счисления в двоичную…………………....3
1.2 Изображение чисел в форме с фиксированной запятой (ФЗ).…….………………..5
1.3 Изображение чисел в форме с плавающей запятой (ПЗ)…………………..……….6
Задание 2. Сложение двоичных чисел…………………………………………………....….…..7
2.1 Сложение чисел в форме с ФЗ в обратном коде (ОК)………………………………7
2.2 Сложение чисел в форме с ФЗ в дополнительном коде (ДК)………………………8
2.3 Сложение чисел в форме с ФЗ в модифицированном коде………………...………8
2.4 Сложение чисел в форме с ПЗ………………………………………………….….…9
Задание 3. Умножение двоичных чисел………………………………………………………..11
3.1 Умножение чисел с ФЗ в ПК, используя первый способ умножения…………....11
3.2 Умножение чисел с ФЗ в ДК, используя второй способ умножения………….....13
3.3 Умножение чисел с ФЗ в ДК, используя третий способ умножения……...……...15
3.4 Умножение чисел с ПЗ, используя четвертый способ умножения……..……...…16
Задание 4. Деление двоичных чисел………………………………………………..…………..19
4.1 Деление чисел с ФЗ в ПК первым способом, применяя алгоритм с восстановлением остатков (ВО) и ОК при вычитании………………………………………………………………………………..……….19
4.2 Деление чисел с ФЗ в ПК вторым способом, применяя алгоритм без ВО и ДК
при вычитании………………………………………………………….…………….………….21
4.3 Деление чисел с ФЗ в ДК вторым способом, применяя алгоритм с автоматической коррекцией…………………………………………………………………………………..……23
4.4 Деление чисел с ПЗ первым способом…………………………………...…………24
Задание 5. Сложение двоично-десятичных чисел……………………………………………..27
5.1 Сложение двоично-десятичных чисел в коде 8-4-2-1………………………..……27
5.2 Сложение двоично-десятичных чисел в коде с избытком три………………..….28
5.3 Сложение двоично-десятичных чисел в коде 2-4-2-1………………………..……30
5.4 Сложение двоично-десятичных чисел в коде 3а+2………………………..………31
Задание 6. Умножение двоично-десятичных чисел…………………………………......…….32
6.1 Умножение старорусским методом удвоения – деления пополам……...………..32
6.2 Умножение методом десятично-двоичного разложения множителя………….....34
Список литературы………………………………………………………………………...…….36
I
.
Перевод чисел из одной позиционной системы счисления в другую с использованием промежуточных систем счисления и изображение чисел в форматах ЕС и СМ ЭВМ.
Задание №1
Выполнить перевод из 10СС в 2СС, используя промежуточные системы счисления. Выполнить проверку результата, так же используя промежуточные системы счисления.
|
|
Любое число А в позиционной системе счисления (СС) с основанием q можно записать в виде:
A(q) = an
qn
+ an-1
qn-1
+…+ a1
q1
+ a0
q0
+ a-1
q-1
+…+ a-m
q-m
=,
где ak
– цифра числа в данной СС;
qk
– разрядный вес цифры ak
;
n+1 – количество разрядов в целой части числа;
m – количество разрядов в дробной части числа.
Чтобы перевести целое число в новую СС, его необходимо последовательно делить на основание новой СС до тех пор, пока не получится частное, у которого целая часть равна 0. Число в новой СС записывают из остатков от последовательного деления, причем последний остаток будет старшей цифрой нового числа.
Чтобы перевести правильную дробь из одной позиционной СС в другую, надо её последовательно умножать на новое основание до тех пор пока в новой дроби не будет получено нужного количества цифр, определяемого заданной точностью. Правильная дробь в новой СС записывается из целых частей произведений, и старшей цифрой новой дроби будет целая часть первого произведения.
Формула для определения количества цифр в новой СС: ,
где m1
– количество цифр исходной дроби с основанием p;
m2
– количество цифр в новой дроби с основанем q.
А=356,31
10сс – 8сс – 2сс
Перевод целой части:
35610
= 5448
= 0, 101
10
0
1
00
2
5 4 4
|
|
356 8
4
44 8
4
5 8
5
0
Перевод дробной части
:
Количество цифр после перевода дроби из 10 СС в 8 СС:
= 3
0,3110
= 0,2368
= 0, 010
011
110
2
2 3 6
|
|
0
,31
8
2
,48
8
3,
84
8
6
,72
Проверка:
2cc – 16сс – 10сс
0001
0110
0100
, 0100
1111
0000
2
= 164,4F16
= (1*256+6*16+4+4*16-1
+15*16-2
)10
=
1 6 4 4 15 0
= 356,3085…10
= 356,3110
(верный результат)
B
=723,54
10сс – 16сс – 2сс
Перевод целой части:
72310
= 2D316
= 0, 0010
1
10
1
0011
2
2 D 3
|
|
723 16
3
45 16
13
2 16
2 0
Перевод дробной части:
Количество цифр после перевода дроби из 10 СС в 16 СС:
= 3
0,5410
= 0,8A316
= 0, 1
0
00
1010
0011
2
8 A 3
|
|
0
,54
16
8
,64
16
10
,24
16
3
,84
Проверка:
2cc – 8сс – 10сс
001
011
010
011
, 100
010
100
011
2
= 1323,42438
= (1*512+3*64+2*8+3+4*8-1
+2*8-2
+4*8-3
)10
=
1 3 2 3 4 2 4 3
= 723,539…10
= 723,5410
(верный результат)
Задание №2
Пусть А – положительное,
B
– отрицательное. Изобразить каждое из них в форме с ФЗ в 32 разрядной сетке ЦВМ, предварительно промасштабировав.
|
|
Для двоичных чисел с ФЗ используют 3 формата фиксированной длины: полуслово – короткий с ФЗ (2 байта = 16 бит, 16 разрядов); слово – длинный с ФЗ (4 байта = 32 бита, 32 разряда); двойное слово – для промежуточных действий(8 байт = 64 бита, 64 разряда), чтобы обеспечить высокую точность вычислений. Двоичные операнды имеют вид целых чисел в дополнительном коде, у которых крайний левый разряд – знаковый. Это правило справедливо как для ЕС ЭВМ, так и для ПЭВМ.
А = 356,31
А = 101100100,0100111102
М=2-9
зн
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 1 1 1 1 0
|
|
B
= -723,54
B = -1011010011,1000101000112
М=2-10
1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 1 1 1 0 1 0 1 1 1 0 1
|
|
зн
Задание №3
Пусть
B
– положительное,
A
– отрицательное. Изобразить каждое из них в форме с ПЗ, предварительно промасштабировав.
|
|
Двоичные числа с ПЗ изображаются по-разному в ЕС ЭВМ и ПЭВМ. Общим в изображении является лишь то, что порядки имеют смещения.
В ПЭВМ для чисел с ПЗ используются два формата: короткий и длинный. Смещенный порядок занимает восемь разрядов (смещение=128), крайний левый разряд сетки отводится под знак числа, остальные под мантиссу, изображенную в 2СС (23 разряда в коротком и 55 разрядов в длинном формате). Смещенный порядок содержит информацию о положении запятой в двоичной мантиссе числа. Для повышения точности представления мантиссы старший разряд ее, который в нормализованном виде всегда равен «1», может не заноситься в разрядную сетку, а просто подразумеваться.
В ЕС ЭВМ для чисел с ПЗ имеются три формата: короткий – слово, длинный - двойное слово и расширенный – учетверенное слово. Во всех этих форматах смещенный порядок занимает семь разрядов (смещение=64) и размещается в старшем байте вместе со знаковым разрядом числа. Остальные разряды (24 для короткого формата) занимает мантисса числа, изображаемая в 16 СС. Каждые 4 бита воспринимаются машиной как одна 16-ричная цифра, а в смещенном порядке содержится информация о положении запятой между 16-ричными, а не двоичными цифрами. Мантисса чисел с ПЗ всегда изображается в ПК и должна быть нормализована.
Сравнение представления мантисс с двоичным и шестнадцатеричным основанием показывает существенное расширение диапазона представления чисел в ЕСЭВМ.
А = -356,31
А = -000101100100,0100111102
р = 6
а) 2сс мантисса
зн 8 разрядов мантисса
1 1 0 0 0 1 0 0 1 1 0 1 1 0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 1 0 0 0
б) 16сс мантисса
зн 7 разрядов мантисса
1 1 0 0 0 0 1 1 0 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 1 1 1 1 0 0 0
B
= 723,54
B = 001011010011,1000101000112
р = 9
а) 2сс мантисса
зн 8 разрядов мантисса
0 1 0 0 0 1 0 1 0 1 0 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 0 1 1 0
б) 16сс мантисса
зн 7 разрядов мантисса
0 1 0 0 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 0 1 1
II
. Сложение двоичных чисел.
Отрицательные числа в ЦВМ представлены в специальных кодах: прямом, обратном и дополнительном.
Прямой код
(ПК) представляет абсолютное значение числа с закодированным знаком: « + » – «0», « - » – «1».
Обратный код
(OK) положительного числа совпадает с его прямым кодом. Для отрицательного числа в знаковый разряд заносится «1», а в остальных разрядах цифры заменяются на взаимообратные (0 на 1, 1 на 0), т.е. формируется поразрядное дополнение числа до единицы.
Дополнительный код
(ДК) положительного числа совпадает с его прямым кодом. Для отрицательного числа в знаковый разряд заносится «1», а в цифровой части числа цифры заменяются на взаимообратные и к полученному инверсному изображению прибавляется, единица в младший разряд, т.е. код является дополнением до основания СС.
Таким образом, положительные числа во всех кодах одинаковы, а отрицательные – различны.
Задание №1
Знаки операндов:
B
>0,
A
<0. Сложить числа в форме с ФЗ в обратном коде. Проверить результат.
|
|
При алгебраическом сложении чисел в ОК со знаковым разрядом оперируют как с разрядом цифровой части числа, а при возникновении единицы переноса из знакового разряда ее прибавляют к младшему разряду числа.
А =-356,3110
= -101100100,010011112
B = 723,5410
= 1011010011,1000101000112
Апк
= 1, 01011001000100111100002
Впк
= 0, 10110100111000101000112
Аок
= 1, 10100110111011000011112
Вок
= 0, 10110100111000101000112
М = 210
Сложение:
1, 1010011011101100001111
0,
1011010011100010100011
10,
0101
1
0
11
1
10
011101
1001
0
1
0, 0101101111001110110011
0, 0101101111001110110011ок
= 101101111, 001110110011пк
101101111, 0011101100112 =
367,2310
Проверка:
(-356,31) 10
+ 723,5410
= 367,2310
Задание №2
Знаки операндов: А>0, В<0. Сложить числа в форме с ФЗ в дополнительном коде. Проверить результат.
|
|
При алгебраическом сложении чисел в ДК результат получают также в ДК, а при возникновении единицы переноса из знакового разряда ее отбрасывают.
А=356,3110
= 101100100,010011112
B =-723,5410
= -1011010011,1000101000112
Апк
= 0, 01011001000100111100002
Bпк
= 1, 10110100111000101000112
Адк
= 0, 01011001000100111100002
Вдк
= 1, 01001011000111010111012
М = 210
Сложение:
0, 0101100100010011110000
1,
0100101100011101011101
1, 1010010000110001001101
1, 1010010000110001001101дк
= 1,0101101111001110110011пк
-101101111, 001110110011=-367,2310
Проверка:
356,3110
+ (-723,54) 10
= -367,2310
Задание №3
Знаки операндов: А<0, В
<
0. Сложить числа в форме с ФЗ в модифицированном коде (МОК или МДК). При возникновении ПРС выполнить корректирующие действия. Проверить результат.
|
|
Модифицированные обратный и дополнительный коды
(МОК и МДК) имеют для изображения знака два соседних разряда: « + » – «00», « - » – «11». Эти коды используются для обнаружения ситуации ПРС - переполнения разрядной сетки. ПРС возникает при сложении чисел с ФЗ одинакового знака, когда результат операции выходит за верхнюю границу диапазона представления чисел, это приводит к потере старших разрядов.
Формальным признаком ПРС при использовании МОК и МДК является появление запрещенных комбинаций в знаковых разрядах – «01» или «10».
Для исправления результата можно либо увеличить масштаб результата, сдвинув его вправо на один разряд, а в освободившийся старший знаковый разряд поместить значение младшего знакового разряда, либо увеличить масштабы исходных операндов и выполнить арифметическую операцию снова.
А=-356,3110
= -101100100,010011112
B =-723,5410
= -1011010011,1000101000112
Апк
= 1, 0101100100010011112
Bпк
= 1, 10110100111000101000112
Амдк
= 11, 1010011011101100012
Вмдк
= 11,01001011000111010111012
М = 210
Сложение:
11,1010011011101100010000
11,0100101100011101011101
1 10
,1111001000001001101101
10
- запрещенная комбинация. Увеличиваем масштаб результата, сдвинув его вправо на один разряд, а в освободившийся старший знаковый разряд помещаем значение младшего знакового разряда:
1, 01111001000001001101101дк
= -10000110111110110010011пк
-10000110111,1101100100112
= -1079,84810
Проверка:
-356,3110
+ (-723,54)10
= -1079,8510
Задание №4
Знаки операндов: А>0, В>0. Сложить числа в форме с ПЗ. Проверить результат.
|
|
Сложение чисел в форме с ПЗ
выполняется в несколько этапов. Числа с ПЗ изображаются двумя частями: мантиссой и порядком.
Чтобы их сложить, надо выполнить различные действия над мантиссами и порядками. Поэтому в машинах предусмотрены различные устройства для обработки мантисс и порядков. Мантиссы исходных операндов нормализованы.
1. Выравнивание порядков слагаемых: меньший порядок увеличивается до большего, при этом мантисса меньшего преобразуемого числа денормализуется. В машине выполняется вычитание порядков операндов. Знак и модуль разности порядков определяет, мантиссу какого из слагаемых надо сдвигать вправо и на сколько разрядов.
2. Сложение мантисс операндов по правилам сложения чисел с ФЗ.
3. Нормализация результата, если необходимо. При этом денормализация вправо, т.е. ситуация, когда в старшем разряде двоичной мантиссы «0», требует сдвига мантиссы влево и уменьшения порядка на соответствующее количество единиц. Денормализация влево означает временное ПРС мантиссы суммы, но в отличие от чисел с ФЗ, здесь возможна коррекция: сдвиг мантиссы на один разряд вправо и увеличение на «1» порядка суммы.
При больших величинах порядков возможно возникновении истинного ПРС числа с ПЗ, хотя вероятность этого невелика.
Смещенные порядки используются в большинстве современных ЭВМ для упрощения процесса выравнивания порядков и их сравнения.
При этом для представления порядка применяется специальный дополнительный код с инверсным кодированием знака: « + » – «1», « - » – «0». В результате порядки чисел увеличиваются (в ЕС ЭВМ на 26
=64, в СМ ЭВМ на 27
=128), что приводит к смещению всех порядков по числовой оси в положительном направлении. Такие смещенные порядки называют характеристиками, и так как они все оказываются целыми положительными числами, то алгебраическое сложение можно производить без предварительного анализа знаков.
А=356,31 = 101100100,010011112
B =723,54 = 1011010011,1000101000112
А
0
|
1 0 1 1 0 0 1 0 0 0 1 0 0 1 1 1 1
|
0
|
1 0 0 1
|
В
0
|
1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 0 0 0 1 1
|
0
|
1 0 1 0
|
Сложение:
1) Выравниваем порядки, для чего выполняем их вычитание с использованием ДК
РА
=
0,1001
(
Рв
)дк
= 1,0110
1,1111
(РА
- РВ
)дк
=1,1111
(РА
- РВ
)пк
=1,0001
РА
- РВ
= -1, значит денормализуем А – сдвигаем мантиссу на один разряд вправо и увеличиваем порядок А на 1.
А
0
|
0 1 0 1 1 0 0 1 0 0 0 1 0 0 1 1 1 1
|
0
|
01 0 1 0
|
2) Складываем мантиссы
0, 0101100100010011110000
0, 1011010011100010100011
1, 0000110111110110010011
ПРС! Сдвиг мантиссы на один разряд вправо и увеличение порядка суммы на 1.
0,
10000110111110110010011
А+В
0
|
1 0 0 0 0 1 1 0 1 1 1 1 1 0 1 1 0 0 1 0 0 1 1
|
0
|
1 0 1 1
|
Проверка:
10000110111, 1101100100112
= 1079,84710
356,31+723,54 = 1079,85
III
.
Умножение двоичных чисел.
Процесс умножения чисел в двоичной системе счисления прост, так как разрядами множителя могут быть либо «0», либо «1», и, следовательно, частичным произведением в каждом такте цикла умножения будет либо «0», либо множимое. Поэтому в цикле умножения двоичных чисел три элементарных операции:
1. анализ цифры очередного разряда множителя;
2. суммирование множимого с накопленной суммой частичных произведений, если цифра множителя «1»;
3. сдвиги в каждом такте умножения.
Умножение можно выполнять как с младших, так и со старших разрядов множителя, со сдвигом, как частичной суммы, так и множимого в процессе умножения. Этим объясняется существование четырех способов умножения чисел.
Следует обратить внимание на то, что множитель сдвигается во всех способах умножения, так как в каждом такте анализируется очередной разряд: при умножении с младших разрядов сдвиг вправо (в сторону младших разрядов), при умножении со старших разрядов множитель сдвигается влево. И еще одна особенность, позволяющая легко запомнить способы умножения: сумма частичных произведений обычно сдвигается в ту же сторону, что и множитель, а множимое сдвигается навстречу множителю, т.е. в противоположную сторону.
Задание №1
Знаки операндов: С>0,
D
<0. Представить числа в форме с ФЗ и перемножить их в прямом коде, используя 1 алгоритм умножения. Произвести проверку.
|
|
I способ
- умножение с младших разрядов множителя со сдвигом суммы частичных произведений вправо.
Устройства, которые хранят операнды, регистры, имеют следующую разрядность:
1. регистры множителя и множимого – n-разрядные;
2. регистр частичных произведений – 2n-разрядный.
Суммирование множимого следует выполнять в старшие n разряды регистра суммы частичных произведений. Причем разрядность его можно уменьшить вдвое, до n разрядов, помещая при сдвиге младшие разряды суммы на место освобождающихся разрядов регистра множителя.
Особенность I способа умножения состоит в том, что имеется возможность временного переполнения разрядной сетки (ПРС) в регистре суммы частичных произведений, которое ликвидируется при очередном сдвиге вправо.
Алгоритм умножения двоичных чисел в прямом коде:
1. определить знак произведения путем сложения по модулю два знаковых разрядов сомножителей;
2. перемножить модули сомножителей одним из четырех способов;
3. присвоить полученному произведению знак из п.1. данного алгоритма.
C
= 23
10
D
= -57
10
С = 101112
D = -1110012
С пк
= 0,010111 М = 26
D пк
= 1,111001
D = 0,111001 – модуль множимого
Знак произведения:
0 + 1 = 1
Множитель
n
|
Сумма ЧП
2n
|
Примечания
|
,010111
|
0,000000 000000
|
0,111001
0,111001 000000
|
Сложение
Сдвиг
|
,001011
|
0,011100 100000
0,111001
1,010101 100000
|
Сложение
Сдвиг
|
,000101
|
0,101010 110000
0,111001
1,100011 110000
|
Сложение
Сдвиг
|
,000010
|
0,110001 111000
0,011000 111100
|
Сдвиг
Сдвиг
|
,000001
|
0,111001
1,010001 111100
|
Сложение
Сдвиг
|
,000000
|
0,101000 111110
0,010100 011111
|
Сдвиг
|
Масштаб произведения: М = 212
Ответ:
1, 010100 011111пк
= -101 000 1111 12
= 131110
Проверка:
2310
* (-57)10
= 131110
Задание № 2
Знаки операндов: С<0,
D
>0. Представить числа в форме с ФЗ и перемножить их в дополнительном коде с автоматической коррекцией, используя 2 алгоритм умножения. Произвести проверку.
|
|
II способ
- умножение с младших разрядов множителя со сдвигом множимого влево.
Устройства, которые хранят операнды, регистры, имеют следующую разрядность:
1. регистр множителя – n-разрядный;
2. регистры множимого и суммы частичных произведений – 2n-разрядный.
Первоначально множимое помещается в младшие разряды регистра, а затем в каждом такте сдвигается на один разряд влево.
Умножение чисел в дополнительном коде с автоматической коррекцией
Этот алгоритм разработан Бутом и является универсальным для умножения чисел в ДК. Сомножители участвуют в операции со знаковыми разрядами, которые рассматриваются как цифровые разряды числа. Результат получается сразу в дополнительном коде со знаком.
В процессе умножения анализируются две смежные цифры множителя: та, на которую выполняется умножение в данном такте – m1
, и соседняя младшая цифра – m2
. В двоичном множителе этой паре соответствуют четыре возможных набора – «00», «01», «10», «11», каждый из которых требует выполнения следующих действий:
1. набор «01» требует сложения
множимого с предыдущей суммой частичных произведений;
2. набор «10» требует вычитания
множимого из предыдущей суммы частичных произведений;
3. наборы «00» и «11» не требуют ни сложения, ни вычитания
, так как частичное произведение равно нулю.
В цикле умножения в каждом такте выполняются соответствующие сдвиги на один разряд. При этом могут использоваться все четыре способа умножения с некоторыми особенностями:
1. в I способе не следует выполнять последний сдвиг суммы частичных произведений;
2. в IV способе не выполняется первый сдвиг множимого.
Это объясняется тем, что в этих тактах реализуется умножение не на цифровой, а на знаковый разряд числа.
Кроме того, при выполнении алгоритма умножения с автоматической коррекцией следует помнить о правилах сдвига отрицательных чисел в ДК
: при сдвиге влево освобождающиеся младшие разряды заполняются нулями, при сдвиге вправо освобождающиеся старшие разряды заполняются единицами, т.е. реализуется арифметический сдвиг числа.
C = -2310
= -101112
D = 5710
= 1110012
C пк
= 1,010111
D пк
= 0,111001
С дк
= 1,101001 М = 26
D дк
= 0,111001 - множитель
Множитель
|
Множимое
|
Сумма ЧП
|
Примечания
|
0,1110010
0,0111001
|
1,111111 101001
1,111111 010010
|
0,000000 000000
0,000000 010111
0,000000 010111
|
Вычитание
Сдвиги
|
0,0011100
0,0001110
|
1,111110 100100
1,111101 001000
|
0,000000 010111
1,111111 010010
1,111111 101001
|
Сложение
Сдвиги
Сдвиги
|
1,111111 101001
0,000010 111000
|
Вычитание
|
0,0000111
|
1,111010 010000
|
0,000010 100001
|
Сдвиги
|
0,0000011
0,0000001
|
1,110100 100000
1,101001 000000
|
Сдвиги
Сдвиги
|
0,000000
|
1,010010 000000
|
0,000010 100001
1,101001 000000
1,101011 100001
|
Сложение
Сдвиги
|
Ответ:
С*Dдк
= -101011 1000012
С*Dпк
= -010100 0111112
Проверка:
(-23)10
*5710
=(-1311)10
Задание № 3
Оба операнда отрицательны. Представить их в форме с ФЗ в дополнительном коде и перемножить их 3 способом, используя алгоритм с простой коррекцией. Проверить результат.
|
|
III способ
- умножение со старших разрядов множителя со сдвигом суммы частичных произведений влево.
Устройства, которые хранят операнды, регистры, имеют следующую разрядность:
1. регистры множителя и множимого – n-разрядные;
2. регистр частичных произведений – 2n-разрядный.
Суммирование множимого следует выполнять в младшие n разрядов регистра суммы частичных произведений.
Особенность
III способа умножения состоит в том, что в последнем такте не следует выполнять сдвиг
в регистре сумм частичных произведений.
Алгоритм умножения двоичных чисел в ДК с простой коррекцией:
1. определить знак произведения путем сложения по модулю два знаковых разрядов сомножителей.
2. перемножить модули сомножителей, представленных в ДК, одним из четырех способов – получить псевдопроизведение.
3. если хотя бы один из сомножителей отрицателен, выполнить коррекцию по следующим правилам:
· если один сомножитель отрицателен, к псевдопроизведению прибавляется дополнительный код от модуля положительного сомножителя;
· если оба сомножителя отрицательны, к псевдопроизведению прибавляются дополнительные коды от модулей дополнительных кодов обоих сомножителей, т.е. их прямые коды.
4. Присвоить модулю произведения знак из п.1 данного алгоритма.
C = -2310
= -101112
D = -5710
= -1110012
C пк
= 1,010111
D пк
= 1,111001 М = 26
С дк
= 1,101001
D дк
= 1,000111
С дк
= 0,101001 – модуль множимого
D дк
= 0,000111 – модуль множителя
Знак произведения:
1 + 1 = 0
Множитель
n
|
Сумма ЧП
2n
|
Примечания
|
,0
00111
,0
01110
,0
11100
,1
11000
|
,000000 000000
,000000 000000
,000000 000000
,0000
0
0 101001
,000000 101001
|
Сдвиг
Сдвиг
Сдвиг
Сложение
Сдвиг
|
,1
10000
|
,000001 010010
,000000 101001
,000001 111011
|
Сложение
Сдвиг
|
,1
00000
|
,000011 110110
,000000 101001
,000100 011111
|
Сложение
|
Псевдопроизведение = 0, 000100 011111
Коррекция
(складываем модули операндов):
+0, 000100 011111
0,
010111
+0, 011011 011111
0, 111001
1, 010100 011111
Ответ:
(C*D)пк
=101000111112 =
131110
Проверка:
(-23)10*
(-57)10
= 131110
Задание №4
Знаки операндов: С>0,
D
>0. Представить числа в форме с ПЗ в разрядной сетке условной машины. При перемножении мантисс использовать 4 способ умножения. Результат представить в той же разрядной сетке.
Произвести проверку.
|
|
IV способ
- умножение со старших разрядов множителя со сдвигом множимого вправо.
Устройства, которые хранят операнды, регистры, имеют следующую разрядность:
1. регистр множителя – n-разрядный;
2. регистры множимого и частичных произведений – 2n-разрядный.
Первоначально множимое помещается в старшие разряды регистра, а затем в каждом такте сдвигается на один разряд вправо.
Особенность IV способа умножения состоит в том, что перед началом цикла умножения следует множимое сдвинуть на один разряд вправо.
Умножение чисел в форме с плавающей запятой
Когда сомножители заданы в форме с ПЗ, то их произведение определяется следующим образом:
Т.е. мантисса произведения mс
равна произведению мантисс сомножителей, а порядок рс
– сумме порядков сомножителей.
Это позволяет сформулировать алгоритм умножения чисел в форме с ПЗ:
1. определить знак произведения путем сложения по модулю два знаковых разрядов сомножителей;
2. перемножить модули мантисс сомножителей по правилам умножения дробных чисел с ФЗ;
3. определить порядок произведения алгебраическим сложением порядков сомножителей с использованием модифицированного дополнительного или обратного кодов;
4. нормализовать мантиссу результата и выполнить округление, если это необходимо.
Примечания:
1. Так как мантиссы исходных сомножителей нормализованы, то денормализация мантиссы произведения возможна только на один разряд.
2. При умножении чисел с ПЗ возможно возникновении ПРС при сложении порядков, поэтому необходимо предусматривать выявление признаков ПРС в устройствах умножения чисел с ПЗ.
C = -2310
= 101112
D = -5710
= 1110012
С
зн мантисса порядок
0 1 0 1 1 1 0 0 00101
D
зн мантисса порядок
0 1 1 1 0 0 1 0 00110
Знак произведения:
0 + 0 = 0
Множитель n
|
Множимое 2n
|
Сумма ЧП 2n
|
Примечания
|
0,1
01110
0,0
11100
|
0,011100 100000
0,001110 010000
|
0,000000 000000
0,011100 100000
0,011100 100000
|
Сложение
Сдвиги
|
0,1
11000
|
0,000111 001000
|
Сдвиги
|
0,011100 100000
0,000111 001000
0,100011 101000
|
Сложение
|
0,1
10000
|
0,000011 100100
|
Сдвиги
|
0,1
00000
|
0,000001 110010
|
0,100011 101000
0,000011 100100
0,100111 001100
|
Сложение
Сдвиги
|
0,100111 001100
0,00
0001 110010
0,101000 111110
|
Сложение
|
0,0
00000
|
0,000000 111001
|
Сдвиги
|
Порядок произведения:
00,0110
00,0101
00,1011 = 1110
Выполняем нормализацию :
0,101000 111110 (
М=212
) = 0,010100011111 (М=212
)
зн мантисса порядок
0 10100011111 1011
Ответ:
(C*D)пк
=101000111112 =
131110
Проверка:
2310*
5710
= 131110
IV
. Деление двоичных чисел
Процесс деления состоит из последовательности операций вычитания и сдвигов, при этом операция вычитания заменяется операцией сложения остатка с делителем, представленным в обратном или дополнительном кодах.
При делении чисел в прямом коде знак частного определяется сложением по модулю два знаковых разрядов делимого и делителя, и далее в процессе деления участвуют модули операндов.
Так как операция деления обратна умножению и начинается всегда со старших разрядов, то существуют два способа деления – обращенный III и IV способы умножения. Причем нередко для реализации умножения и деления целесообразно использовать одно и то же оборудование: регистр множимого - как регистр делителя, регистр множителя – как регистр частного, а регистр частных сумм – как регистр делимого, в который заносят остатки от деления.
Задание №1
Знаки операндов:
C
>0,
D
<0, C – делимое. Представить числа в форме с ФЗ в ПК, выполнить деление первым способом, применив алгоритм деления с восстановлением остатков с использованием ОК при вычитании. Проверить результат операции, оценить ошибку округления.
|
|
Алгоритм деления с восстановлением остатков:
1. Определить знак частного сложением по модулю 2 знаковых разрядов делимого и делителя. Далее использовать модули операндов.
2. Вычесть из делимого делитель, путем сложения в ОК или ДК.
3. Проанализировать знак остатка после первого вычитания:
а) если остаток положительный, то произошло ПРС, операцию следует прекратить до смены масштабов операндов;
б) если остаток отрицательный, то в частное занести «0» (этот разряд по окончании деления станет знаковым разрядом частного) и восстановить остаток, прибавив к нему делитель.
4. Выполнить сдвиги: частного на один разряд влево и остатка на один разряд влево (I способ) или делителя на один разряд вправо (II способ).
5. В цикле формирования цифр частного вычитать из остатка делитель, прибавляя его в ОК или ДК.
6. Проанализировать знак полученного остатка:
а) если > 0, то в частное заносится «1»;
б) если <0, то в частное заносится «0».
7. Восстановить отрицательный остаток, сложив его с делителем.
8. Выполнить сдвиги, как указано в п.4.
9. Завершить цикл формированием (n+1)-го остатка для округления частного.
10. Выполнить округление результата и присвоить частному знак из п.1.
C = 2310
= 101112
D = -5710
= -1110012
Спк
= 0,010111- делимое М = 26
Dпк
= 1,111001
Dок
= 1,000110 - делитель
Частное
|
Делимое (Остатки)
|
Примечания
|
0,000000
|
0,010111
1,000110
1
,011101
0,111001
10,010110
1
0,010111
|
Вычитание
Остаток, < 0
Восст. Остатка
Сдвиги
|
0,000000
|
0,101110
1,000110
1
,110100
0,111001
10,101101
1
0,101110
|
Вычитание
Остаток, < 0
Восст. Остатка
Сдвиги
|
0,000001
|
1,011100
1,000110
10,100010
1
0
,100011
1,000110
|
Вычитание
Остаток > 0
Сдвиги
|
0,000011
0,000110
0,001100
0,011001
0,011001(1)
|
1,000110
1,000110
10,001100
1
0
,001101
0,011010
0,011010
1,000110
1
,100000
0,111001
10,011001
1
0,011010
0,110100
1,000110
1
,111010
0,111001
10,110011
1
0,110100
1,101000
1,101000
1,000110
10,101111
1
0,
110000
1,100000
1,100000
1,000110
10,100110
1
0
,100111
|
Вычитание
Остаток > 0
Сдвиги
Вычитание
Остаток <0
Восст. Остатка
Сдвиги
Вычитание
Остаток < 0
Восст. Остатка
Сдвиги
Вычитание
Остаток > 0
Сдвиги
Вычитание
Остаток > 0
|
Округление:
0,011001
1
0,011010
(C/D)пк
= 0,011010
C/D = 0,0110102
= 0,4062510
Точный результат: C/D = -23/-57 = - 0,40351
Абсолютная погрешность: - 0,40625 + 0,40351 = - 0,00274
Относительная погрешность: (-0,00274)/(-0,40351) = 0,0068 , т.е. 0,7%
Задание №2
Оба операнда отрицательны, С – делимое. Выполнить операцию деления 2 способом чисел в форме с ФЗ в ПК, применив алгоритм деления без восстановления остатков с использованием ДК при вычитании. Проверить результат. Оценить погрешность округления.
|
|
Алгоритм деления без восстановления остатков:
1. Определить знак частного путем сложения по модулю два знаковых разрядов делителя и делимого. Далее использовать модули операндов.
2. Вычесть из делимого делитель путем сложения в ДК или ОК.
3. Проанализировать знак остатка после первого вычитания:
а) если положителен, то произошло ПРС, операцию следует прекратить для смены масштаба операндов;
б) если остаток отрицателен, то в частное занести «0» и продолжить операцию деления.
4. Выполнить сдвиги частного на один разряд влево и остатка на один разряд влево (I способ) или делителя на один разряд вправо (II способ).
5. Если до сдвига остаток был положителен, то вычесть из остатка делитель, если был отрицателен – прибавить к остатку делитель.
6. Если вновь полученный остаток положителен, то в очередной разряд частного занести «1», в противном случае - «0».
7. Выполнить пп.4-6 алгоритма (n+1) раз, причем последний сдвиг частного не выполнять, т.к. (n+1)-ый разряд формируется для округления.
8. Выполнить округление результата и присвоить частному знак из п.1.
C = -2310
= -10111 2
- делимое
D = -5710
= -111001 2
- делитель
Спк
= 1,010111
Dпк
= 1,111001
Сдк
= 1,101001 М = 26
Dдк
= 1,000111
1 1 = 0
Частное (Влево)
|
Делитель (Вправо)
|
Делимое (остатки)
|
Примечания
|
0,000000
0,000000
0,000001
0,000011
0,000110
0,001100
0,011001
0,011001
(1
)
|
0,111001 000000
0,011100 100000
0,001110 010000
0,000111 001000
0,000011 100100
0,000001 110010
0,000000 111001
0,000000 011100
|
0,010111 000000
1,000111 000000
|
Вычитание
Остаток < 0
Сдвиги
Сложение
Остаток < 0
Сдвиги
Сложение
Остаток > 0
Сдвиги
Вычитание
Остаток > 0
Сдвиги
Вычитание
Остаток < 0
Сдвиги
Сложение
Остаток < 0
Сдвиги
Сложение
Остаток > 0
Сдвиги
Вычитание
Остаток < 0
|
1
,011110 000000
0,011100 100000
|
1
,111010 100000
0,001110 010000
|
10,001000 110000
0
,001000 110000
1,111000 111000
|
10,000001 101000
0
,000001 101000
1,111100 011100
|
1
,111110 000100
0,000001 110010
|
1
,111111 110110
0,000000 111001
10,000000 101111
0,
000000 101111
|
1,111111 100100
10,
000000 010011
0,
000000 010011
|
Округление:
0,011001
1
0,011010
(C/D)пк
= 0,011010
C/D = 0,011010(2)
= 0,4062510
Точный результат: C/D = -23/-57 = - 0,40351
Абсолютная погрешность: - 0,40625 + 0,40351 = - 0,00274
Относительная погрешность: ( (-0,00274)/(-0,40351) )= 0,0068 , т.е. 0,7%
Задание №3
Знаки операндов:
C
<0,
D
>0, причем
D
- делимое. Представить числа в форме с ФЗ в ДК, выполнить деление 2 способом, в соответствии с алгоритмом деления в ДК (с автоматической коррекцией). Проверить результат операции, оценить погрешность округления.
|
|
Алгоритм деления в дополнительном коде (с автоматической коррекцией).
Операнды участвуют в операции деления со знаковыми разрядами. Знак частного определяется в процессе деления.
- Если знаки делимого и делителя совпадают, то в частное заносится «0», в противном случае – «1». Этот разряд знаковый.
- Если знаки операндов совпадают, то делитель вычитается из делимого, в противном случае делитель прибавляется к делимому.
- Если знак первого остатка совпадает со знаком делимого, то произошло ПРС. Операцию деления прекратить. В противном случае деление продолжить.
- Выполнить сдвиги частного и остатка на один разряд влево (I способ) или делителя на один разряд вправо (II способ).
- Все последующие остатки формируются по правилу: если знаки делителя и остатка до сдвига совпадали, то делитель вычесть из остатка, в противном случае – делитель прибавить к остатку.
- Если знаки нового остатка и делителя совпадают, то в очередной разряд частного занести «1», в противном случае – «0».
- Выполнить пп.4-6 (n+1) раз, причем последний сдвиг частного не выполнять.
- Выполнить округление результата.
C = -2310
= -101112
- делитель
D = 5710
= 1110012
- делимое
Спк
= 1,010111
Dпк
= 0,111001
Сдк
= 1,101001 М = 26
Dдк
= 0,000111
1 0 = 1
Частное (Влево)
|
Делитель (Вправо)
|
Делимое (остатки)
|
Комментарий
|
0,000001
|
1,101001 000000
|
0,111001 000000
1,101001 000000
|
Срав. Знаков
Сложение
ПРС!
|
10
,100010 000000
|
Увеличиваем порядок делимого до 7
|
0,000001
|
1,101001 000000
|
0,011100 100000
1,101001 000000
1
0,
000101 100000
|
Срав. Знаков
Сложение
ПРС!
|
Увеличиваем порядок делимого до 8
|
0,000001
0,000010
0,000101
0,001011
0,010110
0,101100
1,011000
1,011000
(0
)
|
1,101001 000000
1,110100 100000
1,111010 010000
1,111101 001000
1,111110 100100
1,111111 010010
1,111111 101001
1,111111 110100
|
0,001110 010000
1,101001 000000
|
Срав. Знаков
Сложение
Сдвиги
Вычитание
Сдвиги
Сложение
Сдвиги
Вычитание
Сдвиги
Вычитание
Сдвиги
Сложение
Сдвиги
Сложение
Сдвиги
Сложение
|
1
,110111 010000
0,001011 100000
|
10
,000010 110000
1,111010 010000
|
1
,111101 000000
0,000010 111000
|
1
,111111 111000
0,000001 011100
|
10
,000001 010100
1,111111 010010
|
10
,000000 100110
1,111111 101001
|
10
,000000 001111
1,111111 110100
|
10
,000000 000011
|
(D/C)дк
= 1,011000
(D/C)пк
= 1,101000
Порядок частного:
0,0111
1,1011
10,0010=0,0010 = 210
D/C = 10,10002
= 2,5 M = 22
Точный результат: 57/(-23) = -2,4783
Абсолютная погрешность: |- 2,5+ 2,4783| = 0,0217
Относительная погрешность: (0,0217)/(2,4783) = 0,0088 , т.е. 0,9%
Задание №4
Оба операнда положительные,
D
- делимое. Представить числа в форме с ПЗ в разрядной сетке условной машины. Разделить числа, используя при делении первый способ. Изобразить частное в разрядной сетке условной машины и проверить результат операции.
|
|
Деление чисел в форме с плавающей запятой
Когда операнды заданы в форме с ПЗ, то их частное определяется следующим образом:
Т.е. мантисса частного mС
есть частное мантисс делимого и делителя, а порядок рС
– сумма порядков операндов.
Это позволяет сформулировать алгоритм деления чисел в форме с ПЗ:
- Определить знак частного путем сложения по модулю два знаковых разрядов операндов.
- Разделить модуль мантиссы делимого на модуль мантиссы делителя по правилам деления дробных чисел с ФЗ.
- Определить порядок частного вычитанием порядка делителя из порядка делимого, используя ОК или ДК.
- Нормализовать мантиссу результата и присвоить знак из п.1.
В отличие от деления чисел с ФЗ при выполнении п.2 алгоритма, получение положительного остатка при первом вычитании не означает ПРС. При обработке чисел с ПЗ такая ситуация требует денормализации мантиссы делимого сдвигом её на 1 разряд вправо с одновременным увеличением порядка делимого на «1».
Однако ситуация ПРС при делении чисел с ПЗ возможна при вычитании порядков операндов, если они были разных знаков.
C = 2310
= 101112
- делитель
D = 5710
= 1110012
- делимое
Операнды в разрядной сетке условной машины
C = 2310
= 1011102
D = 5710
= 1110012
– делимое
Cпк
= 0,0101112
М = 26
C
|
0
|
101110
|
0
|
0101
|
D
|
0
|
111001
|
0
|
0110
|
Cдк
= 1,101001
0 0 = 0
Частное
|
Делимое (остатки)
|
Комментарии
|
0,000000
|
0,111001
1,101001
10
,100001
|
Вычитание
ПРС!
|
Увеличиваем порядок делимого до 7
|
0, 000000
|
0,011100
1,101001
10
,
000101
|
Вычитание
ПРС!
|
Увеличиваем порядок делимого до 8
|
0,000000
0,000001
0,00001
0
0,000101
0,001010
0,01
0100
0,101000
0,101000(
1
)
|
0,001110
1,101001
1
,110111
1,101110
|
Вычитание
Остаток < 0
Сдвиги
Сложение
Остаток > 0
Сдвиги
Вычитание
Остаток < 0
Сдвиги
Сложение
Остаток > 0
Сдвиги
Вычитание
Остаток < 0
Сдвиги
Сложение
Остаток < 0
Сдвиги
Сложение
Остаток < 0
Сдвиги
Сложение
Остаток >0
|
0,010111
10,000101
1
0,
000110
0,001100
|
0,001100
1,101001
1
,110101
1,101010
|
1,101010
0,010111
10,000001
1
0
,000010
0,000100
|
0,000100
1,101001
1
,101101
1,011010
|
1,011010
0,010111
1
,110001
1,100010
|
1,100010
0
,010111
1
,111001
1,110010
|
1,110010
0,010111
10,001001
1
0
,
001010
|
Порядок частного
0,0111
1,1011
10,0010=0,0010 = 210
Округление мантиссы:
0,101000
1
0,101001
D/C = 10,10012
= 2,5625
Точный результат: 57/(-23) = -2,4783
Абсолютная погрешность: |- 2,5625+ 2,4783| = 0,0842
Относительная погрешность: (0,0842)/(2,4783) = 0,034 , т.е. 3,4%
V
. Сложение двоично-десятичных чисел
Задание №1
Знаки операндов: A<0, B<0. Сложить числа в коде с естественными весами 8-4-2-1 и проверить результат.
|
|
\\\
Код с естественными весами 8-4-2-1
.
10СС
|
ПК
|
ОК
|
0
|
0000
|
1001
|
1
|
0001
|
1000
|
2
|
0010
|
0111
|
3
|
0011
|
0110
|
4
|
0100
|
0101
|
5
|
0101
|
0100
|
6
|
0110
|
0011
|
7
|
0111
|
0010
|
8
|
1000
|
0001
|
9
|
1001
|
0000
|
Каждая десятичная цифра в этом коде образуется естественным замещением ее двоичным эквивалентом.
Алгоритм сложения в коде 8-4-2-1.
1. Проверить знаки слагаемых. Отрицательные слагаемые преобразовать в обратный код для чего инвертировать тетрады и прибавить потетрадно код 1010. Единица переноса между тетрадами отбрасывается.
2. Сложить двоично-десятичные числа по правилам двоичной арифметики.
3. Выполнить коррекцию результата, прибавив код 0110 к неправильным тетрадам (1010, 1011,1100, 1101, 1110, 1111), а также к тетрадам, в которых сформировались единицы переноса при сложении. Здесь единица переноса из тетрады в тетраду учитывается.
4. Проверить знак результата. Если он отрицателен, то преобразовать его в ПК для чего инвертировать все тетрады и прибавить потетрадно код 1010. Единица переноса отбрасывается.
А=-356,31
B=-723,54
А=-0,035631
B=-0,072354
М=104
A8-2-4 =
1,0000 0011 0101 0110 0011 0001
B8-2-4
= 1,0000 0111 0010 0011 0101 0100
Обратный код:
A:
|
1,
|
1111
|
1100
|
1010
|
1001
|
1100
|
1110
|
- инверсия
|
1010
|
1010
|
1010
|
1010
|
1010
|
1010
|
- коррекция
|
AОК
=
|
1,
|
1001
|
0110
|
0100
|
0011
|
0110
|
1000
|
Результат в ОК
|
B:
|
1,
|
1111
|
1000
|
1101
|
1100
|
1010
|
1011
|
- инверсия
|
1010
|
1010
|
1010
|
1010
|
1010
|
1010
|
- коррекция
|
BОК
=
|
1,
|
1001
|
0010
|
0111
|
0110
|
0100
|
0101
|
Результат в ОК
|
Сложение чисел:
AОК
=
|
1,
|
1001
|
0110
|
0100
|
0011
|
0110
|
1000
|
BОК
=
|
1,
|
1001
|
0010
|
0111
|
0110
|
0100
|
0101
|
1,
|
0010
|
1000
|
1011
|
1001
|
1010
|
1101
|
1
|
1,
|
0010
|
1000
|
1011
|
1001
|
1010
|
1110
|
Коррекция:
1,
|
0010
|
1000
|
1011
|
1001
|
1010
|
1110
|
0110
|
0110
|
0110
|
0110
|
0110
|
(A+B)ОК
=
|
1,
|
1000
|
1001
|
0010
|
0000
|
0001
|
0100
|
Перевод числа в ПК:
(A+B)П
К
=
|
1,
|
0111
|
0110
|
1101
|
1111
|
1110
|
1011
|
- инверсия
|
1010
|
1010
|
1010
|
1010
|
1010
|
1010
|
- коррекция
|
1,
|
0001
|
0000
|
0111
|
1001
|
1000
|
0101
|
Результат в ПК
|
(A+B)пк
= 1, 0001 0000 0111 1001 1000 01018-2-4
С учетом масштаба: (A+B) = -1079,8510
Проверка: A+B =-356,3110
- 723,5410
=-1079,8510
Задание №2
Знаки операндов: А>0, В<0. Сложить числа в коде с избытком три и проверить результат.
|
|
Код с избытком 3
10СС
|
ПК
|
ОК
|
0
|
0011
|
1100
|
1
|
0100
|
1011
|
2
|
0101
|
1010
|
3
|
0110
|
1001
|
4
|
0111
|
1000
|
5
|
1000
|
0111
|
6
|
1001
|
0110
|
7
|
1010
|
0101
|
8
|
1011
|
0100
|
9
|
1100
|
0011
|
ПК получается прибавлением избытка 3 к коду 8-4-2-1.
Алгоритм сложения в коде с избытком 3
1. Проверить знаки слагаемых. Отрицательные преобразовать в ОК путем инвертирования тетрад.
2. Сложить двоично-десятичные числа по правилам двоичной арифметики.
3. Выполнить коррекцию результата, прибавив код 1101 к тетрадам суммы, из которых не сформировалась единица переноса и прибавив код 0011 к тетрадам суммы из которых сформировалась единица переноса. Единицу переноса между тетрадами при коррекции отбрасывать.
4. Проверить знак результата. Отрицательный преобразовать в ПК, инвертируя тетрады.
А = 356,31
В = - 723,54
А/
= 0,35631 М=103
В/
= - 0,72354
А2-10
= 0,0110.1000.1001.0110.0100
В2-10
= 1,1010.0101.0110.1000.0111
Вок
= 1,0101.1010.1001.0111.1000
Сложение:
0, 0,0110.1000.1001.0110.0100
|
1, 1,0101.1010.1001.0111.1000
|
1,1100.0011.0010.1101.1100
|
1101 0011 0011 1101 1101
|
коррекция
|
1,1001.0110.0101.1010.1001
|
инвертируем тетрады т.к. результат отрицательный
|
1,0110.1001.1010.0101.0110
|
(А+В)8-4-2-1+3
= 1, 0110.1001.1010.0101.0110
Результат с учетом масштаба М=103
(А+В)= - 367,2310
Проверка:
356,3110
+(-723,54)10
= - 367,2310
Задание №3
Знаки операндов: А<0, В>0. Сложить числа в коде 2-4-2-1 и проверить результат.
|
|
Код 2-4-2-1
10СС
|
ПК
|
ОК
|
0
|
0000
|
1111
|
1
|
0001
|
1110
|
2
|
0010
|
1101
|
3
|
0011
|
1100
|
4
|
0100
|
1011
|
5
|
1011
|
0100
|
6
|
1100
|
0011
|
7
|
1101
|
0010
|
8
|
1110
|
0001
|
9
|
1111
|
0000
|
Алгоритм сложения в коде 2-4-2-1.
1. Проверить знаки слагаемых. Отрицательные преобразовать в ОК, инвертируя тетрады.
2. Сложить двоично-десятичные числа по правилам двоичной арифметики.
3. Выполнить коррекцию суммы:
если каждая из исходных тетрад меньше 5, то
- коррекция не нужна ,если суммарная тетрада также <5
- если суммарная тетрада ³ 5, то необходима коррекция кодом +6 (0110).
- если одна из исходных тетрад <5, а другая – ³5, то коррекции не требуется.
- если каждая из исходных тетрад ³5, то
- коррекция не нужна, если тетрада суммы ³5
- если тетрада суммы <5, то нужна коррекция кодом –6 (1010)
ИЛИ!
1. Корректируется тетрада суммы прибавлением кода 0110, если содержится 0 в 4-м разряде тетрад обоих слагаемых и комбинации 10 или 01 в 4-м и 3-м разрядах тетрады суммы и есть единица либо во 2-м, либо в 1-м разрядах тетрады суммы.
2. Корректируется тетрада суммы прибавлением кода 1010, если содержится 1 в 4-м разряде обоих слагаемых и комбинация 01 или 10 в 4-м и 3-м разрядах тетрады суммы и есть 0 либо во 2-м, либо в 1-м разрядах тетрады суммы.
!
Единица переноса между тетрадами не учитывается.
Проверить знак результата. Если результат отрицателен, преобразовать его в ПК, инвертировав все тетрады.
А = - 356,31
В = 723,54
А/
= - 0,35631 М=103
В/
= 0,72354
А2-4-2-1
= 1,0011.1011.1100.0011.0001
Аок
= 1,1100.0100.0011.1100.1110
В2-4-2-1
= 0,1101.0010.0011.1011.0100
Сложение:
1, 1100.0100.0011.1100.1110
0, 1101.0010.0011.1011.0100
|
10,1001.0110.0111.1000.0010
1
|
0,1001.0110.0111.1000.0011
1010.0110.0110.1010
|
коррекция
|
0,0011.1100.1101.0010.0011
|
(А+В)2-4-2-1
= 0, 0011.1100.1101.0010.00112-4-2-1
Результат с учетом масштаба М=103
(А+В)=367,2310
Проверка:
-356,3110
+723,5410
=367,2310
Задание №4
Знаки операндов: А<0, В<0. Сложить числа в коде (3а+2) и проверить результат.
|
|
А = - 356,31
В = - 723,54
А/
= - 0,035631 М=104
В/
= - 0,072354
А3а+2
= 1,00010.01011.10001.10100.01011.00101
Аок
= 1,11101.10100.01110.01011.10100.11010
В3а+2
= 1,00010.10111.01000.01011.10001.01110
Вок
= 1,11101.01000.10111.10100.01110.10001
Сложение:
1, 11101.10100.01110.01011.10100.11010
1, 11101.01000.10111.10100.01110.10001
|
11,11010.11101.00110.00000.00011.01011
1
|
1,11010.11101.00110.00000.00011.01100
|
00010.00010.00010 00010
|
коррекция
|
0,11010.11101.01000.00010.00101 01110
|
инвертируем т.к. результат отрицательный
|
1,00101.00010.10111.11101.11010.10001
|
(А+В)3а+2
= 1, 00101.00010.10111.11101.11010.10001
Результат с учетом масштаба М=104
(А+В)= - 1079,8510
Проверка:
-356,3110
+(-723,54) 10
= - 1079,8510
VI
. Умножение двоично-десятичных чисел.
Задание №1
Выполнить умножение старо-русским методом удвоения – деления пополам. Результат проверить
. В качестве операндов взять целую часть чисел А и В, представив их в кодах с естественными весами.
|
|
Алгоритм умножения заключается в удвоении на каждом шаге множимого, что равносильно сдвигу его на один разряд влево, и делению пополам множителя, что равносильно сдвигу его на один разряд вправо. Шаги повторяются, пока множитель не станет равным нулю.
При сдвиге двоично-десятичных чисел (код 8-4-2-1) на один разряд как влево так и вправо необходима коррекция. При сдвиге влево коррекция производится точно так же, как и при сложении, то есть при появлении неправильных тетрад или единицы переноса из тетрады осуществляется прибавление к данной тетраде корректирующего кода 0110. При сдвиге вправо корректирующий код образуется как разница между математическим результатом деления двоичной тетрады пополам (16/2=8) и фактическим (10/2=5), 8-5=310=0011. Эту разницу нужно вынести из тетрады, в которой образовалась единица переноса. Таким образом, корректирующий код будет 310=-00112=1101ДК.
А = 35610
В = 72310
А = 0011.0101.01108-2-4-1
- множитель
В= 0111.0010.00118-2-4-1
- множимое
Множитель
|
Множимое
|
Произведение
|
0011.0101.0110
0001.1010.1011
11
01 1101
0001.0111.1000
0000.1011.1100
.
1101
.1101
0000.1000.1001
0000.0100.0100
0000.0010.0010
0000.0001.0001
0000.0000.1000
1101
0000.0000.0101
0000.0000.0010
0000.0000.0001
|
0000.0000.0000.0111.0010.0011
0000.0000.0000.1110.0100.0110
0110
0000.0000.0001.0100.0100.0110
0000.0000.0010.1000.1000.1100
0
110
0000.0000.0010.1000.1001.0010
0000.0000.0101.0001.0010.0100
0110
011
0
0000.0000.0101.0111.1000.0100
0000.0000.1010.1111.0000.1000
0110 0110 0110
0000.0001.0001.0101.0110.1000
0000.0010.0010.1010.1101.0000
0110 0110 0110
0000.0010.0011.0001.0011.0110
0000.0100.0110.0010.0110.1100
0
11
0
0000.0100.0110.0010.0111.0010
0000.1000.1100.0100.1110.0100
0110 0110.
0000.1001.0010.0101.0100.0100
0001.0010.0100.1010.1000.1000
0110
0110.
0001.1000.0101.0000.1000.1000
|
0000.0000.0000.0000.0000.0000
0000.0000.0000.0000.0000.0000
0000.0000.0010.1000.1001.0010
0000.0000.0010.1000.1001.0010
0000.0000.0010.1000.1001.0010
0000.0010.0011.0001.0011.0110
0000.0010.0101.1001.1100.1000
0110
0000.0010.0101.1010.0010.1000
0000.0010.0101.1010.0010.1000
0000.0
100
.
0110
.0
010
.0
111.0
0
1
0
0000.0110.1011.1100.1001.1010
0110
0110
0110
0000.0111.0010.0010.1010.0000
0000.0111.0010.0010.1010.0000
0001.1000.0101.
0000.
1000.1000
0001.1111.0111.0011.0010.1000
0110 0110
0010.0101.0111.0011.1000.1000
2 5 7 3 8 8
|
Сдвиг
Корр
Сдвиг
Корр
Слож
Сдвиг
Корр
Сдвиг
Корр
Сдвиг
Корр
Слож
Корр
Сдвиг
Корр
Слож
Корр
Сдвиг
Корр
СдвигКорр
Слож
Корр
|
А*B = 0010.0101.0111.0011.1000.10008-2-4-1
= 257.38810
Проверка:
35610
*72310
= 257 38810
Задание №2
Выполнить умножение двоично-кодированных десятичных чисел методом десятично-двоичного разложения множителя. Результат проверить.
|
|
Метод основан на преобразовании множителя в виде суммы произведений десятичных чисел на степень двойки. Множитель представляется в коде 8-4-2-1. Особенностью преобразованного множителя является то, что десятичное число состоит только из символов 0 и 1, а слагаемых в нём не более четырёх. Каждое из четырёх частичных произведений получают последовательно сдвигом множимого на требуемое количество десятичных разрядов (тетрад) с подсуммированием и коррекцией. Умножение же на степень двойки равносильно сдвигу влево на 1 разряд с введением коррекции.
А2-10
= 0011.0101.01108-2-4-1
-множимое
В2-10
= 0111.0010.00118-2-4-1
- множитель
Преобразование множителя:
B2-10
= 0111. 0010.00118-2-4-1
= (0*23
+ 1*22
+ 1*21
+ 1*20
)*102
+ (0*23
+ 0*22
+ 1*21
+ 0*20
)*101
+ (0*23
+ 0*22
+ 1*21
+ 1*20
)*100
= (000)*23
+(100)*22
+(111)*21
+(101)*20
A2-10
=0011.0101.01108-2-4-1
Множитель (преобраз.)
|
Множимое
|
Произведение
|
100*22
|
*100
|
0000.0011.0101.0110.0000.0000
|
*21
|
0000.0110.1010.1100.0000.0000
|
Корр.
|
0110.0110
|
0000.0111.0001.0010.0000.0000
|
*22
|
0000.1110.0010.0100.0000.0000
|
корр
|
0
1
10
|
0
0
01
.010
0
.
0
010.0100.00
0
0.0000
|
0
0
01
.010
0
.
0
010.0100.00
0
0.0000
|
*1
*10
|
0000.0000.0000.0011.0101.0110
0011.0101.0110.0000
|
0000.0000.0011.1000.1011.0110
|
Корр
|
011
0
|
|
111*21
|
11=
|
0000.0000.0011.1001.0001.0110
|
+100
|
0000.
00
11
.
0101
.
0110.0000.0000
|
Корр
|
0000.0011.1000.1111.0001.0110
0110
|
111=
|
0000.0011.1001.0101.0001.0110
|
*21
|
0000.0111.0010.1010.0010.1100
|
корр
|
0110 0110 0110
|
0000.0111.1
00
1
.
0
0
00.0011.0010
|
0000.0111.1
00
1
.
0
0
00.0011.0010
|
101
|
*100
*1
|
0000.0011.0101.0110.0000.0000
0000.0000.
0000
.
00
11
.
0101
.
0110
0000.0011.0101.1001.0101.0110
|
0000.0011.0101.1001.0101.0110
|
Сложение
коррекция
|
0001.0100.0010.0100.0000.00000000.0111.1
00
1
.
0
0
00.0011.0010
0001.1011.1011.0100.0011.0010
0110
0110
|
|
|
сложение
|
0010.0010.0001.0100.0011.0010
0000.0011.0101.1001.0101.0110
0010.0101.0110.1101.1000.1000
|
коррекция
|
0110
|
0010.0101.0111.0011.1000.1000
2
5
7
3
8
8
|
A*B=0010.0101.0111.0011.1000.10008-2-4-1
= 257 38810
Проверка: A*B =35610
*72310
= 257 38810
Список используемой литературы
1.Фадеева Т.Р., Долженкова М.Л. Организация арифметических операций над двоичными числами. – Киров: Изд-во ВятГУ, 2001. – 40 с.
2. Конспекты лекций по дисциплине «Информатика».
|