- •Глава 1. Принципы построения современных эвм.
- •Формы представления чисел
- •Арифметические операции над двоичными числами с фиксированной запятой
- •Арифметические операции над числами с плавающей запятой
- •Находим характеристику частного путем сложения с дополнением .
- •, При переходе к прямому коду, получим Теперь находим частное деления мантисс, используя схему деления без восстановления остатка. Коды мантиссы делителя
- •Таким образом, окончательный результат равен . Так же, как и впредудущих случаях проверим результат:
- •Логические основы построения эвм Элементы алгебры логики
- •Основные законы алгебры логики и формы логических функций
- •Синтез логических схем
- •Принципы построения современных эвм
- •Системы команд и методы адресации, применяемые в эвм
- •Постоянная память
- •Логическая организация оперативной памяти
- •Кэширование оперативной памяти
Находим характеристику частного путем сложения с дополнением .
|
0* |
1 |
0 |
1 |
0 |
0 |
+ |
1* |
0 |
1 |
0 |
0 |
1 |
|
1* |
1 |
1 |
1 |
0 |
1. |
Характеристика частного получена в дополнительном коде и
, При переходе к прямому коду, получим Теперь находим частное деления мантисс, используя схему деления без восстановления остатка. Коды мантиссы делителя
|
|
|
Разряды частного |
Делимое |
|
0*.10101 |
|
Делитель Bдоп. |
+ |
1*.00111 |
|
Остаток R1<0 |
= |
1*.11100 |
0. |
Сдвиг R1 |
← |
1*.11000 |
|
Делитель Bпр. |
+ |
0*.11001 |
|
Остаток R2>0 |
= |
|
1 |
Сдвиг R2 |
← |
1*.00010 |
|
Делитель Bдоп. |
+ |
1*.00111 |
|
Остаток R3>0 |
= |
|
1 |
Сдвиг R3 |
← |
0*.10010 |
|
Делитель Bдоп. |
+ |
1*.00111 |
|
Остаток R4<0 |
= |
1*.10001 |
0 |
Сдвиг R4 |
← |
1*.00010 |
|
Делитель Bпр |
+ |
0*.11001 |
|
Остаток R5<0 |
= |
1*.11011 |
0 |
Сдвиг R5 |
← |
1*.10110 |
|
Делитель Bпр. |
+ |
0*.11001 |
|
Остаток R6>0 |
= |
|
1 |
Сдвиг R6 |
← |
0*.11110 |
|
Делитель Bдоп. |
+ |
1*.00111 |
|
Остаток R7>0, доп. разряд |
= |
|
1 |
Знак частного 0 0=0 |
|
|
|
Окончательный результат |
|
0*.110011 |
|
Таким образом, окончательный результат равен . Так же, как и впредудущих случаях проверим результат:
.
С другой стороны:
,
,
Арифметические операции над десятичными числами
При организации выполнения арифметических
операций десятичные числа обычно
представляются как целые, то есть с
запятой, фиксированной справа. Для кода
знака десятичного числа может отводиться
один или несколько разрядов. В первом
случае это может быть крайняя левая
позиция (нулевая) в разрядной сетке. В
остальных позициях правее располагаются
двоично-десятичные тетрады, самая правая
из которых соответствует младшему
разряду целого десятичного числа. В
компьютерах с десятичной арифметикой
может применяться кодирование знаков
4-разрядными двоичными кодами). При
таком кодировании знаков тетрады
двоично-десятичного числа, начиная с
младшей, размещаются влево от знака. В
запоминающих устройствах двоичные
тетрады обычно хранятся в естественном
прямом коде. Для операций сложения и
вычитания они выравниваются по правой
границе, определяемой запятой.
Арифметические операции начинаются
с анализа знаков. Если знаки одинаковые,
то по команде СЛОЖИТЬ числа
складываются в прямом коде. Если знаки
разные, то отрицательное, число
представляется в виде дополнения до
,
где
— количество десятичных разрядов в
наиболее длинном из участвующих в
операции операнде. В результате вычитание
заменяется сложением положительного
числа с дополнением отрицательного.
При выполнении команды ВЫЧЕСТЬ знак
второго операнда предварительно
изменяется на обратный, после чего
действия над десятичными операндами в
АЛУ производятся так же, как и при
сложении. В процессе выполнения
арифметических действий над
двоично-десятичными числами они
преобразуются в какой-либо другой код,
обеспечивающий возможность применения
достаточно несложных устройств для
выполнения операций. Если при сложении
десятичных цифр получается результат
больший десяти, то необходимо единицу
переноса передать в следующий десятичный
разряд. Наиболее просто это можно
сделать, представив либо цифры обоих
слагаемых в так называемом коде с
избытком три, либо цифры одного из
слагаемых в коде с избытком шесть.
Если при сложении нет переносов из
каких-либо тетрад, то они корректируются
путем вычитания из них 6 (прибавления
1010 , то есть дополнения 6 до 16). Если
возник перенос из старшей тетрады,
то корректируется младшая и наоборот.
При переносе из обеих тетрад корректировка
не производится. Кроме того, наличие
переноса из старшей тетрады при сложении
числа
и дополнения числа
свидетельствует о том, что результат
получился в прямом коде, а его отсутствие
— в дополнительном. Таким образом, при
сложении чисел с разными знаками
указанным выше образом, знак результата
определяется по наличию или отсутствию
переноса из старшей тетрады. Если перенос
есть, то результат положительный в
прямом коде. Если нет переноса, то
получается отрицательный результат
в виде дополнения. Когда при сложении
чисел с одинаковыми знаками возникает
перенос из старшей тетрады, то это
свидетельствует о десятичном переполнении.
Ниже рассмотрим примеры выполнения
операций сложения и вычитания
двоично-десятичных чисел. Найдем суцмму
чисел 87 и 12. Представим их в
двочно-десятичном коде:
.
Представим первое число в коде с избытком
6:
|
1 |
0 |
0 |
0 |
|
0 |
1 |
1 |
1 |
+ |
0 |
1 |
1 |
0 |
|
0 |
1 |
1 |
0 |
|
1 |
1 |
1 |
0 |
|
1 |
1 |
0 |
1. |
Теперь найдем сумму
|
1 |
1 |
1 |
0 |
|
1 |
1 |
0 |
1 |
+ |
0 |
0 |
0 |
1 |
|
0 |
0 |
1 |
0 |
|
1 |
1 |
1 |
1 |
|
1 |
1 |
1 |
1. |
Переноса из какой-либо тетрад нет, следовательно нужно скорректировать обе тетрады
|
1 |
1 |
1 |
1 |
|
1 |
1 |
1 |
1 |
+ |
1 |
0 |
1 |
0 |
|
1 |
0 |
1 |
0 |
|
1 |
0 |
0 |
1 |
|
1 |
0 |
0 |
1. |
Окончательный результат
.
Рассмотрим разность
.
Дополнение
до
100 равно 88 (1000 1000). Представим его в коде
с избытком 6:
|
1 |
0 |
0 |
0 |
|
1 |
0 |
0 |
0 |
+ |
0 |
1 |
1 |
0 |
|
0 |
1 |
1 |
0 |
|
1 |
1 |
1 |
0 |
|
1 |
1 |
1 |
0. |
Сложим полученную сумму с первым слагаемым
|
1 |
1 |
1 |
0 |
|
1 |
1 |
1 |
0 |
+ |
1 |
0 |
0 |
0 |
|
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1. |
В
этом случае корректировка тетрад не
требуется и полученный результат равен
.
Следует заметить, что при реализации
операции вычитания, рассмотренной выше
дополнительный код
.
Такое дополнение и получается с из
представления дополнения
до 100 потетрадным избытком 6. В связи с
этим может сложиться впечатление, что
представление чисел в коде с избытком
излишне. Однако это не так. Дело в том,
что реализация алгоритмов сложения и
вычитания должна иметь минимальные
отличия, а это и достигается путем
подобной кодировки двоично-десятичных
чисел.
Рассмотрим
обратную разность, то есть
.
Дополнение
до 100 равно 13 (0001 0011). Вычислим его код с
избытком 6:
|
0 |
0 |
0 |
1 |
|
0 |
0 |
1 |
1 |
+ |
0 |
1 |
1 |
0 |
|
0 |
1 |
1 |
0 |
|
0 |
1 |
1 |
1 |
|
1 |
0 |
0 |
1. |
Просуммируем результат с числом :
|
0 |
1 |
1 |
1 |
|
1 |
0 |
0 |
1 |
+ |
0 |
0 |
0 |
1 |
|
0 |
0 |
1 |
0 |
|
1 |
0 |
0 |
0 |
|
1 |
0 |
1 |
1. |
Так как переносы отсутствуют, корректируем обе тетрады
|
1 |
0 |
0 |
0 |
|
1 |
0 |
1 |
1 |
+ |
1 |
0 |
1 |
0 |
|
1 |
0 |
1 |
0 |
|
0 |
0 |
1 |
0 |
|
0 |
1 |
0 |
1. |
Так как результат получен в дополнительном коде (отрицательный) переводим его в прямой код: 1101 1010+1=1101 1011. Проведем последнюю корректировку (корректируем обе тетрады ввиду отсутствия переносов):
|
1 |
1 |
0 |
1 |
|
1 |
0 |
1 |
1 |
+ |
1 |
0 |
1 |
0 |
|
1 |
0 |
1 |
0 |
|
0 |
1 |
1 |
1 |
|
0 |
1 |
0 |
1. |
Окончательный
результат равен
.
Теперь рассмотрим пример реализации сложения с использованием кода с избытком 3. Найдем сумму чисел 29 и 19. В двоично-десятичной системе запись чисел имеет вид: 0010 1001 и 0001 1001. Запишем оба числа в коде с избытком 3:
|
0 |
0 |
1 |
0 |
|
1 |
0 |
0 |
1 |
+ |
0 |
0 |
1 |
1 |
|
0 |
0 |
1 |
1 |
|
0 |
1 |
0 |
1 |
|
1 |
1 |
0 |
0 |
и
|
0 |
0 |
0 |
1 |
|
1 |
0 |
0 |
1 |
+ |
0 |
0 |
1 |
1 |
|
0 |
0 |
1 |
1 |
|
0 |
1 |
0 |
0 |
|
1 |
1 |
0 |
0. |
Сложим полученные результаты
|
0 |
1 |
0 |
1 |
|
1 |
1 |
0 |
0 |
+ |
0 |
1 |
0 |
0 |
|
1 |
1 |
0 |
0 |
|
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0. |
Скорректируем старшую тетраду
|
1 |
0 |
1 |
0 |
|
1 |
0 |
0 |
0 |
+ |
1 |
0 |
1 |
0 |
|
0 |
0 |
0 |
0 |
|
0 |
1 |
0 |
0 |
|
1 |
0 |
0 |
0. |
Полученный результат равен 48. Теперь найдем разность этих же чисел. Дополнение 29 до 100 равно 71, или в двоично-десятичной системе — 0111 0001. В коде с избытком 3 получим
|
0 |
1 |
1 |
1 |
|
0 |
0 |
0 |
1 |
+ |
0 |
0 |
1 |
1 |
|
0 |
0 |
1 |
1 |
|
1 |
0 |
1 |
0 |
|
0 |
1 |
0 |
0. |
Сложим полученный результат со вторым числом
|
1 |
0 |
1 |
0 |
|
0 |
1 |
0 |
0 |
+ |
0 |
1 |
0 |
0 |
|
1 |
1 |
0 |
0 |
|
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0. |
Перенос есть из младшей тетрады, поэтому корректируем старшую.
|
1 |
1 |
1 |
1 |
|
0 |
0 |
0 |
0 |
+ |
1 |
0 |
1 |
0 |
|
0 |
0 |
0 |
0 |
|
1 |
0 |
0 |
1 |
|
0 |
0 |
0 |
0. |
Результат отрицательный, получен в дополнительном коде. Переведем его в прямой код: 0110 1111+1=0111 0000. Скорректируем старшую тетраду, так как имел место перенос из младшей:
|
0 |
1 |
1 |
1 |
|
0 |
0 |
0 |
0 |
+ |
1 |
0 |
1 |
0 |
|
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
1 |
|
0 |
0 |
0 |
0. |
Окончательный результат равен –10. Из рассмотренных примеров видно, что использование кода с избытком 3 отличается лишь дополнительной операции сложения.
В заключение рассмотрим умножение и деление десятичных чисел. Существуют различные способы выполнения этих операций. Процессы последовательного сложения аналогичны тем, которые используются при вычислениях вручную. Суть процесса последовательного сложения заключается в том, что множимое, определенным образом сдвинутое, прибавляется столько раз, сколько единиц содержится в очередной цифре множителя, на которую производится умножение.
После каждого прибавления множимого цифра множителя, на которую производится умножение, уменьшается на единицу. В качестве примера рассмотрим вычисление произведения 19 на 35:
Множитель |
|
|
|
|
|
3 |
5 |
Содержимое сумматора |
|
0 |
0 |
0 |
0 |
|
|
|
+ |
|
1 |
9 |
|
|
5-1=4 |
|
= |
0 |
1 |
9 |
0 |
|
|
|
+ |
|
1 |
9 |
|
|
4-1=3 |
|
= |
0 |
3 |
8 |
0 |
|
|
|
+ |
|
1 |
9 |
|
|
3-1=2 |
|
= |
0 |
5 |
7 |
0 |
|
|
|
+ |
|
1 |
9 |
0 |
|
2-1=1 |
|
= |
0 |
7 |
6 |
0 |
|
|
|
+ |
|
1 |
9 |
|
|
1-1=0 |
|
= |
0 |
9 |
5 |
0 |
|
|
Сдвиг вправо |
|
0 |
0 |
9 |
5 |
|
|
|
+ |
|
1 |
9 |
|
3-1=2 |
|
|
= |
0 |
2 |
8 |
5 |
|
|
|
+ |
|
1 |
9 |
|
2-1=1 |
|
|
= |
0 |
4 |
7 |
5 |
|
|
|
+ |
|
1 |
9 |
|
1-1=0 |
|
Произведение |
= |
0 |
6 |
6 |
5 |
|
|
Количество десятичных разрядов произведения не превышает суммарного количества цифр сомножителей. Знак произведения формируется логическим способом так же, как и при действиях с двоичными числами. Заметим, что данная схема не является единственной, существуют и другие схемы, ускоряющие процесс умножения.
Десятичное деление, как и для двоичных чисел, в машинах реализуется в виде многошагового процесса. Одним из простейших способов определения цифр частного является последовательное вычитание делителя из делимого. После каждого вычитания, если остаток неотрицательный, в соответствующий разряд частного добавляется единица. Предположим, что требуется разделить 63 на 9:
|
|
|
|
|
|
Частное |
Делимое |
|
0 |
6 |
3 |
|
|
|
- |
|
9 |
|
|
|
Остаток R1<0 |
- |
-9 |
7 |
|
|
0 |
Восстановление R1 |
+ |
|
9 |
|
|
|
|
|
0 |
6 |
3 |
|
|
Сдвиг делителя |
|
|
|
9 |
|
|
|
- |
|
|
|
|
|
Остаток R2>0 |
|
0 |
5 |
4 |
|
1 |
|
- |
|
|
9 |
|
|
Остаток R3>0 |
|
0 |
4 |
5 |
|
2 |
|
- |
|
|
9 |
|
|
Остаток R4>0 |
|
0 |
3 |
6 |
|
3 |
|
- |
|
|
9 |
|
|
Остаток R5>0 |
|
0 |
2 |
7 |
|
4 |
|
- |
|
|
9 |
|
|
Остаток R6>0 |
|
0 |
1 |
8 |
|
5 |
|
- |
|
|
9 |
|
|
Остаток R7>0 |
|
|
0 |
9 |
|
6 |
|
- |
|
|
9 |
|
7 |
Частное |
|
0 |
0 |
0 |
|
7 |
Можно также производить деление, не восстанавливая остаток. Для этого достаточно сдвинуть делитель на разряд вправо и продолжать деление, теперь прибавляя делитель к отрицательному остатку с приписанным справа следующим разрядом делимого. После первого прибавления в очередном разряде частного устанавливается цифра 9. На каждом этапе сложения содержимое этого разряда уменьшается на единицу. При новом появлении положительного остатка в разряде зафиксируется искомая цифра разряда частного. Далее осуществляется переход к определению следующей цифры частного. Рассмотрим данную схему на примере деления 84 на 12.
|
|
|
|
|
|
|
|
Частное |
Делимое |
|
0 |
0 |
8 |
4 |
|
|
|
|
- |
|
1 |
2 |
|
|
|
|
Остаток R1<0 |
|
-9 |
-8 |
6 |
4 |
|
0 |
0 |
Сдвиг делителя |
|
|
|
|
|
|
|
|
|
+ |
|
|
1 |
2 |
|
|
|
|
|
-9 |
-8 |
7 |
6 |
|
0 |
9 |
|
+ |
|
|
1 |
2 |
|
|
|
|
|
|
-9 |
8 |
8 |
|
0 |
8 |
|
+ |
|
|
1 |
2 |
|
|
|
Частное |
|
|
0 |
0 |
0 |
|
0 |
7 |
Если делимое не делится нацело, то для целей округления может определяться дополнительная цифра частного.
