Содержание
2. Основы машинной арифметики с двоичными
числами.
Любая информация (числа, команды, записи и т. п.)
представляется в ЭВМ в виде двоичных кодов фиксированной или переменной
длины. Отдельные элементы двоичного кода, имеющие значение 0 или 1,
называют разрядами или битами. Двоичный код состоящий из 8 разрядов носит
название байта. Для записи чисел также используют 32-разрядный формат
(машинное слово), 16-разрядный формат (полуслово) и 64-разрядный формат
(двойное слово).
2.1 Коды чисел.
В ЭВМ в целях упрощения выполнения арифметических
операций применяют специальные коды для представления чисел. Использование
кодов позволяет свести операцию вычитания чисел к арифметическому сложению
кодов этих чисел. Применяются прямой, обратный и дополнительный коды
чисел. Прямой код используется для представления отрицательных чисел в
запоминающем устройстве ЭВМ, а также при умножении и делении. Обратный и
дополнительный коды используются для замены операции вычитания операцией
сложения, что упрощает устройство арифметического блока ЭВМ. К кодам
выдвигаются следующие требования: 1) Разряды числа в коде жестко
связаны с определенной разрядной сеткой. 2) Для записи кода знака в
разрядной сетке отводится фиксированный, строго определенный разряд.
Например, если за основу представления кода взят один байт, то для
представления числа будет отведено 7 разрядов, а для записи кода знака
один разряд.
Прямой код. Прямой код двоичного числа совпадает по
изображению с записью самого числа. Значение знакового разряда для
положительных чисел равно 0, а для отрицательных чисел 1.
Знаковым разрядом обычно является крайний разряд в
разрядной сетке. В дальнейшем при записи кода знаковый разряд от цифровых
условимся отделять запятой. Если количество разрядов кода не указано будем
предполагать, что под запись кода выделен один байт.
Пример. В случае, когда для записи кода выделен один
байт, для числа +1101 прямой код 0,0001101, для числа -1101 прямой код
1,0001101.
Обратный код. Обратный код для положительного числа
совпадает с прямым кодом. Для отрицательного числа все цифры числа
заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд
заносится единица.
Пример.
Для числа +1101 прямой код 0,0001101; обратный код
0,0001101. Для числа -1101 прямой код 1,0001101; обратный код
1,1110010.
Дополнительный код. Дополнительный код положительного
числа совпадает с прямым кодом. Для отрицательного числа дополнительный
код образуется путем получения обратного кода и добавлением к младшему
разряду единицы.
Пример.
Для числа +1101:
Прямой код |
Обратный код |
Дополнительный код |
0,0001101 |
0,0001101 |
0,0001101 |
Для числа -1101:
Прямой код |
Обратный код |
Дополнительный код |
1,0001101 |
1,1110010 |
1,1110011 |
Содержание
2.2 Особенности сложения чисел в обратном и дополнительном
кодах.
При сложении чисел в дополнительном коде возникающая
единица переноса в знаковом разряде отбрасывается.
При сложении чисел в обратном коде возникающая единица
переноса в знаковом разряде прибавляется к младшему разряду суммы
кодов.
Если результат арифметических действий является кодом
отрицательного числа, необходимо преобразовать его в прямой код. При этом
обратный код преобразуется в прямой заменой цифр во всех разрядах кроме
знакового на противоположные. Дополнительный код преобразуется в прямой
также, как и обратный, с последующим прибавлением единицы к младшему
разряду.
Пример
Сложить двоичные числа X и Y в обратном и дополнительном
кодах.
а) X= 111, Y= -11;
1) Сложим числа, пользуясь правилами двоичной
арифметики:
2) Сложим числа, используя коды:
Прямой код |
Сложение в обратном коде |
Сложение в дополнительном коде |
|
|
|
Так как результат сложения является кодом положительного
числа (знак 0), то
(X+Y)обр=(X+Y)доп=(X+Y)пр.
б) X= -101,Y= -11;
1) Сложим числа, пользуясь правилами двоичной
арифметики:
2) Сложим числа, используя коды:
Прямой код |
Сложение в обратном коде |
Сложение в дополнительном коде |
|
|
|
Так как сумма является кодом отрицательного числа (знак
1), то необходимо перевести результаты в прямой код: - из обратного
кода (X+Y)обр=1,1110100
(X+Y)пр=1,0001011; - из дополнительного кода
(X+Y)доп=1,1110101
(X+Y)пр=1,0001010+0,0000001=1,0001011. Таким образом, X+Y=
-1011 и полученный результат совпадает с обычной записью.
Содержание
2.3 Модифицированные обратный и дополнительный коды.
При переполнении разрядной сетки, происходит перенос
единицы в знаковый разряд. Это приводит к неправильному результату, причем
положительное число, получившееся в результате арифметической операции
может восприниматься как отрицательное (так как в знаковом разряде "1") и
наоборот.
Например:
Здесь X и Y - коды положительных чисел, но ЭВМ
воспринимает результат их сложения как код отрицательного числа ("1" в
знаковом разряде). Для обнаружения переполнения разрядной сетки вводятся
модифицированные коды.
В модифицированном обратном и модифицированном
дополнительном кодах под знак числа отводится не один, а два разряда: "00"
соответствует знаку "+", "11" - знаку "-". Любая другая комбинация ("01"
или "10"), получившаяся в знаковых разрядах служит признаком переполнения
разрядной сетки. Сложение чисел в модифицированных кодах ничем не
отличается от сложения в обычных обратном и дополнительном кодах.
Рассмотрим предыдущий пример, выполнив сложение в
модифицированном обратном коде:
Комбинация "01" в знаковых разрядах означает, что
произошло переполнение и получившийся результат - неверный.
Рассмотрим ещё один пример. Пример. Даны два числа:
X=101001 и Y= -11010. Сложить их в модифицированном дополнительном
коде.
1) Переведем X и Y в модифицированный дополнительный код:
Обычная запись |
Модифицированный
обратный код |
Модифицированный
дополнительный код |
X= +101001
Y= -011010 |
|
|
2) Выполним сложение:
Переполнения нет (в знаковых разрядах "00"), поэтому
полученный результат - верный (X+Y=1111)
Содержание
Упражнения 2.
1) Записать число в прямом, обратном и дополнительном
кодах: а) 11010; б) -11101; в) -101001; г) -1001110.
2) Перевести X и Y в прямой, обратный и дополнительный
коды. Сложить их в обратном и дополнительном кодах. Результат перевести в
прямой код. Проверить полученный результат, пользуясь правилами двоичной
арифметики.
а) X= -11010;
Y= 1001111; |
б) X= -11101;
Y= -100110; |
в) X= 1110100;
Y= -101101; |
г) X= -10110;
Y= -111011; |
д) X= 1111011;
Y= -1001010; |
е) X= -11011;
Y= -10101. |
3) Сложить X и Y в модифицированном обратном и
модифицированном дополнительном восьмиразрядных кодах. В случае появления
признака переполнения увеличить число разрядов в кодах и повторить
суммирование. Результат перевести в прямой код и проверить, пользуясь
правилами двоичной арифметики.
а) X= 10110;
Y= 110101; |
б) X= 11110;
Y= -111001; |
в) X= -11010;
Y= -100111; |
г) X= -11001;
Y=-100011; |
д) X= -10101;
Y= 111010; |
е) X= -1101;
Y= -111011. |
Содержание
|