Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Консп лек по ЭиУА.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
934.4 Кб
Скачать

2.4 Знаковый разряд

При работе с десятичными числами для обозначения положительных и отрицательных чисел используются знаки «+» и «-» соответственно. В системе с двумя состояниями мы можем оперировать только единицами и нулями. Тем не менее, взглянув на последний пример, можно получить ключ к решению этой проблемы. Как уже было сказано, отрицательное значение получается в результате заема в старший разряд числа. Так что мы можем использовать этот разряд в качестве знакового бита (sign bit), причем 0 будет эквивалентен знаку «+», и 1 -- знаку «-». Таким образом, число b’11000101’ будет соответствовать значе­нию —59, а число b'00111011 — значению +59 (в примерах знаковый бит выделен полу­жирным шрифтом). Преимущество такого представления заключается в том, что при арифметических операциях со знаковым битом можно обращаться так же, как с обычным битом.

При этом результат операции будет иметь верный знак. Рассмотрим два примера в дополнительном коде а) 96-37 и б) 37-96:

а) уменьшаемое больше вычитаемого

б) уменьшаемое меньше вычитаемого

01100000 (+96)

+11011011 (дополнительный код -37)

00111011 (+59)

00100101 (+37)

+ 10100000 (дополнительный код -96)

11000101 (дополнительный код -59)

Из примеров видно, что если отрицательное число представлено в дополни­тельном коде, то нам не нужно изобретать аппаратный вычитатель, поскольку прибавление отрицательного числа эквивалентно вычитанию положительного. Другими словами, А - В = А + (-В).

Более того, если числа будут записаны в до­полнительном коде, результаты всех последующих арифметических операций будут автоматически в правильном коде.

С арифметическими операциями над отрицательными числами, представленными в дополнительном коде, связаны две проблемы.

Первая из этих проблем - переполнение (overflow). Она заключается в том, что при сложении двух положи­тельных или двух отрицательных чисел может возникнуть переполнение в знако­вом бите. В приведенных ниже примерах старший бит знаковый.

а) сумма положительных чисел получается отрицательной

б) сумма отрицательных чисел получается положительной

01000 (+8 обычный код)

+ 01011 (+11 обычный код)

10011 (дополнительный код -13 !!!)

11000 (-8 дополнительный код)

+ 10101 (-11 дополнительный код)

01101 (обычный код +13 !!!)

Смена значения знакового бита означает переполнение знакового бита. За этой ситуацией надо следить. Об этом в некоторых микропроцессорах выводится сигнализация.

Вторая проблема связана с выполнением арифметических операций над знаковыми операндами с числами разной разрядности. В этом случае необходимо выполнить расширение числа с помощью знаковых разрядов.

При расширении данных дополнительные разряды слева следует заполнять знаковым битом. Этот метод называется расширением знака (sign extension).

С учетом сказанного, выполним расширение знаковым разрядом до 8 бит, тогда приведенные выше примеры будут выглядеть так.

а) сумма положительных чисел

б) сумма отрицательных чисел

00001000 (+8 обычный код)

+ 00001011 (+11 обычный код)

00010011 (+19 обычный код)

11111000 (-8 дополнительный код)

+11110101 (-11 дополнительный код)

11101101 (-19 дополнительный код)

Результат получился правильный в обоих случаях.