Национальный исследовательский университет "Высшая Школа Экономики"
Опубликован: 19.11.2012 | Доступ: свободный | Студентов: 11126 / 6740 | Длительность: 29:54:00
Специальности: Менеджер, Преподаватель
Лекция 14:

Информационно-логические основы ЭВМ

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >

Машинные коды

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

Пример 14.5.

A_{10} = +10\; A_2 = +1010\; [А_2]_п=0 \vdots 1010; \\
B_{10}=-15\; B_2=-1111 \; [B_2]_n=1 \vdots 1111

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

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

Пример 14.6.

А_{10} = +5\; А_2=+101\; [А_2]_n=[А_2]_{ОК} = 0 \vdots 101; \\
В_{10}=-13\; В_2=-1101\; [B_2]_{0K}=1 \vdots  0010.

Свое название обратный код чисел получил потому, что коды цифр отрицательного числа заменены инверсными. Укажем наиболее важные свойства обратного кода чисел:

  • сложение положительного числа С с его отрицательным значением в обратном коде дает так называемую машинную единицу МЕ_{ок}=1\vdots 111\dots 11, состоящую из единиц в знаковом и значащих разрядах числа;
  • нуль в обратном коде имеет двоякое значение. Он может быть положительным числом - 0 \vdots 00\dots 0 и отрицательным числом - 1 \vdots 11\dots 11. Значение отрицательного нуля совпадает с МЕ_{ок}. Двойственное представление нуля явилось причиной того, что в современных ЭВМ все числа представляются не обратным, а дополнительным кодом.

Дополнительный код положительных чисел совпадает с их прямым кодом. Дополнительный код отрицательного числа представляет собой результат суммирования обратного кода числа с единицей младшего разряда (2^0- для целых чисел, 2^{-k} - для дробных).

Пример 14.7.

А_{10} =+19\; A_2=+10011\; [A_2]_n=[A_2]_{OK}=[A_2]_{ДК}=0 \vdots 10011;\\
B_{10}=-13\; B_2=-11-1\; [B_2]_{ДК}=[B_2]_{OK}+2^0=1 \vdots 0010+1=1 \vdots 0011

Укажем основные свойства дополнительного кода.

  • Сложение дополнительных кодов положительного числа С с его отрицательным значением дает так называемую машинную единицу дополнительного кода:

    МЕ_{дк}=МЕ_{ок}+20=10 \vdots 00\dots 00,

    т. е. число 10 (два) в знаковых разрядах числа.

  • Дополнительный код получил такое свое название потому, что представление отрицательных чисел является дополнением прямого кода чисел до машинной единицы МЕ_{ДК}.
  • Нуль в дополнительном коде имеет единственное представление. Благодаря этому все современные компьютеры используют при хранении и преобразовании чисел именно двоичный код.

Модифицированные обратные и дополнительные коды двоичных чисел отличаются соответственно от обратных и дополнительных кодов удвоением значений знаковых разрядов. Знак "+" в этих кодах кодируется двумя нулевыми знаковыми разрядами, а "-" - двумя единичными разрядами.

Пример 14.8.

А_{10} = 9;\;  A_2=+1001;\;  [A_2]_n=[A_2]_{ок}=[A_2]_{ДK}= 0 \vdots 1001;\\
\[[A_2\]]_{мок}=[A_2]_{мдк}=00 \vdots 1001;\\
В_{10}=- 9;\; В_2 =-1001;\; [В_2]_{ок}= 1 \vdots 0110 \; [B_2]_{ДК}=1\vdots  0111;\\
\[[B_2\]]_{мок}=11 \vdots 0110; [B_2]_{МДК}=11 \vdots 0111.

Целью введения модифицированных кодов является фиксация и обнаружение случаев получения неправильного результата, когда значение результата превышает максимально возможный результат в отведенной разрядной сетке машины. В этом случае перенос из значащего разряда может исказить значение младшего знакового разряда. Значение знаковых разрядов "01" свидетельствует о положительном переполнении разрядной сетки, а "10" - об отрицательном переполнении. В настоящее время практически во всех моделях ЭВМ, в том числе во всех ПК, роль удвоенных разрядов для фиксации переполнения разрядной сетки играют переносы, идущие в знаковый и из знакового разряда.

Арифметические операции над числами с фиксированной точкой

Сложение (вычитание). Операция вычитания приводится к операции сложения путем преобразования чисел в обратный (ОК) или дополнительный (ДК) код. Пусть числа А \ge 0 и В \ge 0, тогда операция алгебраического сложения выполняется в соответствии с табл. 14.3.

