Информационные основы вычислительной техники

Способы представления чисел в ЭВМ. Сложение чисел в обратном и дополнительном кодах

Разбить на страницы
Показывать лекцию целиком

Кодирование чисел в ЭВМ

Прямой код

Возможны два варианта изображения знаков чисел двоичными цифрами:

"+" обозначать "0", а "-" обозначать "1";

"+" обозначать "1", а "-" обозначать "0".

Оба варианта равноценны.

На практике в основном используется первый вариант.

При таком решении все положительные числа с фиксированной запятой имеют вид: 0, x-1x-2... x-n, а отрицательные: 1, x-1x-2... x-n (естественно, что запятая, между знаковым разрядом и самим числом внутри ЭВМ не кодируется). Код знака помещается слева от запятой на место разряда с весом 2°. Поэтому, если знак и цифровую часть числа рассматривать как единое целое, то изображение положительных чисел не изменяется и определяется интервалом 0 ≤ Х < 1, а все отрицательные числа изображаются положительными числами [Х], расположенными в интервале 1 ≤ [Х] <2 (так называемое, представление числа в прямом коде).

Рассмотренную связь между числом Х и его изображением в прямом коде - [Х]пк можно представить в следующем виде:

$$ Х_{ПК} = ЗнХ. \left | Х \right | $$

Пример 7.1.

0.1012пк = +(1/2 +1/8) = +5/8

1.1012пк = -5/8

Число с фиксированной точкой в прямом коде имеет такое же представление, как и указанное в (7.1). Однако, здесь следует помнить, что двоичное число с фиксированной точкой имеет формат согласно (6.2). В этом случае числу 0.1012пк соответствует десятичное число +510, а числу 1.1012пк - -510.

Очевидно, что если рассматривать числа с фиксированной точкой или запятой в прямом коде вместе со знаком, то такая операция даже простейшем случае алгебраического сложения не может быть выполнена. Так для чисел с фиксированной точкой

01012пк = +510

10102пк = -210

При сложении этих чисел получим

что, конечно, является неправильным результатом.

