Жмакин А.П. Архитектура ЭВМ (2006), страница 8
Описание файла
Документ из архива "Жмакин А.П. Архитектура ЭВМ (2006)", который расположен в категории "". Всё это находится в предмете "техника и элементная база средств цифровой обработки сигналов (тэбс цос)" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .
Онлайн просмотр документа "Жмакин А.П. Архитектура ЭВМ (2006)"
Текст 8 страницы из документа "Жмакин А.П. Архитектура ЭВМ (2006)"
Точное расположение максимума экономичности может быть установлено путем следующих рассуждений. Пусть имеется п знаков для записи чисел, а основание системы числения равно р . Тогда количество разрядов числа k=n/ р, а общее количество чисел N, которые могут быть составлены, равно:
Если считать N(p) непрерывной функцией, то можно найти такое значение , при котором N принимает максимальное значение. Для нахождения положения максимума нужно найти производную функции N(p), приравнять к нулю и решить полученное уравнение относительно р.
Приравнивая полученное выражение к нулю, получаем In р = 1, или pm = е, где е = 2,71828... — основание натурального логарифма. Ближайшее к е целое число, очевидно, 3 — по этой причине троичная система счисления оказывается самой экономичной для представления чисел, однако следующей по экономичности оказывается двоичная система счисления.
Таким образом, простота технических решений — не единственный аргумент в пользу применения двоичной системы в компьютерах.
3. 3. Представление информации в ЭВМ. Прямой код
В современной ЭВМ используются, в основном, два способа представления двоичных чисел — с фиксированной и с плавающей запятой, причем в формате фиксированной запятой (ФЗ) используется как беззнаковое представление чисел ("целое без знака"), так и представление чисел со знаком. В последнем случае знак также кодируется двоичной цифрой — обычно плюсу соответствует 0, а минусу — 1. Под код знака обычно отводится старший разряд а0 двоичного вектора а0 а{ а2... ап, называемый знаковым.
Запятая может быть фиксирована после любого разряда двоичного числа, однако чаще всего используются два формата ФЗ: целые числа, когда запятая фиксируется после младшего разряда ап, а диапазон представления лежит в пределах
и дробные числа — запятая фиксирована после а0 , а диапазон
Далее, если не сделано специальных оговорок, будем рассматривать дробные двоичные числа со знаком, запятая в которых фиксирована после знакового разряда а0 :
Очевидно, если двоичное число А = 0 ,al a2 ...
> О, то оно будет представлено в форме (3.14) как 0,
a2
...
а если А = 0,аха2аъ...ап <0, то как \,аха2аъ ...ап. Приведенное кодирование дробных двоичных чисел со знаком принято называть прямым кодом числа (обозначается как [A]d). Итак
3.4. Алгебраическое сложение/вычитание в прямом коде
Сформулируем правила выполнения операций сложения и вычитания чисел со знаками (такие операции принято называть алгебраическими). Во-первых, алгебраическое вычитание всегда можно свести к алгебраическому сложению, изменив знак второго операнда. Далее следует сравнить знаки слагаемых. При одинаковых знаках складывают модули слагаемых и результату присваивают знак любого слагаемого (они одинаковые). Если знаки слагаемых разные, то из большего модуля слагаемого вычитают меньший модуль и присваивают результату знак слагаемого, имеющего больший модуль.
Bведем обозначения:
Где:
□ , b0 — знаковые разряды слагаемых;
□ с0 — код знака результата;
□ , bj,
— двоичные переменные;
□ f — тип выполняемой операции: f = 0 — сложение, f = 1 — вычитание;
□ OV — признак переполнения,
и выразим сформулированный выше алгоритм алгебраического сложения/вычитания в форме граф-схемы алгоритма (ГСА), приведенной на
рис. 3.3.
Отдельно следует рассмотреть проблему обнаружения факта переполнения разрядной сетки данных с фиксированной запятой. Это может произойти, если
Очевидно, при сложении чисел с разными знаками переполнение невозможно. Если знаки слагаемых одинаковы, признаком переполнения может служить перенос, возникающий при сложении старших разрядов модулей . При отсутствии этого переноса сложение двух любых одинаковых знаковых разрядов даст в результате с0 = 0, а при появлении переноса из первого разряда с0 = 1 . Таким образом, после сложения чисел с одинаковыми знаками значение знакового разряда суммы можно рассматривать как признак переполнения OV.
Характерно, что полученное в знаковом разряде с0 значение не является знаком результата (алгебраической суммы). Истинное значение знака образуется не в процессе арифметической операции над знаковыми разрядами, а формируется искусственно.
Рассмотрим случай сложения чисел с разными знаками. Он сводится к вычитанию модулей слагаемых, причем уменьшаемым должен стать больший модуль. Чтобы избежать дополнительной модульной операции сравнения, можно произвести "наугад" вычитание А-В . Признаком того, что |А| >|B| будет отсутствие заема из нулевого в первый разряд. Поскольку рассматривается случай разных знаков слагаемых, то при отсутствии заема значение знакового разряда разности определится как 0-1 = 1-0 = 1, а при наличии заема 0-1-1 = 1-0-1 = 0. Таким образом, если при вычитании а-в получим с0=1, это будет означать, что |A|>|B|, и результату следует присвоить знак числа а (с0 :=а0). Если окажется с0 =0, то |A|<|B|, и следует осуществить вычитание в-а, присвоив результату знак числа в (с0 :=ь0).
Рис. 3.3. Граф алгоритма алгебраического сложения-вычитания
3.5. Обратный код и выполнение алгебраического сложения в нем
При выполнении алгебраического сложения в прямом коде приходится, во-первых, не только складывать, но и вычитать двоичные коды; во-вторых, код знака результата формируется искусственно, т. е. знаковые разряды обрабатываются по правилам, отличным от правил обработки разрядов числа. Для устранения отмеченных недостатков в ЭВМ широко используются специальные представления двоичных чисел — т. н. обратный и дополнительный коды.
Представление обратного кода определяется следующим соотношением:
Из (3.17) следует, что обратный код положительного числа равен самому числу! Для получения обратного кода отрицательного числа достаточно присвоить знаковому разряду значение 1 и проинвертировать все остальные разряды числа:
Действительно, из (3.17) следует, что при а = -0,аха2а3 ...ап обратный код числа
Для перехода из обратного кода в прямой осуществляется следующее преобразование:
3.5.1. Алгебраическое сложение в обратном коде
Очевидно, что при отсутствии переполнения возможны четыре случая сочетания знаков и модулей слагаемых [11].
□ Случай 1.
а>0, в>0, а + в<1.
Этот случай соответствует обычному сложению прямых кодов чисел:
[а>о] + [в>0]=а+в .
□ Случай 2.
А>0, В<0, А + В>0.
[А >0], + [В < 0] = А + 2 + В - ". Назовем этот результат предварительным. Истинное значение результата в рассматриваемом случае (сумма положительна) будет А+В. Следовательно, предварительный результат нуждается в коррекции путем вычитания 2 и добавления
.
□ Случай 3.
А>0, В<0, А + В<0.
[А > О] + [в < О] = А + 2 + В - . Этот результат соответствует правильному, поскольку рассматривается случай отрицательной суммы.
□ Случай 4.
А<0, В<0, |А + В|<1.
[А<0]+[в <0]= 2 + А- . Здесь предварительный результат нуждается в коррекции путем вычитания 2 и добавления 2~", как и в случае 2, поскольку истинное значение отрицательной суммы, представленной в обратном коде, А + В + 2-
.
Заметим, что в случаях 2 и 4 требуется одинаковая коррекция: - 2 + причем только в этих двух случаях возникает перенос из знакового разряда. Действительно, в случае 4 оба знаковых разряда равны 1, а в случае 2 знак результата — 0, что при разных знаках слагаемых может получиться только при появлении переноса из первого разряда в нулевой (знаковый), а следовательно, обязательно будет перенос и из знакового разряда. Вес знакового разряда соответствует 2°, а вес переноса из него— 21. Таким образом, игнорируя перенос из знакового разряда, мы вычитаем из результата 2, что соответствует первому члену корректирующего выражения. Для учета второго члена следует
добавить 1 к младшему разряду суммы, вес которого составляет
В случаях 1 и 3 переноса из знакового разряда не возникает и коррекция результата не требуется.
Таким образом, для выполнения алгебраического сложения двоичных чисел, представленных в обратном коде, достаточно, не анализируя соотношение знаков и модулей, произвести сложение чисел, включая знаковые разряды, по правилам двоичной арифметики, причем возникающий в знаковом разряде перенос должен быть добавлен к младшему разряду результата, осуществляя тем самым коррекцию предварительной суммы. Полученный код является алгебраической суммой слагаемых, представленной в обратном коде.