- •Раздел 2 принципы построения и функционирования эвм и вычислительных систем (вс)
- •2.1. Структура эвм
- •2.2. Системы счисления
- •2.3. Формы представления чисел
- •2.3.1. Форма представления чисел с фиксированной точкой
- •2.3.2. Форма представления чисел с плавающей точкой
- •2.3.3. Форматы двоично-десятичных чисел
- •2.3. Машинные коды
- •2.3.1. Прямой код
- •2.3.2. Обратный код
- •2.3.3. Дополнительный код
- •2.4. Перевод чисел из одной системы представления в другую
- •2.4.1. Перевод между основаниями, составляющими степень двойки
- •2.4.2. Перевод целого числа из десятичного счисления в другое
- •2.4.3. Перевод дробного числа из десятичного счисления в другое
- •2.4.4. Перевод чисел в десятичную систему счисления
- •2.5. Арифметические действия над двоичными числами
- •2.5.1. Сложение
- •2.5.2. Вычитание
- •2.5.3. Умножение
- •2.5.4. Деление
- •2.6. Понятие алгебры логики
- •2.7. Простейшие логические функции
- •2.7.1. Логическая операция конъюнкция (логическое умножение)
- •2.7.2. Логическая операция дизъюнкция (логическое сложение)
- •2.7.3. Логическая операция инверсия (отрицание)
- •2.7.4. Логическая операция сложение по модулю 2
- •2.7.5. Логическая операция эквивалентность (функция тождества)
- •2.7.6. Логическая операция импликация (логическое следование)
- •2.7.7. Функция Шеффера
- •2.7.8. Стрелка Пирса ав, или функция Вебба a b
- •2.8. Основные правила преобразования формул
- •2.9. Кодирование текстовой информации
- •2.10. Составные части компьютера
- •2.11. Логические элементы
- •2.12. Триггеры
- •2.12.1. Общие сведения о триггерах
- •2.12.2. Асинхронный rs-триггер
- •2.12.3. Синхронный rs-триггер
- •2.12.3. Двухтактный rs-триггер
- •2.12.4. Асинхронный и синхронный d-триггеры
- •2.12.5. T-триггер
- •2.12.6. Jk-триггер
- •2.13. Типовые узлы комбинационного типа
- •2.13.1. Дешифраторы
- •2.13.2. Одноразрядный сумматор
- •2.13.3. Полусумматор
- •2.13.4. Многоразрядные сумматоры
- •2.13.5. Двоично-десятичные сумматоры
- •2.13.6. Мультиплексоры
- •2.13.7. Демультиплексоры
- •2.14. Типовые узлы накапливающего типа
- •2.14.1. Регистры
- •2.14.2. Счетчики
- •2.14.3. Двоично-десятичные счетчики
- •2.15. Классификация архитектур системы команд
- •2.15.1. Классификация по составу и сложности команд
- •2.15.2. Классификация по месту хранения операндов
- •2.15.3. Стековая архитектура
- •2.15.4. Аккумуляторная архитектура
- •2.15.5. Регистровая архитектура
- •2.15.6. Архитектура с выделенным доступом к памяти
- •2.16. Типы команд
- •2.16.1. Команды пересылки данных
- •2.16.2. Команды арифметической и логической обработки
- •2.16.3. Операции с целыми числами
- •2.16.4. Операции с числами в форме с плавающей запятой
- •2.16.5. Логические операции
- •2.16.6. Операции сдвигов
- •2.16.7. Операции с десятичными числами
- •2.16.8. Simd-команды
- •2.16.9. Команды для работы со строками
- •2.16.10. Команды преобразования
- •2.16.11. Команды ввода/вывода
- •2.16.12. Команды управления системой
- •2.16.13. Команды управления потоком команд
- •2.17. Формат команд
- •2.17.1. Длина команды
- •2.17.2. Разрядность полей команды
- •2.17.3. Выбор адресности команд
- •2.18. Способы адресации операндов
- •2.18.1. Непосредственная адресация
- •2.18.2. Прямая адресация
- •2.18.3. Косвенная адресация
- •2.18.4. Регистровая адресация
- •2.18.5. Косвенная регистровая адресация
- •2.18.6. Адресация со смещением
- •2.18.7. Относительная адресация
- •2.18.8. Базовая регистровая адресация
- •2.18.9. Индексная адресация
- •2.18.10. Страничная адресация
- •2.18.11. Блочная адресация
- •2.18.12. Распространенность различных видов адресации
- •2.19. Способы адресации в командах управления потоком команд
- •2.20. Функциональная организация фон-неймановской вычислительной машины
- •2.20.1. Устройство управления
- •2.20.2. Арифметико-логическое устройство
- •2.20.3. Основная память
- •2.20.4. Модуль ввода/вывода
- •2.21. Цикл команды
- •2.21.1. Стандартный цикл команды
- •2.21.2. Описание стандартных циклов команды для гипотетической машины
- •2.21.3. Машинный цикл с косвенной адресацией
2.3. Машинные коды
Для упрощения арифметических операций числа записываются в специальной форме, называемой машинными кодами. Эти коды позволяют:
свести операцию вычитания к операции сложения;
автоматически получать знак суммы (разности);
выявлять переполнение разрядной сетки.
Существуют следующие коды:
прямой (ПК);
обратный (ОК);
дополнительный (ДК).
2.3.1. Прямой код
Для хранения целых чисел со знаком отводится две ячейки памяти (16 бит), причем старший (левый) разряд отводится под знак числа – если число положительное, то в знаковый разряд записывается 0, если число отрицательное записывается 1.
Представление в компьютере положительных чисел с использованием формата «знак-величина» называется прямым кодом числа. Например, число 200210 = 111110100102 будет представлено в 16-ти разрядном представлении следующим образом:
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
При представлении целых чисел в n-разрядном представлении со знаком максимальное положительное число (с учетом выделения одного разряда на знак) равно:
.
2.3.2. Обратный код
При сложении чисел с разными знаками фактически необходимо выполнять вычитание, а эта операция является менее удобной, чем сложение. Обратный и дополнительный коды позволяют свести операцию вычитания к операции сложения. В прямом коде это сделать нельзя.
Обратный код отрицательного числа получают из прямого кода путем инвертирования цифровых разрядов (но не знакового). Положительные числа в обратном коде записываются так же, как и в прямом. Например:
Особенностью обратного кода является различное представление цифровых разрядов положительного и отрицательного нулей:
Для получения прямого кода отрицательного числа из обратного кода цифровые (не знаковый) разряды инвертируют.
2.3.3. Дополнительный код
Для получения дополнительного кода отрицательного числа можно использовать следющий алгоритм:
1. Модуль числа записать прямым кодом в n двоичных разрядах;
2. Получить обратный код числа; для этого значения всех бит инвертировать (все единицы заменить на нули и все нули заменить на единицы);
3. К полученному обратному коду прибавить единицу.
Пример 2.3. Записать дополнительный код отрицательного числа –2002 для 16-ти разрядного компьютерного представления.
Решение.
Прямой код |
|-200210| |
1 0000111110100102 |
Обратный код |
инвертирование |
1 1111000001011012 |
|
прибавление единицы |
1 1111000001011012 + 00000000000000012 |
Дополнительный код |
|
1 1111000001011102 |
Пример 2.4. Выполнить арифметическое действие в машинном коде.
Решение. Представим положительное число в прямом, а отрицательное число в дополнительном коде:
Десятичное число |
Прямой код |
Обратный код |
Дополнительный код |
||
3000 |
0 000101110111000 |
|
|
||
-5000 |
1 001001110001000 |
1 110110001110111 |
1 110110001110111 + 000000000000001 1 110110001111000 |
||
Сложим прямой код положительного числа с дополнительным кодом отрицательного числа. Получим результат в дополнительном коде:
|
|||||
3000-5000 |
|
|
0 000101110111000 +1 110110001111000 1 111100000110000 |
Ответ получен в дополнительном коде, так как в знаковом разряде 1. Переведем полученный дополнительный код в десятичное число:
1. Инвертируем дополнительный код: 0000011111001111;
2. Прибавим к полученному коду 1 и получим модуль отрицательного числа:
0000011111001111 + 0000000000000001 0000011111010000 |
3. Переведем в десятичное число и припишем знак отрицательного числа: -2000.
Положительные числа в дополнительном коде записываются так же, как и в прямом. Нуль в дополнительном коде имеет единственное представление:
Обратный и дополнительный коды с точки зрения простоты выполнения операций над числами равноценны. Однако операции с удвоенной разрядностью в дополнительном коде выполняются проще, поэтому его чаще используют.