Перейти к содержанию

Вычислительная техника и программирование/Занятие 4

Материал из Викиверситета

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

[править]

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

Различают следующие коды двоичных чисел:

  • прямой код (П),
  • обратный код (ОК),
  • дополнительный код (ДК).

Прямой код

[править]

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

Пример.

А10 = +10; А2 = +1010; [А2]п = 0|1010

В10 = –15; В2 = –1111; [В2]п = 1|1111

Обратный код

[править]

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

Пример.

А10 = +10; А2 = +1010; [А2]ок = [А2]п = 0|1010

В10 = –15; В2 = –1111; [В2]ок = 1|0000

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

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

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

[править]

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

Пример.

А10 = +10; А2 = +1010; [А2]дк = [А2]ок = [А2]п = 0|1010

В10 = –15; В2 = –1111; [В2]дк = [В2]ок + 20 = 1|0000+1 = 1|0001

Основные свойства дополнительного кода:

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

МЕдк=МЕок + 20 = 10|00…00,

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

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

МЕдк.

Модифицированные обратные и дополнительные коды

[править]

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

Пример.

А10 = +10; А2 = +1010; [А2]дк = [А2]ок = [А2]п = 0|1010

2]мок = [А2]мдк = 00|1010

В10 = –15; В2 = –1111; [В2]дк= [В2]ок+20 = 1|0000+1 = 1|0001

2]мок= [В2]мдк= 11|0001

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

Арифметические действия в машинных кодах.

[править]

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

Требуемая операция Необходимое преобразование
А+В А+В
А-В А+(-В)
-А+В (-А)+В
-А-В (-А)+(-В)

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

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

Пример 1. Сложить два числа: А10 = 7, В10 = 16.

А2 = +111 = +0111; В2 = +10000.

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

[A2]п = [A2]ок = [A2]дк = 0|00111; [В2]п = [В2]ок = [В2]дк = 0|10000.

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

0|00111

+0|10000

----------

С2 = 0|10111

С10 = +23


Пример 2. Сложить два числа: А10 = +16, В10 = -7 в ОК и ДК.

По таблице необходимо преобразование А+(-В), в которой второй член преобразуется с учетом знака

[A2]п = [A2]ок = [A2]дк = 0|10000;

2]п = 1|111 = 1|00111; [В2]ок = 1|11000; [В2]дк = 1|11001

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

Практическая часть.

[править]

Задание:

  1. Взять две пары десятичных двузначных целых числа: А, В, С, D. (Варианты по списку)
  2. Вычислить (А-В)ок, (В-А)дк, (С-D)ок, (D-C)дк.


Варианты

  1. Вариант — 78, 56, 11, 35;
  2. Вариант — 67, 36, 45, 22;
  3. Вариант — 21, 87, 38, 44;
  4. Вариант — 99, 26, -73, 26,
  5. Вариант — 28, 33, 42, 54;
  6. Вариант — 61, 43, 65, 41;
  7. Вариант — 11, 84, 49, 53;
  8. Вариант — 85,- 47, 43, 66;
  9. Вариант — 48, 52, 65, 88;
  10. Вариант — 26, 58, 63, 77;
  11. Вариант — 91, 22, 46, -14;
  12. Вариант — 57, 14, 69, 55;
  13. Вариант — 77, 98, 25, -88;
  14. Вариант — 46, 66, 35, 36;
  15. Вариант — 44, 37, 92, 28;
  16. Вариант — 63, 46, 83, 71;
  17. Вариант — 35, -51, 63, 24;
  18. Вариант — 25, 95, -38, 33;
  19. Вариант — 32, 29, 86, 27;
  20. Вариант — 49, 55, -73, 22
  21. Вариант — 33, -77, 53, 71;
  22. Вариант — 48, 86, 62, 42;
  23. Вариант — 69, -48, 11, 20;
  24. Вариант — 10; 82, 80, 45;
  25. Вариант — 70, 93, -27, 30;
  26. Вариант — 88, -40, 16, 83;
  27. Вариант — 64, 80, -17, 77;
  28. Вариант — 40, 46, -73, 19;
  29. Вариант — 14, -60, 11, 27;
  30. Вариант — 90, 73, -10, 20.