Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Дополнительный кодВсе процессоры с ФТ оперируют с числами, представленными в дополнительном коде, что позволяет существенно упростить выполнение арифметических операций. Положительные целые числа представляются в дополнительном коде точно так же, как в прямом коде. Формирование дополнительного кода отрицательного числа производится по следующему правилу: значение знакового бита не меняется (равно 1); все b значащих битов инвертируются (0 заменяются на 1,а 1 – на 0); к младшему биту полученного числа прибавляется 1 с соблюдением правил сложения двоичных чисел. Результат представляет собой число в дополнительном коде. Правило перевода в дополнительный код не зависит от типа чисел – целые или дробные. Примеры перевода из прямого кода в дополнительный представлены на рис. 3.8 и 3.9.
а ) положительное целое
173(10) = + 1101101(2) = 01101101пр = 01101101доп
7 6 5 4 3 2 1 0
б) отрицательное целое
_ 173(10) = _ 1101101(2) = 11101101пр = 10010011доп формирование дополнительного кода: инверсия всех битов, кроме знакового: 10010010 добавление 1 к младшему биту: 10010011
7 6 5 4 3 2 1 0
Рис. 3. 8. Примеры целых чисел в дополнительном коде
Обратный перевод числа из дополнительного кода в прямой осуществляется точно по тому же правилу. Приведем пример. Пусть дано число в дополнительном коде: 10010011доп (жирным шрифтом выделен знаковый бит). Формирование прямого кода: инверсия всех битов, кроме знакового __> 1 1101100; добавление 1 к младшему биту _> 1 1101101пр. Код называется дополнительным, поскольку отрицательное дробное число можно представить как разность между числом 2 (беззнаковым целым) и модулем этого числа, т.е. как дополнение к 2. В качестве примера, получим дополнительный код отрицательного числа __0,875, как его дополнения к 2. Модуль этого числа в формате Q3 равен 0,111(2). Вычитая 0,111(2) из числа 2(10) = 10,000(2) имеем результат 1,001(2). Определим дополнительный код числа _ 0,875 по приведенному выше правилу: _ 0, 875 _> _ 0,111(2) _> 1 111пр _> инверсия всех битов, кроме знакового _> 1 000 добавление 1 в младшему биту _> 1 001доп. _______
Результаты совпадают.
а)положительное дробное 0,8828125(10) = +0,1110001(2) = 01110001пр = 01110001доп
7 6 5 4 3 2 1 0
б) отрицательное дробное
___ 0,8828125(10) = _ 0,1110001(2) = 11110001пр = 10001111доп Формирование дополнительного кода: инверсия всех битов, кроме знакового: 10001110 добавление 1 к младшему биту: 10001111
7 6 5 4 3 2 1 0
Рис. 3. 9. Примеры дробных чисел в дополнительном коде
На рис.3.10 указаны веса битов и приведено правило вычисления десятичного эквивалента, соответствующего двоичному целому числу в дополнительном коде. На рис.3.11 указаны веса битов и приведено правило вычисления десятичного эквивалента, соответствующего двоичному дробному числу в дополнительном коде. Сравнивая рис.3.10 и 3.11, еще раз подчеркнем, что одинаковое представление чисел с ФТ может иметь разную трактовку типа чисел, а следовательно, соответствовать разным числам. Приводимые правила нетрудно распространить на любой формат. Наряду с простотой выполнения арифметических операций (см. далее), в дополнительном коде устраняется неоднозначность представления нуля. Ноль в прямом коде может быть представлен и как 0000...0 и как 1000...0, а в дополнительном коде только как 0000...0. Это легко проверить, вычислив для чисел, представленных в дополнительном коде, их десятичные эквиваленты: 0000... = 0(10); 1000... = _1(10).
а) веса битов
7 6 5 4 3 2 1 0 _27 26 25 24 23 22 21 20
б) дополнительный код положительного целого числа
7 6 5 4 3 2 1 0
Десятичный эквивалент (26 + 24 + 22 + 20) = 83
в) дополнительный код отрицательного целого числа
7 6 5 4 3 2 1 0
Десятичный эквивалент _27 + 25 + 23 + 22 = _ 84
Рис. 3.10. Десятичный эквивалент двоичного целого числа в дополнительном коде а) веса битов
7 6 5 4 3 2 1 0 _20 2-1 2-2 2-3 2-4 2-5 2-6 2-7
б) дополнительный код положительного дробного числа
7 6 5 4 3 2 1 0
Десятичный эквивалент 2-1 + 2-3 + 23-6 + 2-7 = 0,6484375
в) дополнительный код отрицательного дробного числа
7 6 5 4 3 2 1 0
Десятичный эквивалент _20 + 2-2 + 2-4 + 2-5 = _ 0,65625
Рис.3. 11. Десятичный эквивалент двоичного дробного числа в дополнительном коде
На рис. 3.12 приведены примеры максимальных и минимальных по модулю значений для положительного и отрицательного целых чисел в дополнительном коде в формате “слово” длиной 8 битов и их десятичные эквиваленты. Десятичные эквиваленты целых чисел для формата “слово” длины n битов (где n = b+1, b _ количество значащих битов) равны:
2b _ 1 _ максимальное положительное; 1 _ минимальное положительное; _ 2b _ максимальное по модулю отрицательное; _ 1 _ минимальное по модулю отрицательное.
а) максимальное положительное целое число 7 6 5 4 3 2 1 0
Десятичный эквивалент 28_ 1 = 127 б) минимальное положительное целое число
7 6 5 4 3 2 1 0
Десятичный эквивалент 20 = 1(10)
в) максимальное по модулю отрицательное целое число
7 6 5 4 3 2 1 0
Десятичный эквивалент _ 28 = _128
г) минимальное по модулю отрицательное целое число
7 6 5 4 3 2 1 0
Десятичный эквивалент _ 1(10)
Рис. 3. 12. Максимальные и минимальные целые числа в дополнительном коде
На рис. 3.13 приведены примеры максимальных и минимальных значений для положительного и отрицательного дробных чисел в дополнительном коде в формате Q7 и их десятичные эквиваленты. Десятичные эквиваленты дробных чисел в формате Qb длины равны:
1 _ 2 –b _ максимальное положительное; 2 –b _ минимальное положительное; _ 1 _ максимальное по модулю отрицательное; _ 2 –b _ минимальное по модулю отрицательное.
а) максимальное положительное дробное число
7 6 5 4 3 2 1 0
Десятичный эквивалент 1 _ 2 –8 = 0,9921875
б) минимальное положительное дробное число
7 6 5 4 3 2 1 0
Десятичный эквивалент 2–8 = 0,0078125 в) максимальное по модулю отрицательное дробное число
7 6 5 4 3 2 1 0
Десятичный эквивалент _ 1(10)
г) минимальное по модулю отрицательное дробное число
7 6 5 4 3 2 1 0
Десятичный эквивалент _ 2 –8 = _ 0,0078125
Рис. 3. 13. Максимальные и минимальные дробные числа в дополнительном коде
Для чисел, представленных в дополнительном коде, старший разряд остается знаковым. Трактовка типа чисел, представленных в дополнительном коде в формате ”слово”, весьма важна при сохранении этих чисел в форматах “двойное слово” и “расширенное слово”. Рассмотрим два примера. Пример 1. Число, представленное в дополнительном коде в формате “слово” длиной 8 битов (n = 8), сохраняется в формате “двойное слово” длиной 2n (рис.3.14). В зависимости от типа данных выполняются следующие действия: для целых чисел (рис.3.14, а):
число (со знаком) в дополнительном коде сохраняется в младшем слове LSP с выравниванием по правому краю; в старшем слове MSP и в ”лишних” старших битах младшего слова LSP происходит расширение знака; знаковым становится старший бит MSB слова MSP: LSP; для дробных чисел (рис. 3.14, б): число (со знаком) в дополнительном коде сохраняется в старшем слове MSP с выравниванием по левому краю; знаковым становится старший бит MSB слова MSP: LSP; биты младшего слова LSP и “лишние” младшие биты старшего слова MSP заполняются нулями. Пример 2. Число, представленное в дополнительном коде в формате “слово” длиной 8 битов (n = 8) сохраняется в формате “расширенное слово” длиной k = 20. Независимо от типа данных выполняются следующие действия (рис.3.15, а, б): число (со знаком) в дополнительном коде размещается в слове MSP:LSP (см. выше); в расширении EXT происходит расширение знака; знаковым становится старший бит MSB слова EXT: MSP: LSP. Из приведенных примеров видно, что расширение знака числа, представленного в дополнительном коде, не меняет его значения (см. десятичные эквиваленты на рис.3.14 и 3.15).Это преимущество дополнительного кода используется, в частности, в операциях пересылок данных, когда изменяется формат их представления (см.разд.3.7.10). В заключение отметим, что непосредственно в процессоре преобразование кодов из прямого в дополнительный и обратно не производится. Оно выполняется на языке ассемблера на этапе трансляции программы.
|