- •Глава 1. Принципы построения современных эвм.
- •Формы представления чисел
- •Арифметические операции над двоичными числами с фиксированной запятой
- •Арифметические операции над числами с плавающей запятой
- •Находим характеристику частного путем сложения с дополнением .
- •, При переходе к прямому коду, получим Теперь находим частное деления мантисс, используя схему деления без восстановления остатка. Коды мантиссы делителя
- •Таким образом, окончательный результат равен . Так же, как и впредудущих случаях проверим результат:
- •Логические основы построения эвм Элементы алгебры логики
- •Основные законы алгебры логики и формы логических функций
- •Синтез логических схем
- •Принципы построения современных эвм
- •Системы команд и методы адресации, применяемые в эвм
- •Постоянная память
- •Логическая организация оперативной памяти
- •Кэширование оперативной памяти
Формы представления чисел
Для выполнения арифметических действий
над числами компьютер должен "уметь"
оперировать положительными и отрицательными
числами различных порядков. Числа
представляются фиксированными или
переменными в определенных пределах
количествами разрядов. Для представления
чисел различных порядков применяются
две формы изображения: экспоненциальная
с плавающей запятой (точкой) и естественная
с фиксированным положением запятой
(точкой). Экспоненциальная форма
преставления с плавающей запятой
основывается на изображении чисел в
виде
,
соответствующим записи
,
где
—
основание системы,
—
целое число, называемое порядком числа
—мантисса
числа
,
причем обычно
При такой записи положение запятой в
мантиссе
определяется величиной порядка
.
С изменением порядка в большую или
меньшую сторону запятая соответственно
перемещается влево или вправо, то есть
"плавает" в изображении числа. В
разрядной сетке ЭВМ число, соответствующее
подобному представлению, записывается
в виде пары чисел
и
.
Данное представление носит название
представления чисел с плавающей
запятой (точкой). Если в записи числа
модуль мантиссы находится в пределах
,
то число называется нормализованным,
в противном случае—ненормализованным.
Например, двоичное число 0.110100 10100—
нормализованное, а 0.001101 10110
—ненормализованное. Во втором случае
,
и имеет место нарушение нормализации
вправо1.
Если же в процессе вычислений значение
мантиссы
,
то имеет место нарушение нормализации
влево. Этот случай может возникнуть
при сложении нормализованных чисел
одинакового порядка, в результате чего
слева от запятой появляется 1.
Нормализованное представление чисел
позволяет сохранять в разрядной сетке
большее количество значащих цифр и,
следовательно, повышает точность
вычислений, а также упрощает действия
над порядками и мантиссами. Однако
может возникнуть необходимость в
выполнении действий и над ненормализованными
числами. Поэтому в системах команд
современных ЭВМ предусматривается
выполнение действий, как с автоматической
нормализацией результатов операций,
так и без нормализации. Нормализация
заключается в сдвиге мантиссы влево
или вправо таким образом, чтобы она
удовлетворяла приведенному выше
неравенству. Одновременно со сдвигом
соответственно уменьшается или
увеличивается порядок.
При сравнительно небольших количествах
разрядов, отводимых на мантиссы и
порядки, экспоненциальная форма
обеспечивает весьма широкий диапазон
представления чисел, поэтому вычисления
с плавающей запятой очень удобны для
научных и инженерных задач, при решении
которых часто приходится иметь дело с
величинами, изменяющимися в больших
пределах. Пусть для представления
значащих разрядов мантиссы
и порядка
в машине отводится соответственно
и
двоичных разрядов. Тогда диапазон
представления нормализованных двоичных
чисел, взятых по абсолютному значению,
будет удовлетворять неравенству
,
и
—соответственно
наименьшее и наибольшее абсолютные
значения нормализованных мантисс.
Практически всегда
и
с высокой точностью
.
Например, если,
,
то
Данный диапазон представления для
двоичных чисел соответствует
представлению десятичных чисел в
пределах
.
При естественной форме представления производятся операции над числами, только меньшими или большими единицы, то есть запятая всегда фиксируется соответственно либо слева от старшего значащего разряда всех чисел, по абсолютной величине меньших единицы, либо справа от младших цифр целых чисел.
В обоих случаях имеет место представление,
называемое "с фиксированной запятой".
Если запятая зафиксирована слева, то
арифметические действия выполняются
над двоичными числами, выраженными в
виде правильных дробей и независимо от
их величины обычно представленными
одинаковым количеством разрядов,
разрядную сетку машины. В результате
действий могут получаться двоичные
числа, по абсолютной величине большие
0.1…1, или меньшие 0.0...01 (соответственно
в десятичной системе 0.999... и 0.000... 01).
Появление чисел, по абсолютной величине
больших единицы или равных единице,
называется переполнением разрядной
сетки. Без специальных мер коррекции
такие результаты не могут использоваться
для дальнейших вычислений, поскольку
теряются старшие значащие разряды
чисел. Числа, по абсолютной величине
меньшие единицы младшего разряда
разрядной сетки, называются машинным
нулем. Диапазон представления правильных
l- разрядных двоичных дробей
значительно меньше, чем у чисел с
плавающей точкой, имеющих такую же
l-разрядную мантиссу. Во многих
задачах величины, которыми приходится
оперировать при вычислениях, либо
являются целыми числами, либо их удобно
в расчетах представлять целыми. К таким
задачам, например, относятся статистические
и различные экономические задачи.
Адреса ячеек также являются целыми
числами, над которыми могут производиться
арифметические операции. Поэтому в
современных универсальных машинах
часто предусматривается возможность
выполнения действий над целыми числами.
Такие действия могут выполняться как
над двоичными числами, так и непосредственно
над десятичными, представленными в
двоично-десятичном коде. Целые числа
при этом выравниваются по младшим
разрядам (десятичные по младшим тетрадам),
то есть, запятая подразумевается
фиксированной справа. Диапазон
представления целых двоичных чисел в
-
разрядной сетке заключен в пределах
.
Например, при
в десятичной системе выполняется
неравенство
.
Непосредственное применение в
компьютерах десятичной арифметики
особенно выгодно, когда производятся
сравнительно несложные вычисления над
большими массивами исходных данных.
В этих случаях может быть существенным
выигрыш во времени, затрачиваемом
на вычисления, из-за отсутствия переводов
чисел из десятичной системы счисления
в двоичную и обратно.
Особенность применения целочисленной арифметики состоит в том, что приходится иметь дело с числами различной длины. При фиксировании запятой справа положение старшего (левого) разряда зависит от величины числа. Следовательно, при выполнении операций над целыми числами ограничивать разрядность чисел слева, вообще говоря, нельзя. Поэтому для таких действий либо разрядная сетка машины выбирается с запасом таким образом, чтобы обеспечивалась возможность размещения в ней любых чисел заданного диапазона, либо количество разрядов, отводимых на представление чисел, может быть переменным. Второй способ предпочтительнее, так как возможность гибкой вариации разрядностью позволяет, например, более экономно расходовать емкость запоминающих устройств.
Для кодирования знаков двоичных чисел
используются дополнительно вводимые
разряды, называемые знаковыми, в которых
знак "плюс" изображается цифрой
0, а знак "минус" — цифрой 1. Как при
естественной, так и при экспоненциальной
форме представления чисел код знака
обычно располагается перед кодом числа
слева. Если пронумеровать двоичные
позиции сетки машины слева направо,
начиная с нуля, до
,
то знаковому разряду будет соответствовать
нулевая позиция. При естественной форме
представления чисел, по величине меньших
единицы, сразу за знаковым разрядом
(вправо от запятой) следуют старшие
разряды мантиссы. Например, двоичные
числа +0.101 и -0.111 при закодированных
знаках будут иметь вид:
и
2
При экспоненциальной форме представления
чисел помимо разряда для изображения
знака мантиссы необходим разряд для
изображения знака порядка. Для удобства
выполнения операций над порядками
они обычно кодируются следующим образом
[2]: если для размещения кодов порядков
в разрядной сетке отводится
разряд, то отрицательные и положительные
порядки представляются увеличенными
на
,
т.е.
Тогда порядки в диапазоне
,
оказываются записанными в виде
Если
,
то все порядки в диапазоне -1000000 +0111111
(-64+63) в смещенном
виде будут кодироваться положительными
числами 0000000 до 1111111. Коды отрицательных
порядков будут иметь цифру 1 в старшем
разряде 7-разрядного двоичного кода,
положительных — цифру 0; нулевому порядку
будет соответствовать код 1000000. Во
избежание путаницы смещенный порядок
называют характеристикой числа. С
подобным представлением вещественных
чисел оперируют процессоры семейства
x86 фирмы Intel
и их аналоги. Так как все характеристики
представляются положительными
числами, их сравнение выполняется
просто: из характеристики первого
слагаемого, например, всегда вычитается
характеристика второго слагаемого. С
учетом вышеизложенного число, например,
-32756 в форме с плавающей запятой в виде
32-раз-рядного двоичного кода может быть
представлено, как показано рисунке.
Мантисса изображена нормализованной
в шестнадцатеричной системе счисления,
характеристика
.
Весь код в шестнадцатеричной системе
счисления можно записать как С5 7FF400.
Рассмотренное
выше представление двоичных чисел со
знаками называется прямым кодом. В этом
коде значащая часть в виде абсолютного
значения двоичного числа и код знака
помещается в соответствующие позиции
разрядной сетки. Например, двоичная
дробь
в прямом коде имеет вид
Целое двоичное
в прямом коде изображается как
Отрицательные числа
и
будут записаны как
и
соответственно.
Прямой код обычно используется для представления положительных двоичных чисел при выполнении операций в арифметических устройствах, для хранения положительных и отрицательных чисел в запоминающих устройствах, а также в устройствах ввода и вывода. Для представления отрицательных чисел при выполнении операций в арифметических устройствах прямой код обычно не применяется. Это объясняется тем, что для упрощения конструкций арифметических устройств в цифровых вычислительных машинах арифметические операции, как правило, сводятся к сложению (операция вычитания) или к сериям сложений и сдвигов (операции умножения и деления). Для этой цели отрицательные двоичные числа в арифметических устройствах представляются в так называемом дополнительном или обратном коде. Поясним это на примере вычитания двух десятичных чисел.
Пусть требуется из 84 вычесть 29. Вычислим
дополнение 29 до 100, то есть до
(мы
оперируем с двухразрядными числами и
основание системы счисления равно 10).
Получим 100-29=71. Далее вычислим сумму
85+71= 155. Перенос в старший разряд
игнорируем (числа двухразрядные) и
результат получаем в прямом коде — 55.
Теперь найдем разность 29 и 84. Дополнение
84 до 100 равно 100-84=16. Вычислим сумму
29+16=45. Отсутствие переноса сигнализирует
о том, что вычитаемое больше уменьшаемого,
и результат получается в дополнительном
коде (дополнении до ста, то есть
отрицательный). Тогда 100-45=55, и окончательный
результат равен –55. Приведенный
пример показывает, как операцию вычитания
двух чисел можно свести к сложению.
При реализации вычитания двоичнных чисел на ЭВМ, вычитаемое обычно представляют в дополнительном или обратном кодах.
Правило образования дополнительного кода отрицательного двоичного числа состоит в следующем: в знаковом разряде записывается единица, во всех цифровых разрядах единицы заменяютс нулями, а нули-единицами, а к младшему разряду прибавляется единица. Полученная сумма и будет являться дополнительным кодом числа. Для образования обратного кода отрицательного двоичного числа необходимо в знаковом разряде поставить единицу, а в цифровых разрядах единицы заменить нулями, а нули-единицами.
