
- •1. Представление информации в эвм
- •1.1. Общие положения
- •1.2. Цифровая форма представления информации
- •1.3. Системы счисления
- •1.3.1. Общие положения
- •1.3.2. Двоичная система счисления
- •1.3.3. Смешанные системы счисления
- •1.3.4. Таблицы сложения и умножения в двоичной системе счисления
- •1.3.5. Перевод чисел из одной системы счисления в другую
- •1.4. Способы представления чисел со знаком
- •1.4.1. Общие положения
- •1.4.2. Дополнительный код.
- •1.4.3. Обратный код
- •1.5. Формы представления числовых данных
- •1.5.1. Общие положения
- •1.5.2. Представление числовых данных с фиксированной запятой
- •1.5.3. Представление числовых данных с плавающей запятой
- •2. Представление символьной информации
- •3. Представление графической информация
- •4. Oсновы схемотехники
- •4.1. Основы математической логики
- •4.2. Логические элементы
- •4.3. Проектирование логических схем
- •4.3.1. Комбинационные схемы и конечные автоматы
- •4.3.2. Синтез комбинационных схем
- •4.4. Элементы памяти (триггеры)
- •С амыми универсальными и сложными являются jk-триггеры. Они могут строиться как со статическим, так и с динамическим управлением. Универсальный jk-триггер
- •4.5. Регистры
- •4.6. Счетчики
- •5. Арифметические основы эвм
- •5.1. Основные положения
- •5.2. Арифметические операции с плавающей запятой
- •5.3. Десятичная арифметика
- •5.4. Схемы выполнения основных операций над числами с фиксированной запятой в двоичной системе счисления
- •6. Теоретические основы проектирования устройств обработки информации
- •6.1. Микропрограммы выполнения арифметических операций
- •6.1.1. Структура арифметико-логического устройства (алу) эвм
- •6.2.1. Язык микроопераций для представления алгоритмов выполнения арифметических операций
- •7. Основы проектирования операционной части алу
- •7.1. Этапы проектирования
- •7. 2. Проектирование операционной части алу
- •7.2.1. Разработка структурной схемы операционной части алу
- •7.2.2. Разработка функциональной схемы операционной части алу
- •8. Проектирование управляющей части алу
- •8.1. Способы построения управляющей части алу
- •8.2. Проектирование управляющей части алу на основе конечных автоматов
- •8.2.1. Общие вопросы проектирования устройств управления на основе конечных автоматов
- •8.2.2. Основные этапы проектирования схем мпа
- •8.2.3. Проектирование мпа на основе автомата Мура
- •8.2.4. Проектирование мпа на основе автомата Мили
- •8.3. Проектирование микропрограммных устройств управления
- •8.3.1. Основные принципы работы микропрограммных устройств управления
- •8.3.2. Типы микропрограммных устройств управления
- •8.3.4. Кодирование поля микроопераций регистра микрокоманд
- •8.3.5. Кодирование поля адресов схемы формирования адресов микрокоманд
- •9. Глоссарий
1.4. Способы представления чисел со знаком
1.4.1. Общие положения
Отрицательные числа, как и ноль, не входят в натуральный ряд чисел. Это числа не для счета предметов. Это величины, которые в дальнейшем должны вычитаться. Очевидно, по этой причине в систему счисления ввели знаки чисел: плюс (число будет прибавляться) и минус (число будет вычитаться). В вычислительной технике такое представление чисел называют: число плюс знак. Фиксируется абсолютное значение числа и, отдельно, знак. Это прямой код. Кроме прямого кода используются, по крайней мере, еще два: дополнительный и обратный.
Использование дополнительного или обратного кода позволяет арифметическое действие вычитание свести к двум действиям: инверсии знака (умножение на минус единицу) и сложению. Выполнение вычитания в прямом коде предполагает использование дополнительного оборудования. Если инвертировать знак вычитаемого, вычитание можно свести к сложению, а аппаратная реализация инверсии знака проще, чем реализация вычитания. Аппаратная реализация инверсии знака при вычитании использует инверсные выходы регистра вычитаемого и подачи "единичного" сигнала переноса на вход младшего разряда сумматора. Это аппаратное решение не увеличивает время выполнения вычитания по сравнению с временем выполнения операции сложения.
Поэтому все операции связанные с действием вычитания чисел производятся с применением инверсии, т.е. преобразования чисел в дополнительный или обратный коды.
При этом, исходные данные и результаты арифметических операций могут храниться в памяти как в прямом коде, так и в обратном или дополнительном кодах. Хранение данных в памяти непосредственно в дополнительном или в обратном кодах часто уменьшает количество преобразований данных при выполнении арифметических операций.
Таким образом, дополнительные или обратные коды используются:
как средство упрощения операции вычитания,
как дополнительные способы представления алгебраических чисел (чисел со знаком).
1.4.2. Дополнительный код.
Кодирование чисел в дополнительном коде можно получить естественным путем при помощи операции вычитания (моделирования работы вычитающего счетчика). Для начала рассмотрим дополнительный код для десятичной системы счисления. За начальное состояние возьмем значение счетчика – 4, разрядность счетчика – 3:
Начальное состояние счетчика: 0 003 положительное число 3
после вычитания 1 0 002 положительное число 2
после вычитания 1 0 001 положительное число 1
после вычитания 1 0 000 нулевое значение счетчика
после вычитания 1 9 999 отрицательное число – минус 1; это и следующие значения рассматриваются как коды отрицательных чисел
после вычитания 1 9 998 отрицательное число – минус 2
после вычитания 1 9 997 отрицательное число – минус 3
и т.д.
Положительные числа от отрицательных отличаются значением старшего разряда. Если он равен 9. то число отрицательное, иначе – положительное.
Пример выполнения вычитания в дополнительном коде:
А = В – С. где: В = 0 005, С = 0 003
Заменяем действие вычитание положительного числа на сложение с отрицательным числом: А = В + ( – С). Здесь по коду положительной величины С (0 003) находится код отрицательной величины ( – С = 9 997) и производится действие сложение:
0 005
+ 9 997
10 002
Единица переноса из старшего разряда (отделена вертикальной чертой) в данном случае просто отбрасывается.
Определение кода отрицательной величины по коду положительной величины (операция инверсии знака) производится по правилу: каждую цифру (включая знак) меняют на дополнение до 9: (0 9), (18), (27)….(9 0) и полученный результат увеличивают на 1.
В десятичной системе счисления дополнительный код не симметричен по отношению к множествам положительных и отрицательных чисел, записываемых в регистр.
Двоичный дополнительный код более симметричен по отношению к множествам положительных и отрицательных чисел (отрицательных чисел записывается больше только на одно число).
Определение кода отрицательной величины по коду положительной величины (приписывание отрицательного знака) производится по правилу: каждую цифру числа (включая знак) меняют на противоположную (ноль на единицу, а единицу на ноль) и полученный результат увеличивают на 1.
Два числа, одинаковых по абсолютной величине, но имеющих разные знаки, являются дополнительными в том смысле, что их сумма равна нулю.
Пример. Числа: А = 5(10)= 0.0101(2) и В = (–5(10))= 1.1011(2) являются дополнительными, т.к. их сумма равна нулю (перенос из старшего разряда отбрасывается):
0.0101
+ 1.1011
1| 0.0000.
Они содержат значащие цифры и знак (в примере знак отделен точкой).
Имеется и другая интерпретация дополнительного кода. Знаковый разряд рассматривается как обычный цифровой, но с отрицательным весом. У положительных чисел значение этого разряда равно нулю, а у отрицательного – минус единица в соответствующей (положительной) степени.
Так как 2n >
,
число всегда отрицательно, если его
старшая (знаковая) цифра равна 1.
Подсчет значения чисел для предыдущего примера производится следующим образом:
А = 0.0101 = 100(2) + 1(2) = 4(10) + 1(10) = 5(10)
В = 1.1011 = (– 10000(2)) + 1000(2) + 10(2) +1(2) = (– 16(10)) +8(10)+2(10)+1(10) = (– 5(10)).
Такая интерпретация дополнительного кода позволяет проектировать более эффективные алгоритмы микропрограмм арифметических операций.
Асимметрия дополнительного кода
Рассмотрим диапазоны чисел со знаком в дополнительном коде, которые можно поместить в трехразрядный регистр:
-
Положительные
Отрицательные
0.00(2)
+ 0(10)
1.00(2)
– 4(10)
0.01(2)
+ 1(10)
1.01(2)
– 4(10)+1(10)= –3(10)
0.10(2)
+ 2(10)
1.10(2)
– 4(10)+2(10)= –2(10)
0.11(2)
+ 3(10)
1.11(2)
– 4(10)+2(10)+1(10)= –1(10)
Формально, количество чисел со знаком «+» и «–» одинаково. Но нуль не имеет знака (в том смысле, что процедура изменения знака не меняет значение цифры как средства счета). Фактический диапазон положительных чисел от единицы до трех, а отрицательных – от единицы до четырех. Таким образом, число минус четыре (со знаком) использует для хранения только 3 разряда (1.00(2)), а плюс четыре – 4 разряда (0.100(2)). Поэтому при выполнении операции изменении знака числа (инверсии) может произойти переполнение регистра.
Модифицированный дополнительный код
Использование модифицированного дополнительного кода связано с проблемой переполнения разрядной сетки. Вычисления в процессоре "классической архитектуры" концептуально производятся параллельно по разрядам операндов и последовательно по операциям. Для большинства микропроцессоров параллельность обработки определяется размером операнда. Это байт (8 бит), слово (2 байта), двойное слово (4 байта) или учетверенное слово (8 байт). Количество байт бит ? параллельной обработки (ширина обработки) определяется разрядностью шин данных, регистров и устройств обработки.
Но в любом случае возможно получение результата операции или цепочки операций, превышающего ширину обработки. Это переполнение разрядов (переполнение разрядной сетки). В процессе работы возможно получение количества бит результата, превышающего ширину обработки. При этом возможно получение неверного результата из-за нехватки разрядов устройства обработки или регистров результата. Для контроля правильности выполнения операций необходим механизм фиксации переполнения.
Рассмотрим несколько примеров выполнения арифметических операций в дополнительном коде над числами А = 0.101(2) = 5(10) и В = 0.110(2) = 6(10).
1. С = А – В = А + (–В)
0.101 + 5(10)
+ 1.010 – 6(10)
1.111 – 1(10) нет переноса, нет переполнения, результат верен.
2. С = В – А = В + (–А)
0.110 + 6(10)
+ 1.011 – 5(10)
10.001 + 1(10) есть перенос, нет переполнения, результат верен.
3. С = А + В,
0.101 + 5(10)
+ 0.110 + 6(10)
1.011 – 3(10)), нет переноса, есть переполнение, результат неверен. (должно быть +11(10))
4. С = (–А) + (–В)
1.011 – 5(10)
+ 1.010 – 6(10)
10.101 + 5(10) , есть перенос, есть переполнение, результат неверен. (должно быть -11(10))
5. С =(–А) + (–D), где D = 3(10) = 0.011(2)
1.011 – 5(10)
+ 1.101 – 3(10)
11.000 – 8(10) есть перенос, переполнения нет, результат верен.
Из приведенных примеров видно что:
переполнение разрядной сетки (примеры 3 и 4) ведет к ошибке в результате,
переполнение не всегда совпадает с переносом из старшего разряда,
для выявления переполнения нужно также анализировать соотношение знаков исходных операндов.
Процедура выявления переполнения разрядной сетки намного упрощается при использовании модифицированного дополнительного кода.
Модифицированный дополнительный код получается из дополнительного простым дублированием знакового разряда. Причем, в памяти числа могут храниться в дополнительном коде и переводиться в модифицированный код непосредственно при пересылке на исполнительное устройство.
Приведенные выше примеры выполнения операций в модифицированном дополнительном коде выглядят так:
1. 00.101 + 5(10)
+ 11.010 – 6(10)
11.111 – 1(10) нет переноса, нет переполнения.
2. 00.110 + 6(10)
+ 11.011 – 5(10)
1 00.001 + 1(10) есть перенос, нет переполнения.
3. 00.101 + 5(10)
+ 00.110 + 6(10)
01.011 +11(10), нет переноса, есть переполнение.
4. 11.011 – 5(10)
+ 11.010 – 6(10)
110.101 –11(10), есть перенос, есть переполнение.
5. 11.011 – 5(10)
+ 11.101 – 3(10)
111.000 – 8(10) есть перенос, нет переполнения.
В дополнительном коде факт переполнения определяется по несовпадению цифр знака. При этом, (даже) в случае переполнения первая цифра знака указывает на верный знак результата, а вторая – на верную старшую цифру результата, не поместившуюся в разрядную сетку значащих цифр результата. Таким образом, правильный результат может быть сохранен для последующей обработки.