Таблица 14.3. Таблица преобразования кодов при алгебраическом сложении
Требуемая операция Необходимое преобразование
A+B A+B
A-B A+(-B)
-A+B  (-A)+B
-A-B  (-A)+(-B)

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

  • Слагаемые должны иметь одинаковое число разрядов. Для выравнивания разрядной сетки слагаемых можно дописывать незначащие нули слева к целой части числа и незначащие нули справа к дробной части числа.
  • Знаковые разряды чисел участвуют в сложении так же, как и цифровые.
  • Необходимые преобразования кодов (п. 14.2) производятся с изменением знаков чисел. Приписанные незначащие нули изменяют свое значение при преобразованиях по общему правилу.
  • При образовании единицы переноса из старшего знакового разряда, в случае использования ОК, эта единица складывается с младшим числовым разрядом. При использовании ДК единица переноса теряется. Знак результата формируется автоматически, результат представляется в том коде, в котором представлены исходные слагаемые.

Пример 14.9. Сложить два числа A_{10}= 7; B_{10}= 16.

A_2 = +111 = +0111; \\
B_2 = + 1000 = + 10000.

Исходные числа имеют различную разрядность, и необходимо провести выравнивание разрядной сетки:

[A_2]_п =[A_2]_{ок}= [A_2]_{ДК}=0 \vdots 00111;\\
\[[B_2\]]_п=[B_2]_{ок}=[B_2]_{ДК}=0 \vdots 10000.

Сложение в обратном или дополнительном кодах дает один и тот же результат:

\frac{\begin{matrix}&0\;\vdots\;00111\\+&0\;\vdots\; 10000 \end{matrix}}{C_2=0 \;\vdots\; 10111_2}\\C_{10}=+23

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

Пример 14.10. Сложить два числа A_{10}= +16;\;B_{10}=-7 в ОК и ДК. В соответствии с табл. 14.3 должна быть реализована зависимость A+(-B), в которой второй член преобразуется с учетом знака

[A_2]_п=0\; \vdots \; 10000=0 \; \vdots \;10000;\;[A_2]_{oк}=0 \vdots \; 10000;\; [A_2]={ДК}=0 \; \vdots \; 10000\\
\[[B_2\]] _п=1\;\vdots111=1\;\vdots\;00111;\; [B_2]_{ок}=1\;\vdots \;11000;\;[B_2]_{ДК}=1\;\vdots\;11001

При сложении чисел в ОК и ДК были получены переносы в знаковый разряд и из знакового разряда. В случае ОК перенос из знакового разряда требует дополнительного прибавления единицы младшего разряда (см. п. 4. правил). В случае ДК этот перенос игнорируется.

Умножение. Умножение двоичных чисел наиболее просто реализуется в прямом коде. Рассмотрим, каким образом оно приводится к операциям сложения и сдвигам.

Пример 14.11. Умножить два числа A_{10}=7;\; B_{10}=5. Перемножим эти числа, представленные прямыми двоичными кодами, так же, как это делается в десятичной системе.


Нетрудно видеть, что произведение получается путем сложения частных произведений, которые представляют собой разряды множимого, сдвинутые влево в соответствии с позициями разрядов множителя. Частные произведения, полученные умножением на нуль, игнорируются. Важной особенностью операции умножения n-разрядных сомножителей является увеличение разрядности произведения до n+n=2n. Знак произведения формируется путем сложения знаковых разрядов сомножителей. Возможные переносы из знакового разряда игнорируются.

Деление. Операция деления, как и в десятичной арифметике, является обратной операции умножения. Покажем, что и эта операция приводится к последовательности операций сложения и сдвига.

Пример 14.12. Разделить два числа A_{10}=45;\; B_{10}=5.

[А_2]_п= 101101\\
\[[B_2\]]_п=101

Деление произведено так же, как это делается обычно в десятичной системе. Сначала проверяется, можно ли вычесть значение делителя из старших разрядов делимого. Если возможно, то в разряде частного записывается единица и определяется частная разница. В противном случае в частное записывается нуль, и разряды делителя сдвигаются вправо на один разряд по отношению к разрядам делимого. К полученной предыдущей разнице сносится очередная цифра делимого, и данный процесс повторяется, пока не будет получена необходимая точность. Если учесть, что все вычитания в ЭВМ заменяются сложением в ОК или в ДК (см. табл. 14.3), то действительно, операция деления приводится к операциям сложения и сдвигам вправо разрядов делителя относительно разрядов делимого. Отметим, что делимое перед операцией деления должно быть приведено к 2n-разрядной сетке. Только в этом случае при делении на n-разрядный делитель получается n-разрядное частное.

Знак частного формируется также путем сложения знаковых разрядов делимого и делителя, как это делалось при умножении.

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >
Фахруддин хемракулыев
Фахруддин хемракулыев
Шерхон Давлатов
Шерхон Давлатов

Почему тесты (1,2,3..) не работают. Хочу пройти тест но не получается

Станислав Кот
Станислав Кот
Россия, Сургут, ТУСУР, 2011
Елена Нестеренко
Елена Нестеренко
Беларусь, г. Минск