Методика выполнения алгебраического сложения, рациональная для применения в ЭВМ, должна удовлетворять следующим условиям:

  • обработка знаковых и цифровых разрядов суммируемых чисел X и Y должна производиться по одинаковым правилам с получением при этом правильного знака суммы;
  • должна исключаться операция прямого вычитания, и вместо неё алгебраическое суммирование чисел разных знаков должно выполняться как сложение специальных кодов суммируемых чисел;
  • должно определяться переполнение, соответствующее $$\left | X + Y \right | \geq 1$$ при условии, что абсолютное значение X и Y меньше единицы (здесь речь идет, естественно, о числах с фиксированной запятой).
  • Всем указанным условиям удовлетворяет методика алгебраического сложения дополнительных и обратных кодов исходных чисел.

    Обратный код

    В этом коде связь между числом Х и его изображением в обратном коде - [Х]ок определяется равенством (7.2):

    $$\left[X\right]_{ОК}=\begin{cases} X, \text{если }X\geq0;\\ 2+X-2^{-n}, \text{если }X\leq0 \end{cases}$$

    При Х ≥ 0:

    [Х]ок = 2 + Х - 2-n = 2 - |X| - 2-n = 2 - 2-n + X.

    Запишем это выражение в несколько другом виде.

    Таким образом, для отрицательного числа получение обратного кода заключается в присвоении знаковому разряду кода 1 и замене в цифровой части числа 0 на 1, а 1 на 0 (выполняется $$\left[1,\overline{x}_1...\overline{x}_n\right]_{ДК}+2^{-n}$$).

    При преобразовании от обратного кода к прямому от обратного кода числа берется обратный код.

    Методика алгебраического суммирования в обратном коде при представлении исходных чисел и суммы в прямом коде

    При суммировании чисел в обратном коде могут встретиться четыре возможные комбинации.

  • Х > 0 и Y > 0, а X + Y < 1. В данном случае обращение к обратному коду не приводит к специфике выполнения операции, так как [Х > 0]ок + [Y > 0]ок = X + Y.
  • Х > 0, Y < 0 и X + Y > 0.

    [Х]ок + [Y]ок = X + 2 + Y - 2-n - предварительный результат.

    Т.к. X + Y > 0, то действительный результат равен X + Y. Для того чтобы от предварительного результата перейти к действительному, необходима коррекция: вычесть 2 и прибавить 2-n к предварительному результату, т.е. в предварительном результате исключается 1 в разряде с весом 21, что равноценно вычитанию 2, и эту же единицу направляем в младший разряд предварительного результата, что равноценно прибавлению 2-n.

  • Х > 0, Y < 0 и X + Y < 0.

    [Х]ок + [Y]ок = X + (2 + Y - 2-n). Этот результат соответствует правильному, так как согласно условию X + Y < 0. Следовательно, [X + Y < 0]ок = 2 + (X + Y) - 2-n.

  • Х < 0, Y < 0 и |Х + Y| < 1.

    [X]ок + [Y]ок = (2 + X - 2-n ) + (2 + Y - 2-n ) - предварительный результат.

    Правильный результат [(X + Y) < 0]ок = 2 + Х + Y - 2-n.

  • Это определяет необходимость выполнения коррекции предварительного результата, которая аналогична рассмотренной в случае 2, т.е. вычесть 2 и прибавить 2-n к предварительному результату.

    При суммировании в обратном коде чисел разных знаков возможно получение X + Y = 0. Здесь методика суммирования обратных кодов исходных чисел не изменяется, а результат получается в виде 1,1 . . .1. Например,

    Получили обратный код отрицательного нуля [- 0,0 . . . 0 ]ок = 1,1 ... 1. Такой результат согласуется с формулой (7.2), где указано, что X = 0 может иметь двоякое изображение: код положительного нуля и код отрицательного нуля.

    Дополнительный код

    Здесь связь между числом X и его изображением в дополнительном коде [Х]дк определяется следующим равенством.

    Положительное число в дополнительном коде выглядит так же, как и в прямом и обратом кодах, то есть для X > 0 справедливо утверждение:

    Xдк = Xпк = Xок

    Получение дополнительного кода отрицательного числа осуществляется в соответствии с равенством:

    [Х]дк = [2 + Х – 2-n] + 2-n = [Х]ок + 2-n

    Обратное преобразование отрицательного числа (от дополнительного к прямому) выполняется следующим образом.

    $$\left[-0, x_1...x_n\right]_{ДК}=1,\overline{x}_1...\overline{x}_n+2^{-n}=\left[1,\overline{\overline{x}}_1...\overline{\overline{x}}_n\right]_{ДК}=1,\overline{\overline{x}}_1...\overline{\overline{x}}_n+2^{-n}=1, x_1...x_n$$

    Например [[- 0,1101]дк = 1,0011]дк = 1,1101, то есть от дополнительного кода берется дополнительный код.

    Рассмотрим четыре случая:

  • Х > 0, Y > 0, a X + Y < 1. Как и при обратном коде, суммирование дополнительных кодов не вносит каких-либо изменений в операцию сложения.
  • Х > 0, Y < 0 и Х + Y > 0.

    [Х]дк + [Y]дк = X + (2 + Y) = 2 + (X + Y) – предварительный результат.

    Правильный результат при Х + Y > 0 равен X + Y.

    Выполняется коррекция, равная вычитанию 2 из предварительного результата (исключение в нем единицы с весом 21).

    Методика выполнения операции не изменяется, когда [Х]дк + [Y]дк = 0.

    Например,

    То есть ноль в дополнительном коде ноль имеет единственное представление.

  • Х > 0, Y < 0 и Х + Y < 0.

    Здесь действие

    [Х]дк + [Y]дк = X + (2 + Y) = 2 + (X + Y)

    дает правильный результат без коррекции.

  • Х < 0, Y < 0 и |Х + Y| < 1.

    [Х]дк+ [Y]дк = (2 + Х) + (2 + Y) = 2 + 2 + X + Y ,

    получаем результат, который отличается от правильного

    [(X + Y) < 0]дк = 2 + (X + Y) на 2.

    Необходима и здесь коррекция, рассмотренная в случае 2, то есть вычитание 2 из предварительного результата (исключение в нем единицы с весом 21).

  • Достоинства операций суммирования чисел в обратном и дополнительном кодах:

  • обработка знаковых и цифровых разрядов чисел осуществляется по одинаковым правилам, и при этом автоматически получается правильный знак результата;
  • исключена операция прямого вычитания.
  • Недостаток: невозможно фиксировать переполнение.

    Отметим, что в современных ЭВМ вся числовая информация со знаком записывается в дополнительном коде. Поэтому, например, число FFFFF...FFFF16 = -110.

    Для быстрого перевода числа из прямого кода в дополнительный или наоборот, из дополнительного кода в прямой можно воспользоваться очень простым правилом.

    Как уже указывалось, положительные числа в прямом и дополнительном кодах записываются одинаково. Так что здесь никаких проблем не возникает.

    Для отрицательных чисел при переводе можно воспользоваться следующим правилом. Знак отрицательного числа, единица, естественно, сохраняется. А цифровые разряды меняются слева направо на противоположные до последней единицы в числе. Последняя единица и все следующие за ней разряды сохраняются:

    0.10101100дк = 0.10101100пк; 0.00110011пк = 0.00110011дк.

    1.10101100дк = 1.01010100пк; 1.00110011пк = 1.11001101дк.

    Это правило вытекает из общего механизма перевода отрицательных чисел из прямого кода в дополнительный и наоборот. Первый шаг такого действия – инвертирование всех разрядов цифровой части (напомним, речь идет об отрицательных числах). При этом стоящие в конце числа нули станут единицами. На втором шаге к младшему разряду полученного результата добавляется единица. Это вызовет перенос, который будет распространяться до того разряда, который в новом числе равен нулю, а в исходном, следовательно, равен единице. Преобразование закончено.

    Методы фиксации переполнения при алгебраическом суммировании чисел с фиксированной запятой в обратном и дополнительном кодах

    Фиксация переполнения по знаку результата

    Прежде всего, отметим, что переполнение разрядной сетки при суммировании чисел с фиксированной запятой возможно лишь для операндов, имеющих одинаковые знаки, так как, в противном случае, модуль результата окажется меньше модуля любого из операндов и, следовательно, переполнения не будет.

    В связи с этим, факт наличия переполнения достаточно просто определить по изменению знака результата по сравнению со знаками операндов:

    $$OV= Зн\overline{X} \;\And\; Зн\overline{Y} \;\And\; P \vee ЗнX\; \And\; ЗнY\; \And\; \overline{P},$$

    где P – перенос за пределы знакового разряда.

    Модифицированные дополнительный и обратный коды и их использование в операции алгебраического суммирования

    В модифицированных кодах кодирование знака осуществляется 2-мя разрядами:

    "+" кодируется как "00"

    "-" кодируется как "11".

    При этом изображение числа X в этих кодах определяется равенствами:

    $$\left[X\right]_{МДК}=\begin{cases}X, если \; X\geq0;\\4+X, если \; X \lt 0\end{cases}$$ $$\left[X\right]_{МОК}=\begin{cases}X, если \; X\geq0;\\4+X-2^n, если \; X \leq 0\end{cases} $$

    Эта избыточность, сохраняя все качества обычных дополнительного и обратного кодов, дополняет их способностью фиксировать переполнение.

    Знаковые разряды результата "01" определяют положительное переполнение в операциях алгебраического суммирования, а "10" – отрицательное.

    При этом основная методика выполнения операций алгебраического суммирования в обратном и дополнительном кодах не меняется:

  • при алгебраическом суммировании в модифицированном обратном единица, выходящая за пределе знаковых разрядов, должна быть добавлена в младший разряд предварительного результата,
  • при алгебраическом суммировании в модифицированном дополнительном коде единица, выходящая за предел знаковых разрядов, отбрасывается.
  • Данный метод, при всей его простоте и наглядности, практического применения в ЭВМ не нашел. В основном, это связано с его большой избыточностью при кодировании данных и потерями времени при выполнении операции и последующей интерпретации результата.

    Метод на основе логического преобразования сигналов межразрядных переносов

    В настоящее время практически во всех компьютерах роль модифицированных кодов выполняют переносы, идущие в знаковый и из знакового разряда. Определение факта наличия переполнения выполняется практически одновременно с выполнением самой операции суммирования по следующей формуле:

    $$OV = C_7 \oplus C_8,$$

    на примере восьмиразрядных операндов, где C7 – перенос в старший (знаковый) разряд, а C8 – перенос из знакового разряда.

    Так при сложении операндов

    произойдет переполнение разрядной сетки результата:

    $$OV = C_7 \oplus C_8 =0 + 1 =1,$$

    а при сложении операндов

    нет, так как в данном случае: $$OV = C_7 \oplus C_8 =1 \oplus 1 =0,$$.

    Такой подход требует использования всего лишь одного дополнительного элемента – "сумма по модулю два" – в сумматоре и практически не снижает его быстродействия.

    Краткие итоги

    В лекции рассмотрено представление чисел в прямом, обратном и дополнительном кодах. Особое внимание уделено дополнительному коду представления числа как наиболее распространенному в современных компьютерах. Показаны особенности алгебраического суммирования чисел в обратном и дополнительном кодах при различных сочетаниях операндов. Рассмотрены механизмы фиксации переполнения при выполнении операции алгебраического суммирования чисел.

    Вопросы и задания

  • Как изображается знак числа при его кодировании? Возможно ли другое изображение знака числа? Сравните различные способы изображения знака.
  • В каком диапазоне размещаются числа с фиксированной запятой в прямом коде?
  • Как просуммировать числа, заданные в прямом коде без их перевода в обратный либо дополнительный код?
  • Какова методика получения обратного кода числа по его прямому коду?
  • Каковы недостатки алгебраического суммирования чисел в обратном коде?
  • Укажите самое большое и самое маленькое число в дополнительном коде, где под числовую часть отведено n разрядов.
  • Укажите правило суммирования чисел в обратном коде при отсутствии переполнения результата.
  • Какова методика получения дополнительного кода числа по его прямому коду?
  • В каком коде – прямом, обратном или дополнительном – можно представить больше чисел? Почему?
  • Запишите число (-3/8) в прямом, обратном и дополнительном кодах.
  • Укажите правило суммирования чисел в дополнительном коде при отсутствии переполнения результата.
  • В каком коде – обратном или дополнительном суммирование происходит быстрее? Почему?
  • Назовите основные методы фиксации переполнения при алгебраическом суммировании чисел в обратном и дополнительном кодах. Каковы их сравнительные достоинства и недостатки?
  • Какой из методов определения переполнения является самым быстродействующим? Какой из них требует наименьших дополнительных аппаратных затрат?
  • Система команд персональной ЭВМ на основе 16-разрядного микропроцессора может использовать как 8-, так и 16-разрядные операнды. Как в таком случае должка быть организована оперативная память и АЛУ такой ЭВМ, чтобы в ней можно было использовать модифицированный код для фиксации переполнения?
  • Страницы:

    Кодирование чисел в ЭВМ

    Прямой код

    Возможны два варианта изображения знаков чисел двоичными цифрами:

    "+" обозначать "0", а "-" обозначать "1";

    "+" обозначать "1", а "-" обозначать "0".

    Оба варианта равноценны.

    На практике в основном используется первый вариант.

    При таком решении все положительные числа с фиксированной запятой имеют вид: 0, x-1x-2... x-n, а отрицательные: 1, x-1x-2... x-n (естественно, что запятая, между знаковым разрядом и самим числом внутри ЭВМ не кодируется). Код знака помещается слева от запятой на место разряда с весом 2°. Поэтому, если знак и цифровую часть числа рассматривать как единое целое, то изображение положительных чисел не изменяется и определяется интервалом 0 ≤ Х < 1, а все отрицательные числа изображаются положительными числами [Х], расположенными в интервале 1 ≤ [Х] <2 (так называемое, представление числа в прямом коде).

    Рассмотренную связь между числом Х и его изображением в прямом коде - [Х]пк можно представить в следующем виде:

    $$ Х_{ПК} = ЗнХ. \left | Х \right | $$

    Пример 7.1.

    0.1012пк = +(1/2 +1/8) = +5/8

    1.1012пк = -5/8

    Число с фиксированной точкой в прямом коде имеет такое же представление, как и указанное в (7.1). Однако, здесь следует помнить, что двоичное число с фиксированной точкой имеет формат согласно (6.2). В этом случае числу 0.1012пк соответствует десятичное число +510, а числу 1.1012пк - -510.

    Очевидно, что если рассматривать числа с фиксированной точкой или запятой в прямом коде вместе со знаком, то такая операция даже простейшем случае алгебраического сложения не может быть выполнена. Так для чисел с фиксированной точкой

    01012пк = +510

    10102пк = -210

    При сложении этих чисел получим

    что, конечно, является неправильным результатом.

    Методика выполнения алгебраического сложения, рациональная для применения в ЭВМ, должна удовлетворять следующим условиям:

  • обработка знаковых и цифровых разрядов суммируемых чисел X и Y должна производиться по одинаковым правилам с получением при этом правильного знака суммы;
  • должна исключаться операция прямого вычитания, и вместо неё алгебраическое суммирование чисел разных знаков должно выполняться как сложение специальных кодов суммируемых чисел;
  • должно определяться переполнение, соответствующее $$\left | X + Y \right | \geq 1$$ при условии, что абсолютное значение X и Y меньше единицы (здесь речь идет, естественно, о числах с фиксированной запятой).
  • Всем указанным условиям удовлетворяет методика алгебраического сложения дополнительных и обратных кодов исходных чисел.

    Обратный код

    В этом коде связь между числом Х и его изображением в обратном коде - [Х]ок определяется равенством (7.2):

    $$\left[X\right]_{ОК}=\begin{cases} X, \text{если }X\geq0;\\ 2+X-2^{-n}, \text{если }X\leq0 \end{cases}$$

    При Х ≥ 0:

    [Х]ок = 2 + Х - 2-n = 2 - |X| - 2-n = 2 - 2-n + X.

    Запишем это выражение в несколько другом виде.

    Таким образом, для отрицательного числа получение обратного кода заключается в присвоении знаковому разряду кода 1 и замене в цифровой части числа 0 на 1, а 1 на 0 (выполняется $$\left[1,\overline{x}_1...\overline{x}_n\right]_{ДК}+2^{-n}$$).

    При преобразовании от обратного кода к прямому от обратного кода числа берется обратный код.

    Методика алгебраического суммирования в обратном коде при представлении исходных чисел и суммы в прямом коде

    При суммировании чисел в обратном коде могут встретиться четыре возможные комбинации.

  • Х > 0 и Y > 0, а X + Y < 1. В данном случае обращение к обратному коду не приводит к специфике выполнения операции, так как [Х > 0]ок + [Y > 0]ок = X + Y.
  • Х > 0, Y < 0 и X + Y > 0.

    [Х]ок + [Y]ок = X + 2 + Y - 2-n - предварительный результат.

    Т.к. X + Y > 0, то действительный результат равен X + Y. Для того чтобы от предварительного результата перейти к действительному, необходима коррекция: вычесть 2 и прибавить 2-n к предварительному результату, т.е. в предварительном результате исключается 1 в разряде с весом 21, что равноценно вычитанию 2, и эту же единицу направляем в младший разряд предварительного результата, что равноценно прибавлению 2-n.

  • Х > 0, Y < 0 и X + Y < 0.

    [Х]ок + [Y]ок = X + (2 + Y - 2-n). Этот результат соответствует правильному, так как согласно условию X + Y < 0. Следовательно, [X + Y < 0]ок = 2 + (X + Y) - 2-n.

  • Х < 0, Y < 0 и |Х + Y| < 1.

    [X]ок + [Y]ок = (2 + X - 2-n ) + (2 + Y - 2-n ) - предварительный результат.

    Правильный результат [(X + Y) < 0]ок = 2 + Х + Y - 2-n.

  • Это определяет необходимость выполнения коррекции предварительного результата, которая аналогична рассмотренной в случае 2, т.е. вычесть 2 и прибавить 2-n к предварительному результату.

    При суммировании в обратном коде чисел разных знаков возможно получение X + Y = 0. Здесь методика суммирования обратных кодов исходных чисел не изменяется, а результат получается в виде 1,1 . . .1. Например,

    Получили обратный код отрицательного нуля [- 0,0 . . . 0 ]ок = 1,1 ... 1. Такой результат согласуется с формулой (7.2), где указано, что X = 0 может иметь двоякое изображение: код положительного нуля и код отрицательного нуля.

    Дополнительный код

    Здесь связь между числом X и его изображением в дополнительном коде [Х]дк определяется следующим равенством.

    Положительное число в дополнительном коде выглядит так же, как и в прямом и обратом кодах, то есть для X > 0 справедливо утверждение:

    Xдк = Xпк = Xок

    Получение дополнительного кода отрицательного числа осуществляется в соответствии с равенством:

    [Х]дк = [2 + Х – 2-n] + 2-n = [Х]ок + 2-n

    Обратное преобразование отрицательного числа (от дополнительного к прямому) выполняется следующим образом.

    $$\left[-0, x_1...x_n\right]_{ДК}=1,\overline{x}_1...\overline{x}_n+2^{-n}=\left[1,\overline{\overline{x}}_1...\overline{\overline{x}}_n\right]_{ДК}=1,\overline{\overline{x}}_1...\overline{\overline{x}}_n+2^{-n}=1, x_1...x_n$$

    Например [[- 0,1101]дк = 1,0011]дк = 1,1101, то есть от дополнительного кода берется дополнительный код.

    Рассмотрим четыре случая:

  • Х > 0, Y > 0, a X + Y < 1. Как и при обратном коде, суммирование дополнительных кодов не вносит каких-либо изменений в операцию сложения.
  • Х > 0, Y < 0 и Х + Y > 0.

    [Х]дк + [Y]дк = X + (2 + Y) = 2 + (X + Y) – предварительный результат.

    Правильный результат при Х + Y > 0 равен X + Y.

    Выполняется коррекция, равная вычитанию 2 из предварительного результата (исключение в нем единицы с весом 21).

    Методика выполнения операции не изменяется, когда [Х]дк + [Y]дк = 0.

    Например,

    То есть ноль в дополнительном коде ноль имеет единственное представление.

  • Х > 0, Y < 0 и Х + Y < 0.

    Здесь действие

    [Х]дк + [Y]дк = X + (2 + Y) = 2 + (X + Y)

    дает правильный результат без коррекции.

  • Х < 0, Y < 0 и |Х + Y| < 1.

    [Х]дк+ [Y]дк = (2 + Х) + (2 + Y) = 2 + 2 + X + Y ,

    получаем результат, который отличается от правильного

    [(X + Y) < 0]дк = 2 + (X + Y) на 2.

    Необходима и здесь коррекция, рассмотренная в случае 2, то есть вычитание 2 из предварительного результата (исключение в нем единицы с весом 21).

  • Достоинства операций суммирования чисел в обратном и дополнительном кодах:

  • обработка знаковых и цифровых разрядов чисел осуществляется по одинаковым правилам, и при этом автоматически получается правильный знак результата;
  • исключена операция прямого вычитания.
  • Недостаток: невозможно фиксировать переполнение.

    Отметим, что в современных ЭВМ вся числовая информация со знаком записывается в дополнительном коде. Поэтому, например, число FFFFF...FFFF16 = -110.

    Для быстрого перевода числа из прямого кода в дополнительный или наоборот, из дополнительного кода в прямой можно воспользоваться очень простым правилом.

    Как уже указывалось, положительные числа в прямом и дополнительном кодах записываются одинаково. Так что здесь никаких проблем не возникает.

    Для отрицательных чисел при переводе можно воспользоваться следующим правилом. Знак отрицательного числа, единица, естественно, сохраняется. А цифровые разряды меняются слева направо на противоположные до последней единицы в числе. Последняя единица и все следующие за ней разряды сохраняются:

    0.10101100дк = 0.10101100пк; 0.00110011пк = 0.00110011дк.

    1.10101100дк = 1.01010100пк; 1.00110011пк = 1.11001101дк.

    Это правило вытекает из общего механизма перевода отрицательных чисел из прямого кода в дополнительный и наоборот. Первый шаг такого действия – инвертирование всех разрядов цифровой части (напомним, речь идет об отрицательных числах). При этом стоящие в конце числа нули станут единицами. На втором шаге к младшему разряду полученного результата добавляется единица. Это вызовет перенос, который будет распространяться до того разряда, который в новом числе равен нулю, а в исходном, следовательно, равен единице. Преобразование закончено.

    Методы фиксации переполнения при алгебраическом суммировании чисел с фиксированной запятой в обратном и дополнительном кодах

    Фиксация переполнения по знаку результата

    Прежде всего, отметим, что переполнение разрядной сетки при суммировании чисел с фиксированной запятой возможно лишь для операндов, имеющих одинаковые знаки, так как, в противном случае, модуль результата окажется меньше модуля любого из операндов и, следовательно, переполнения не будет.

    В связи с этим, факт наличия переполнения достаточно просто определить по изменению знака результата по сравнению со знаками операндов:

    $$OV= Зн\overline{X} \;\And\; Зн\overline{Y} \;\And\; P \vee ЗнX\; \And\; ЗнY\; \And\; \overline{P},$$

    где P – перенос за пределы знакового разряда.

    Модифицированные дополнительный и обратный коды и их использование в операции алгебраического суммирования

    В модифицированных кодах кодирование знака осуществляется 2-мя разрядами:

    "+" кодируется как "00"

    "-" кодируется как "11".

    При этом изображение числа X в этих кодах определяется равенствами:

    $$\left[X\right]_{МДК}=\begin{cases}X, если \; X\geq0;\\4+X, если \; X \lt 0\end{cases}$$ $$\left[X\right]_{МОК}=\begin{cases}X, если \; X\geq0;\\4+X-2^n, если \; X \leq 0\end{cases} $$

    Эта избыточность, сохраняя все качества обычных дополнительного и обратного кодов, дополняет их способностью фиксировать переполнение.

    Знаковые разряды результата "01" определяют положительное переполнение в операциях алгебраического суммирования, а "10" – отрицательное.

    При этом основная методика выполнения операций алгебраического суммирования в обратном и дополнительном кодах не меняется:

  • при алгебраическом суммировании в модифицированном обратном единица, выходящая за пределе знаковых разрядов, должна быть добавлена в младший разряд предварительного результата,
  • при алгебраическом суммировании в модифицированном дополнительном коде единица, выходящая за предел знаковых разрядов, отбрасывается.
  • Данный метод, при всей его простоте и наглядности, практического применения в ЭВМ не нашел. В основном, это связано с его большой избыточностью при кодировании данных и потерями времени при выполнении операции и последующей интерпретации результата.

    Метод на основе логического преобразования сигналов межразрядных переносов

    В настоящее время практически во всех компьютерах роль модифицированных кодов выполняют переносы, идущие в знаковый и из знакового разряда. Определение факта наличия переполнения выполняется практически одновременно с выполнением самой операции суммирования по следующей формуле:

    $$OV = C_7 \oplus C_8,$$

    на примере восьмиразрядных операндов, где C7 – перенос в старший (знаковый) разряд, а C8 – перенос из знакового разряда.

    Так при сложении операндов

    произойдет переполнение разрядной сетки результата:

    $$OV = C_7 \oplus C_8 =0 + 1 =1,$$

    а при сложении операндов

    нет, так как в данном случае: $$OV = C_7 \oplus C_8 =1 \oplus 1 =0,$$.

    Такой подход требует использования всего лишь одного дополнительного элемента – "сумма по модулю два" – в сумматоре и практически не снижает его быстродействия.

    Краткие итоги

    В лекции рассмотрено представление чисел в прямом, обратном и дополнительном кодах. Особое внимание уделено дополнительному коду представления числа как наиболее распространенному в современных компьютерах. Показаны особенности алгебраического суммирования чисел в обратном и дополнительном кодах при различных сочетаниях операндов. Рассмотрены механизмы фиксации переполнения при выполнении операции алгебраического суммирования чисел.

    Вопросы и задания

  • Как изображается знак числа при его кодировании? Возможно ли другое изображение знака числа? Сравните различные способы изображения знака.
  • В каком диапазоне размещаются числа с фиксированной запятой в прямом коде?
  • Как просуммировать числа, заданные в прямом коде без их перевода в обратный либо дополнительный код?
  • Какова методика получения обратного кода числа по его прямому коду?
  • Каковы недостатки алгебраического суммирования чисел в обратном коде?
  • Укажите самое большое и самое маленькое число в дополнительном коде, где под числовую часть отведено n разрядов.
  • Укажите правило суммирования чисел в обратном коде при отсутствии переполнения результата.
  • Какова методика получения дополнительного кода числа по его прямому коду?
  • В каком коде – прямом, обратном или дополнительном – можно представить больше чисел? Почему?
  • Запишите число (-3/8) в прямом, обратном и дополнительном кодах.
  • Укажите правило суммирования чисел в дополнительном коде при отсутствии переполнения результата.
  • В каком коде – обратном или дополнительном суммирование происходит быстрее? Почему?
  • Назовите основные методы фиксации переполнения при алгебраическом суммировании чисел в обратном и дополнительном кодах. Каковы их сравнительные достоинства и недостатки?
  • Какой из методов определения переполнения является самым быстродействующим? Какой из них требует наименьших дополнительных аппаратных затрат?
  • Система команд персональной ЭВМ на основе 16-разрядного микропроцессора может использовать как 8-, так и 16-разрядные операнды. Как в таком случае должка быть организована оперативная память и АЛУ такой ЭВМ, чтобы в ней можно было использовать модифицированный код для фиксации переполнения?
  • Вернуться к учебному плану