- •Логическое устройство компьютера и представление данных
- •1. Логическое устройство компьютера и принципы фон Неймана2.
- •1.1. Логическое устройство компьютера
- •1.2. Принципы построения компьютера
- •1.3. Команда: определение, классификация, выполнение
- •2. Представление информации в компьютере
- •2.1. Представление целых чисел
- •2.2. Арифметические действия над целыми числами
- •2.3. Представление вещественных чисел
- •2.4. Выполнение арифметических действий над нормализованными числами
- •2.5. Системы кодирования текстовых данных
- •2.6. Универсальная система кодирования текстовых данных
- •2.7. Кодирование графических данных
- •2.8. Кодирование звуковой информации
- •2.9. Вопросы, подлежащие усвоению
- •2.10. Упражнения
2.2. Арифметические действия над целыми числами
Сложение и вычитание
На самом деле в большинстве компьютеров операция вычитания не используется, а вместо нее производится сложение обратных или дополнительных кодов уменьшаемого и вычитаемого. Это позволяет существенно упростить конструкцию АЛУ.
Сложение обратных кодов. Здесь при сложении чисел А и В имеют место четыре основных и два особых случая:
1. А и В положительны. При суммировании складываются все разряды, включая разряд знака. Так как знаковые разряды положительных слагаемых равны нулю, разряд знака суммы тоже равен нулю.
Пример 1.
-
Десятичное сложение
Двоичное сложение
+
30
+
00000117
0 0000111
10
0 0001010
2. А положительно, B отрицательно и по абсолютной величине больше, чем А.
Пример 2.
-
Десятичное сложение
Двоичное сложение
+
30
+
0000011–10
1 1110101
Обратный код –10
–7
0 0001010
Обратный код –7
Получен правильный результат в обратном коде. При переводе в прямой код биты цифровой части результата инвертируются: 1 0000111 = –710.
3. А положительно, B отрицательно и по абсолютной величине меньше, чем А.
Пример 3.
-
Десятичное сложение
Двоичное сложение
+
100
+
0001010–3
1 1111100
Обратный код –3
7
0 0000110
+1
0 0000111
Прямой код 7
Полученный первоначально неправильный результат (6 вместо 7) исправляет переносом единицы из знакового разряда в младший разряд суммы.
4. А и В отрицательны.
Пример 4.
-
Десятичное сложение
Двоичное сложение
+
–31
+
1111100Обратный код –3
–7
1 1111000
Обратный код –7
–10
1 1110100
+1
1 1110101
Обратный код –10
Полученный первоначально неправильный результат исправляется переносом единицы из знакового разряда в младший разряд суммы.
Переполнение разрядной сетки. Так называется ситуация, когда при сложении старшие разряды результата операции не помещаются в отведенной для него области памяти. Для обнаружения переполнения и оповещения о возникшей ошибке в компьютере используются специальные средства. Ниже приведены два возможных случая переполнения.
5. А и В положительны, сумма А+В больше, либо равна 2*n–1, где n – количество разрядов формата чисел (для однобайтового формата n = 8, 2n–1 = 27 = 128).
Пример 5.
-
Десятичное сложение
Двоичное сложение
+
650
+
100000197
0 1100001
162
1 0100010
Переполнение
Семи разрядов цифровой части числового формата недостаточно для размещения восьмиразрядной суммы (16210 = 101000102), поэтому старший разряд суммы оказывается в знаковом разряде, что вызывает несовпадение знака суммы и знаков слагаемых, что и является свидетельством переполнения разрядной сетки.
6. А и В отрицательны, сумма абсолютных величин А и В больше, либо равна 2 n–1.
Пример 6.
-
Десятичное сложение
Двоичное сложение
+
–631
+
1000000Обратный код –63
–95
1 0100000
Обратный код –95
–158
0 1100000
Переполнение
+1
Здесь знак суммы тоже не совпадает со знаками слагаемых, что свидетельствует о переполнении разрядной сетки.
Сложение дополнительных кодов. Имеют место рассмотренные выше шесть случаев.
1. А и В положительны. Здесь нет отличий от случая 1, рассмотренного для обратного кода.
2. А положительно, B отрицательно и по абсолютной величине больше, чем А.
Пример 7.
-
Десятичное сложение
Двоичное сложение
+
30
+
0000011–10
1 1110110
Дополнительный код –10
–7
1 1111001
Дополнительный код –7
Получен правильный результат в дополнительном коде. При переводе в прямой код биты цифровой части результата инвертируются, и к младшему разряду прибавляется единица: 1 0000110 + 1 = 1 0000111 = –710.
3. А положительно, B отрицательно и по абсолютной величине меньше, чем А.
Пример 8.
-
Десятичное сложение
Двоичное сложение
+
100
+
0001010–3
1 1111101
Дополнительный код –3
7
0 0000111
Перенос отбрасывается
Получен правильный результат. Единица переноса из знакового разряда отбрасывается.
4. А и В отрицательны.
Пример 9.
-
Десятичное сложение
Двоичное сложение
+
–31
+
1111101Дополнительный код –3
–7
1 1111001
Дополнительный код –7
–10
1 1110110
Дополнительный код –10
Перенос отбрасывается
Получен правильный результат в дополнительном коде. Единица переноса из знакового разряда отбрасывается.
Случаи переполнения для дополнительных кодов рассматриваются по аналогии с обратными кодами.
Сравнение рассмотренных форм кодирования целых чисел со знаком показывает:
1) на преобразование отрицательного числа в обратный код затрачивается меньше времени, чем на преобразование в дополнительный код, так как последнее состоит из двух шагов;
2) время выполнения сложения для дополнительных кодов меньше, чем для обратных кодов, потому что нет переноса единицы из знакового разряда в младший разряд результата.
Умножение и деление
Во многих компьютерах умножение производится как последовательность сложений и сдвигов. Для этого в АЛУ имеется регистр, называемый накапливающим сумматором, который до начала выполнения операции содержит ноль. В процессе выполнения операции в нем поочередно размещаются множимое и результаты промежуточных сложений, а по завершении операции – окончательный результат.
Другой регистр АЛУ, участвующий в выполнении этой операции, вначале содержит множитель. Затем по мере выполнения сложений содержащееся в нем число уменьшается, пока не достигнет нулевого значения.
Пример.
Для иллюстрации умножим 1100112 на 1011012.
Накапливающий сумматор |
Множитель |
|
0
+
|
101101 |
|
110011 |
|
|
1
+
|
101100 |
|
110011 |
|
Сдвиг влево на две позиции |
1
+
|
101000 |
|
110011 |
|
Сдвиг влево на одну позицию |
1
+
|
100000 |
|
110011 |
|
Сдвиг влево на две позиции |
100011110111 |
000000 |
|
Деление реализуется путем многократного прибавления к делимому дополнительного кода делителя.