Задача кодирования возникает при переходе от естественной формы представления числа к машинной форме представления.
Естественная форма предполагает:
- задание знака чисел (положительное, отрицательное) с помощью символов “+”,”–” ;
- указание на место положение запятой с помощью специального символа – разделителя “,” (запятая);
- использование для определения количественного эквивалента числа обычной системы счисления, как правило, десятичной.
Поэтому, при кодировании решаются две задачи, во- первых, кодируется знак числа, во вторых, выполняется соответствующее представление мантиссы числа.
Д
иаграмма
поясняет классификацию преобразований
выполняемых при переходе к машинной
форме представления чисел.
Рис.3. Классификация машинных кодов чисел
Кодирование знаков.
В таблице 7 приведены коды знаков для простого и модифицированного двоичного кода. В машинных представлениях чисел символы “+”,”–” заменяются их кодами в виде одной или двух цифр используемой системы счисления.
Таблица 7. Кодирование знаков чисел
Знак числа |
Код знака |
|
для простого кода |
для модифицированного кода |
|
+ |
0 |
00 |
– |
1 |
11 |
В простых кодах знак кодируется одной цифрой, в модифицированных - двумя. Коды знаков занимают старшую (левую) позицию в разрядной сетке, используемую для представления числа. Старший знаковый разряд модифицированного кода либо “вписывается” в заданную разрядную сетку , либо помешается в дополнительном разряде. При использовании n-разрядной сетки в два раза уменьшает диапазон представляемых чисел, однако, в силу простоты, именно этот способ в МПТ применяется чаще.
Как следует из классификации, при кодировании значащей части числа используются прямой, обратный и дополнительные коды.
Для получения прямого кода числа, заданного в символической форме, необходимо
1. в знаковом разряде машинного кода числа записать цифру, соответствующую коду знака числа;
2. в значащих разрядах кода записать без изменений модуль числа.
Пример. Записать двоичные целые и дробные числа A= +1011100 и B= – 0.101101 в прямых кодах.
Решение: Aпр = 0.1011100; Bпр = 1.1011010.
Так как прямой код – машинное представление числа, то необходима привязка к заданному машинному формату (байт, слово и т.п.). В примере 1 выполнена привязка к формату байт.
Пример. Записать двоичные целое и дробное числа A= –111002 и B= 0. 1012 в прямых кодах. Выполнить привязку к формату целого и дробного слова (16 разрядов или два байта).
Решение: Aпр = 1.0000000000011100; Bпр = 1.101000000000000.
Обратные и дополнительные коды предполагают изменение значащей части отрицательного числа. Такое изменение выполняется с целью замены операции вычитания чисел операцией сложения, поскольку арифметико-логические устройства (АЛУ) любой ЭВМ, в том числе и микропроцессоров, содержат только сумматоры и регистры сдвигов.
Операция вычитания заменяется операцией сложения с отрицательным числом:
А - В = А + (-В)
Для получения обратного кода отрицательного дробного или целого чисел заданных в прямом коде, необходимо:
сохранить значение знакового разряда прямого кода;
выполнить поразрядную инверсию значащей части прямого кода числа. Поразрядная инверсия выполняется путем замены в каждом разряде нулевого значения на единичное и единичного на нулевое.
Пример.
- 17D = 1.10001B = 1.10001B – прямой код
1.01110B – обратный код
Обратные преобразования.
Обратными преобразованиями называются преобразования, обеспечивающие получение из обратного кода прямого.
Для перевода отрицательного числа из обратного в прямой код при необходимо выполнить следующее.
1. сохранить знак обратного кода;
2. выполнить поразрядную инверсию значащей части обратного кода.
Процедура справедлива для формата целых и дробных чисел.
Пример. Преобразовать в прямые коды следующие числа, представленные в обратных кодах.
Решение. Исходные данные и результаты преобразований представлены в таблице.
Обратные коды чисел |
Прямые коды, полученные после преобразования |
1.0011110B |
1.1100001B |
01101001B |
0.1101001B |
1.0011001B |
1.1100110B |
0.1111001B |
0.1111001B |
Дополнительные коды числовых данных
Прямые преобразования
Для получения дополнительного кода отрицательного числа, представленного в прямом коде необходимо:
получить обратный код числа;
прибавить единицу к самому младшему разряду полученного обратного кода;
знак числа в обратном коде – сохранить.
Пример. Получить дополнительный код двоичного числа [x]пр=1.11101010000B.
Решение. [x]доп=1.00010110000B.
Обратные преобразования.
Для получения прямого кода из дополнительного возможны два варианта:
1. из исходного кода вычесть 1 из младшего разряда, затем проинвертировать все разряды, кроме знакового.
2. проинвертировать все разряды, кроме знакового, затем прибавить 1 к младшему разряду.
Для положительных целых чисел прямой, обратный и дополнительный коды совпадают.
При сложении чисел необходимо учитывать форму их представления. Они могут складываться или как целые или как дробные числа. Такое представление называется представлением в форме с фиксированной запятой (ФЗ).
Представление с ФЗ широко используется в МПТ.
В этом формате в машинном коде числа запятой как символа – нет, однако, её положения известно “по умолчанию ”.
Обычно подразумевается, что запятая находится или после младшего разряда значащей части числа или перед её старшим разрядом (после знакового).
Прежде чем анализировать варианты сложения чисел с ФЗ, необходимо определить следующие соотношения:
Таблица двоичного сложения.
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 = 1 – единица переноса в старший разряд
Таблица двоичного вычитания.
0 – 0 = 0
1 – 0 = 1
1 – 1 = 0
0 – 1 = 1 1 – заем единицы из старшего разряда
Применяя при сложении форматы с фиксированной запятой, необходимо контролировать диапазон допустимых модулей суммы чисел.
Если результат операции превышает длину разрядной сетки, то образуется переполнение разрядной сетки. Дальнейшее выполнение программы при переполнении не имеет смысла.
Переполнение разрядной сетки – случай при сложении, когда модуль суммы превышает максимальное число, представимое в заданной разрядной сетке.
Переполнение возможно только при сложении чисел одного знака, так как модуль суммы в этом случае всегда превышает модули ненулевых слагаемых.
Переполнение невозможно при сложении чисел разных знаков. Модуль суммы в этом случае меньше модуля максимального и представимого в заданной разрядной сетке слагаемого.
Переполнение, возникающее при сложении двух отрицательных операндов называется отрицательным переполнением, а переполнение, возникающее при сложении двух положительных операндов – положительным.
При сложении возможны четыре случая.
1. A1>0; A2>0; S>0.
А1 = + 21D = 0.10101B
А2 = + 5D = 0.00101B
Т.к. оба операнда положительные, то все три кода совпадают.
0.10101
+ 0.00101
0.11010 S = 26D
2. A1>0; А2<0; S>0
А
1
= +21 = 0.10101 0.10101
А2 = -5 = 0.00101 прямые коды 1.11010 обратные коды
0.10101
+ 1.11010
1
0.01111
циклический
перенос
0.10000 B S = +16D
0
.10101
0.10101
1.11011 дополнительные коды + 1.11011
1 0.10000B
S=
16D
отбрасывается
3 . А1 <0; А2>0; S<0
А1 = -21 = 1.10101 1.01010
А2 = +5 = 0.00101 прямые коды 0.00101 обратные коды
1.01010
+ 0.00101
1.01111 – обратный код суммы
1.10000 - прямой код суммы S = -16D
1.01011
0.00101 дополнительные коды
1.01011
+ 0.00101
1.10000 – дополнительный код суммы
1.10000 – прямой код суммы S = -16D
4. А1 <0; А2 <0; S<0
А 1 = -5; А2 = -21
1.01010 1.01010
1.11010 обратные коды + 1.11010
1 1.00100
1.00101 – обратный код суммы
1.11010 – прямой код суммы S= -26
1 .01011 1.01011
1.11011 дополнительные коды + 1.11011
1 1.00110 - дополнительный код
отбрасывается суммы S = -26
При сложении двух операндов с одинаковыми знаками может образоваться сумма противоположного знака.
0.10101
+ 0.10101
1.01010 - при сложении положительных операндов образовалась
отрицательная сумма
Такое явление называется переполнением разрядной сетки. Переполнение может произойти только при сложении операндов с одинаковыми знаками.
Для обнаружения переполнения разрядной сетки в знаковую часть числа вводится дополнительный разряд – разряд переполнения. Коды в этом случае называются модифицированными.
Возможные комбинации в знаковых разрядах модифицированных кодов:
00 – разрешенная комбинация (признак положительного числа)
01 – запрещенная комбинация (положительное переполнение, т.е. переполнение при сложении положительных чисел)
10 – запрещенная комбинация (отрицательное переполнение, т.е. переполнение при сложении отрицательных чисел)
11 – разрешенная комбинация (признак отрицательного числа).
Для формального описания цифрового автомата широко применяют аппарат алгебры логики, являющийся одним из важных разделов математической логики.
Основным понятием алгебры логики является высказывание.
Высказывание – некоторое предложение, о котором можно утверждать, что оно истинно или ложно.
Например, высказывание «Земля – это планета Солнечной системы» истинно, а о высказывании «на улице идет дождь» можно сказать, истинно оно или ложно, если указаны дополнительные сведения о погоде в данный момент.
Любое
высказывание можно обозначить символом
и считать, что
,
если высказывание истинно, а
– если высказывание ложно.
Логическая (булева) переменная – такая величина , которая может принимать только два значения (0 или 1):
Высказывание абсолютно истинно, если соответствующая ей логическая величина принимает значение при любых условиях.
Примером абсолютно истинного высказывания является высказывание «Земля – это планета Солнечной системы».
Высказывание абсолютно ложно, если соответствующая ей логическая величина принимает значение при любых условиях.
Например, высказывание «Земля – спутник Марса» – абсолютно ложное.
Логическая
функция (функция алгебры логики) –
функция ƒ (
,
,
…,
.),
принимающая значение, равное 0 или 1 на
наборе логических переменных
,
,
…,
.
В таблице 7 приведены логические функции от одной переменной.
Таблица 7
|
|
|
|
|
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |