- •Глава 1. Принципы построения современных эвм.
- •Формы представления чисел
- •Арифметические операции над двоичными числами с фиксированной запятой
- •Арифметические операции над числами с плавающей запятой
- •Находим характеристику частного путем сложения с дополнением .
- •, При переходе к прямому коду, получим Теперь находим частное деления мантисс, используя схему деления без восстановления остатка. Коды мантиссы делителя
- •Таким образом, окончательный результат равен . Так же, как и впредудущих случаях проверим результат:
- •Логические основы построения эвм Элементы алгебры логики
- •Основные законы алгебры логики и формы логических функций
- •Синтез логических схем
- •Принципы построения современных эвм
- •Системы команд и методы адресации, применяемые в эвм
- •Постоянная память
- •Логическая организация оперативной памяти
- •Кэширование оперативной памяти
Арифметические операции над числами с плавающей запятой
Для выполнения действий над числами, представленными в форме с плавающей запятой, в АУ (арифметических устройствах) необходимы дополнительные схемы, оперирующие с порядками. Операции над порядками производятся как с целью определения порядка результата, так и для подготовки мантисс, например, к сложению и вычитанию. При сложении порядки и мантиссы, представляющие числа в форме с плавающей запятой, в ЗУ обычно хранятся в прямом коде. При выборке слагаемых из ЗУ их мантиссы и порядки разделяются и поступают в соответствующие схемы АУ. В схеме, оперирующей порядками, они сравниваются.
Наиболее просто это осуществляется,
если вместо истинных порядков используются
характеристики. Если порядки слагаемых
неодинаковы, то осуществляете выравнивание
порядков путем сдвига вправо мантиссы
числа с меньшим порядком и соответствующим
увеличением последнего.Сумма двух
нормализованных чисел
и
,
представленных в экспоненциальной
форме, может быть записана в виде
.
Так как мантиссы представляются меньшими
единицы, то чтобы не получить мантиссы,
большей единицы, порядки следует
выравнивать в сторону большего порядка.
Пусть
.
Тогда для выравнивания порядков
порядок
следует увеличить на величину разности
.
Тогда
и
то есть
и
Если выполняются операции с автоматической
нормализацией, то по окончании сложения
сумма
нормализуется. Таким образом, сложение
чисел с разными порядками состоит
из трех этапов:
Выравнивание порядков слагаемых;
Сложение мантисс;
Нормализация результата.
Мантиссы слагаемых с выравненными порядками складываются аналогично сложению чисел с фиксированной запятой. Для представления отрицательных мантисс используются дополнительный или обратный код. При алгебраическом сложении мантисс возможны случаи получения результата, меньшего 0.1... (двоичное число). Такие случаи называются нарушением нормализации вправо. Признаком такого нарушения нормализации чисел, представленных в любом коде (прямом, дополнительном или обратном) является наличие одинаковых цифр 0*.0 или 1*.1 в двух разрядах слева и справа от запятой. При сложении мантисс по абсолютной величине меньших единицы, возможны случаи переполнения разрядной сетки сумматора мантисс, называемые нарушением нормализации влево. Если применяются модифицированные коды, то признаком нарушения нормализации влево служит появление разных цифр 01* или в 10* в знаковых разрядах. Результат нормализуется путем сдвига мантиссы в нужную сторону и коррекции порядка суммы.
При нарушении нормализации вправо мантисса в процессе нормализации сдвигается влево до тех пор, пока в разрядах слева и справа от запятой не появятся разные цифры, например, 0*.1 или 1*.0. По окончании сдвига мантиссы порядок суммы уменьшается на число единиц, соответствующее числу разрядов, на которое была сдвинута мантисса.
При нарушении нормализации влево мантисса суммы в процессе нормализации сдвигается на один разряд вправо, а порядок увеличивается на единицу. После сдвига мантиссы вправо она округляется для случаев умножения и деления..
Результат сложения может превысить максимально возможное число, которое может быть представлено в компьютере. Это обнаруживается как возникновение порядка, превышающего после нормализации результата максимально допустимый (например, при сдвиге мантиссы вправо и при прибавлении единицы к порядку). В таких случаях в АУ вырабатывается сигнал, вызывающий прерывание исполняемой программы. По команде ВЫЧЕСТЬ вычитание чисел с разными порядками, как и сложение, производится в три этапа:
1. Выравнивание порядков;
2. Вычитание мантисс;
3. Нормализация результата.
При вычитании мантисс в АУ искусственно меняется знак вычитаемого на обратный. Это позволяет операцию вычитания формально свести к операции сложения.
Рассмотрим следующий пример: пусть
требуется вычесть из числа
число
.
Тогда характеристики
,
.
Запишем коды мантиссы и характеристики
слагаемого
—
(так как
).
Для вычитаемого
—
(используем модифицированные коды).
Далее выравниваются характеристики
слагаемых, то есть из характеристики
вычитается характеристика
.
Вычитание заменяется сложением с
дополнением
.
|
1 |
1* |
0 |
1 |
0 |
0 |
+ |
0 |
0* |
1 |
1 |
0 |
1 |
|
0 |
0* |
0 |
0 |
0 |
1. |
Так как
больше
на единицу, то производится сдвиг вправо
на один разряд мантиссу
.
Складываем мантиссы.
|
0 |
0* |
.0 |
1 |
1 |
0 |
+ |
1 |
1* |
.0 |
0 |
1 |
1 |
|
1 |
1* |
.1 |
0 |
0 |
1. |
Переноса из
знакового разряда не происходит, то
есть результат получен в дополнительном
коде (отрицательный). Перевод в прямой
код дает следующий результат:
.
Прервод в десятичную
систему даст следующий результат
.Убедимся,
что это действительно так.
Теперь рассмотрим реализацию сложения этих же чисел. Предварительно запишем прямой код мантиссы второго числа
В данном примере
имеет место нарушение нормализации
вправо.
.
Сложение мантисс дает следующий
результат
|
0 |
0* |
.0 |
1 |
1 |
0 |
+ |
0 |
0* |
.1 |
1 |
0 |
1 |
|
0 |
1* |
.0 |
0 |
1 |
1. |
Налицо нарушение
нормализации влево. Нормализуем
полученный результат
.
Сдвигаем мантиссу на один разряд вправо
и к значению порядка (характеристики)
суммы добавим единицу. Нормализованный
результат
.
В десятичной системе
.
Легко убедиться, что результат
соответствует действительности.
Следует заметить, что можно было из характеристики вычесть храктеристику . В этом случае результат получился бы в дополнительном коде и после перевода его в прямой , пришлось бы увеличить характеристику на полученную разницу.
При вычислении произведения двух чисел
из общего выражения для произведения
двух чисел
и
,
представленного в виде
следует,
что порядок произведения
и мантисса произведения
Перемножение мантисс чисел,
представленных в форме с плавающей
запятой, выполняется аналогично умножению
чисел, представленных в форме с
фиксированной запятой. Порядок
произведения определяется путем
суммирования порядков сомножителей.
Если вместо истинных порядков
применяются характеристики
и
,
где
—количество
двоичных разрядов, которое может иметь
число, выражающее максимально возможный
порядок, то характеристика произведения
определяется как
.
В общем случае процесс умножения состоит
из следующих этапов:
1. Определение знака произведения путем сложения по mod 2 знаковых разрядов мантисс сомножителей;
2. Определение порядка произведения;
3. Перемножение мантисс;
4. Нормализация результата.
Если перемножаются двоичные нормализованные
числа, то мантисса произведения
может иметь любое значение в пределах
и, следовательно, может иметь место
только нарушение нормализации вправо
не более чем на один разряд. Случаи
переполнения сумматора порядков
фиксируются выработкой специального
сигнала переполнения. В качестве примера
рассмотрим умножение чисел
и
.
Выпишем характеристики и мантиссы
сомножителей
,
,
,
,
,
.
Вычислим характеристику произведения
|
0* |
1 |
0 |
1 |
0 |
1 |
+ |
1* |
1 |
0 |
0 |
0 |
0 |
|
0* |
0 |
0 |
1 |
0 |
1 |
и
|
0* |
0 |
0 |
1 |
0 |
1 |
+ |
0* |
1 |
0 |
1 |
0 |
0 |
|
0* |
1 |
1 |
0 |
0 |
1. |
Находим произведение мантисс:
|
|
|
Разряды произведения |
Множитель |
Содержимое сумматора перед началом |
|
0*.00000 |
|
|
|
+ |
0*.10001 |
|
1 |
Первая сумма частных произведений 1 |
= |
0*.10001 |
|
|
Сдвиг 1 на один разряд вправо |
|
0*.01000 |
1 |
|
Сдвиг 1 на один разряд вправо |
|
0*.00100 |
01 |
0 |
|
+ |
0*.10001 |
|
|
Вторая сумма частных произведений 2 |
= |
0*.10101 |
|
1 |
Сдвиг 2 на один разряд вправо |
|
0*.01010 |
101 |
|
Сдвиг 2 на один разряд вправо |
|
0*.00101 |
0101 |
0 |
|
+ |
0*.10001 |
|
1 |
Третья сумма частных произведений 3 |
= |
0*10110 |
|
|
Сдвиг 3 на один разряд вправо |
|
0*.01011 |
00101 |
|
Знак произведения 0 1=1 |
|
|
|
|
Окончательный результат |
|
1*.01011 |
00101 |
|
В данном случае
имеет место нарушение нормализации
вправо, следовательно необходимоуменьшить
на единицу характеристику:
.
Истинный порядок равен
|
0* |
1 |
1 |
0 |
0 |
0 |
+ |
1* |
1 |
0 |
0 |
0 |
0 |
|
0* |
0 |
1 |
0 |
0 |
0. |
Результат операции
.
Как и в предыдущих случаях проведем
проверку. В десятичной системе:
.
С другой стороны,
,
и произведение
.
При делении чисел, представленных в экспоненциальной форме, мантисса частного определяется путем делении мантиссы делимого на мантиссу делителя, а порядок частного—вычитанием порядка делителя из порядка делимого. Деление мантисс выполняется точно так же, как и деление чисел с фиксированной запятой, выраженных в виде правильных дробей. В общем случае процесс деления в машинах с плавающей запятой состоит из следующих этапов:
1. Определение знака частного;
2. Определение порядка частного;
3. Деление мантисс;
4. Нормализация результата.
При делении двоичных нормализованных
чисел мантисса частного
оказывается
заключенной в пределах
.
Врезультате может иметь место нарушение
нормализации влево не более, чем на
один разряд. В качестве примера рассмотрим
деление числа
на число
.
,
