Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Системы счисления и арифметика ЭВМ

.pdf
Скачиваний:
89
Добавлен:
15.05.2015
Размер:
637.72 Кб
Скачать

тельные числа представляются в прямом коде (ПК), а отрицательные числа

– в ДК, причем обратный перевод ДК в ПК осуществляется аналогичными операциями в той же последовательности. На рис. 3 рассмотрена цепь преобразований числа из ПК в ДК и обратно в двух вариантах.

ПК (-)

инверс.

ОК

+1

ДК

инверс.

ДК

+1

ПК (-)

числа

(кроме

 

(кроме

 

числа

 

знака)

 

 

 

знака)

 

 

 

 

 

 

(-)

 

 

 

 

инверс.

 

 

 

инверс.

 

 

 

ПК

ОК

+1

ДК

ДК

+1

ПК

модуль

 

 

 

 

модуль

 

 

 

 

 

 

 

 

 

 

 

(-)

 

 

 

 

Рис. 3. Два варианта преобразования чисел из ПК в ДК и обратно

Пример: Число -5(10) перевести в ДК и обратно (первый вариант).

1

 

101

ПК (-)

1

 

011

ДК (-)

 

 

+1

 

010

ОК (-)

+1

 

100

ДК (-)

 

 

 

1

ДК (-)

 

 

 

1

ПК (-)

 

1

 

011

 

1

 

101

Пример: число -5(10) перевести в ДК и обратно (второй вариант).

0

 

101

мод. ПК

 

 

1

 

011

ДК (-)

 

 

 

 

1

 

010

ОК (-)

+

0

 

100

ДК

+

 

1

ДК (-)

 

 

1

мод. ПК

 

1

 

011

 

 

0

 

101

Использование ДК для представления отрицательных чисел устраняет двусмысленное представление нулевого результата (наличие двух нулей: +0 и -0), так как -0 исчезает.

В общем случае использованием ДК для записи отрицательных чисел можно перекрыть диапазон десятичных чисел от -2k-1 до +2k-1-1, где k – число используемых двоичных разрядов, включая знаковый. Так, с помощью одного байта можно представить десятичные числа от -128 до +127 либо только положительные числа от 0 до 255 (здесь под положительными числами понимаются числа без знака). В табл. 1 приведены 4-разрядные двоичные числа от 0000 до 1111 и десятичные числа для представления их

21

со знаком и без знака. Из этой таблицы следует, что в формате 4- разрядного двоичного числа могут быть представлены десятичные числа со знаком в диапазоне от -8 до +7 или десятичные числа без знака в диапазоне от 0 до +15.

Оба способа представления чисел широко используются в ЭВМ.

 

 

 

Таблица 1

 

 

 

4-разрядное

Десятичные эквиваленты

Десятичные эквиваленты

двоичное число

двоичного числа со знаком

двоичного числа без знака

0000

 

+0

0

0001

 

+1

1

. . . .

ПК

. . .

. . .

0110

 

+6

6

0111

 

+7

7

1000

 

-8

8

1001

 

-7

9

1010

 

-6

10

. . . .

ДК

. . .

. . .

1110

 

-2

14

1111

 

-1

15

В ЭВМ используется быстрый способ формирования ДК. При этом двоичное число просматривается от МЗР к СЗР. Пока встречаются нули, их копируют в разряды результата. Первая встретившаяся единица также копируется в соответствующий разряд, а каждый последующий бит исходного числа заменяется на противоположный (0 на 1, 1 на 0).

Пример: число -44(10) (10101100 (2)) перевести в ДК и обратно.

Проверка:

1

0101

100

ПК

1 0101100

ПК

 

инвертируется сохраняется

инверсия

 

1

1010

100

ДК

+1 1010011

ОК

 

инвертируется сохраняется

1

 

 

1 1010100

ДК

1

 

 

 

0101

100

ПК

 

 

Пример: перевести в ДК модуль числа -44.

22

0

0101

100

ПК числа без знака

 

 

Сохран.

 

Инверс.

 

1

1010

100

ДК (-44)

 

 

 

 

Видно, что результаты преобразований обоими методами совпадают.

6.5. Сложение и вычитание в дополнительном коде

При выполнении арифметических операций в современных ЭВМ используется представление положительных чисел в прямом коде (ПК), а отрицательных – в обратном (ОК) или в дополнительном (ДК) кодах. Это можно проиллюстрировать схемой на рис. 4.

ПК

0

Мод. дв. числа

 

1

Мод. дв. числа

ОК

0

Мод. дв. числа

 

1

 

 

 

 

Мод. дв. числа

ДК

0

Мод. дв. числа

 

1

 

ОК+1МЗР

 

 

а

 

 

 

б

Рис. 4. Представление чисел в ЭВМ:

а – положительное число; б – отрицательное число

Общее правило: при алгебраическом сложении двух двоичных чисел, представленных обратным (или дополнительным) кодом, производится арифметическое суммирование этих кодов, включая разряды знаков. При возникновении переноса из разряда знака единица переноса прибавляется к МЗР суммы кодов при использовании ОК и отбрасывается при использовании ДК. В результате получается алгебраическая сумма в обратном (или дополнительном) коде.

Рассмотрим подробнее алгебраическое сложение для случая представления отрицательных чисел в ДК.

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

23

включая знаковые, которые при этом рассматриваются как старшие. При переносе из старшего разряда единица переноса отбрасывается и возможны два варианта результата:

знаковый разряд равен нулю: результат – положительное число в ПК;

знаковый разряд равен единице: результат – отрицательное число в ДК.

Для определения абсолютного значения результата его необходимо

инвертировать, затем прибавить единицу.

Пример: вычислить алгебраическую сумму 58(10) -23(10).

58(10) → 0011 1010(2)

- ПК

-28(10) → 1001 0111(2)

- ПК

1110 1001(2)

- ДК

Число отрицательное – необходимо перевести в ДК (быстрый перевод)

0011 1010 Перенос из знакового разряда отбрасываем. + 1110 1001 Число является положительным в ПК.

1 ← 0010 0011(2) (ПК) = 35(10)

перенос

Пример: вычислить алгебраическую сумму 26(10) -34(10).

26(10) → 0001 1010(2)

- ПК

 

-34(10) → 1010 0010(2)

- ПК

Быстрый перевод

1101 1110(2)

- ДК

 

+0001 1010 Перенос из знакового разряда отсутст- 1101 1110 вует. Число отрицательное в ДК, так как

0 ← 1111 1000(2) знаковый разряд равен 1. перенос

.Вычислим результат, преобразовав его из ДК в ПК:

1111 1000(2)

(ДК)

1000 0111

Инверсия всех разрядов, кроме знакового.

+

1

 

 

 

1000 1000(2)

(ПК) = - 8(10)

Пример: вычислить алгебраическую сумму -5(10) -1(10).

24

-5 -1

(10) (10)

1101 (ПК) →1011 (ДК)

1001 (ПК) →1111 (ДК)

1011

 

Перенос из знакового разряда отбросить.

+1111

 

Число отрицательное в ДК, так как знаковый

1 ← 1010

(2)

разряд равен 1.

перенос

Запишем результат, преобразовав его из ДК в ПК: 1010(2) (ДК)

1101 Инверсия значащих разрядов (кроме знакового). + 1

1110(2) (ПК) = - 6(10)

6.6. Признак переполнения разрядной сетки

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

Признаком переполнения является наличие переноса в знаковый разряд суммы при отсутствии переноса из знакового разряда (положительное переполнение) или наличие переноса из знакового разряда суммы при отсутствии переноса в знаковый разряд (отрицательное переполнение).

При положительном переполнении результат операции положительный, а при отрицательном переполнении – отрицательный.

Если и в знаковый, и из знакового разряда суммы есть переносы или этих переносов нет, то переполнение отсутствует.

Рассмотрим простейшие варианты с трехбитовыми словами. Диапазон чисел, которые они представляют, равен от -4 до +3. В рассматриваемых словах 1 бит знака и 2 информационных бита.

А). Алгебраическое суммирование без переноса.

25

2+1=3

010(2)

 

2(10) → 010(2) ПК

 

+

 

 

 

 

1(10) → 001(2) ПК

001(2)

 

0←

011(2)

ПК = 3(10)

 

0

 

 

 

 

 

 

 

 

перенос

 

Поскольку перенос в знаковый разряд или из знакового разряда суммы отсутствует, то переполнения нет. Результат – положительное число в ПК, равное 3.

Б). Алгебраическое суммирование с двумя переносами.

-3-1=-4

 

 

101(2)

 

 

-3(10)

→ 111(2)

ПК→ 101(2)

ДК

 

 

+

 

 

 

 

-1(10)

→ 101(2)

ПК→ 111(2)

ДК

111(2)

 

ДК=-4(10)

1←

100(2)

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

перенос

 

Имеются переносы в знаковый разряд и из знакового разряда вычисляемой суммы, поэтому переполнения нет. Результат – отрицательное число в ДК, равное -4.

В). Алгебраическое суммирование с одним переносом (положительное переполнение).

2+2=4

 

010(2)

 

2(10)

→ 010(2)

ПК

 

+

 

2(10)

→ 010(2)

ПК

010(2)

ДК = ?(10)

0←

100(2)

1перенос

При суммировании есть перенос в знаковый разряд суммы, а перенос из знакового разряда отсутствует, т. е. имеет место положительное переполнение, и результат операции положительный. Число 4 нельзя представить в прямом коде. Формальный результат равен -4.

Г). Алгебраическое суммирование с одним переносом (отрицательное переполнение).

-3-2=-5

 

 

101(2)

 

-3(10)

→ 111(2)

ПК→ 101(2)

ДК

 

+

 

-2(10)

→ 010(2)

ПК→ 110(2)

ДК

110(2)

 

1←

011(2)

ДК=?(10)

0перенос

26

Число -5 нельзя представить 3-битовой комбинацией. Формальный результат равен +3.

Из рассмотренных ранее примеров видно, что арифметические операции в дополнительном коде выполняются достаточно просто. Необходимо только не упускать из виду то, с какими числами происходит работа в данный момент – без знака или со знаком. Поскольку внешний вид обоих чисел одинаков, возможны ошибки.

6.7. Деление в дополнительном коде

Деление в дополнительном коде осуществляется по тем же правилам, что были описаны в п. 5.5 параграфа «Двоичная арифметика». Но метод деления «столбиком» для ЭВМ не пригоден. В процессоре используются более громоздкие методы деления, которые здесь не рассматриваются. Информацию о них можно найти в дополнительной литературе.

6.8. Перевод из дополнительного кода в десятичную систему

Перевод чисел из дополнительного кода в десятичную систему можно проводить по схеме, приведенной на рис. 5.

ДК

ПК

Десятичная система

счисления

 

 

Рис. 5. Схема перевода из ДК в десятичную систему

Однако существует прямой способ перевода числа из ДК в десятичную систему без использования промежуточного перевода в ПК.

Рассмотрим машинное слово произвольной длины N (рис. 6). При прямом способе перевода десятичное число со знаком формируется как сумма разрядов со своими весами и знаками (старший N-й разряд имеет отрицательный вес).

27

Номер разряда

N-1 N-2 N-3

. . .

1

0

 

знак

 

 

 

 

 

Вес разряда

-2N-1 2N-2 2N-3

. . .

21

20

Рис. 6. Машинное слово длиной N

Проиллюстрируем перевод чисел из ДК в десятичную систему примерами.

Пример: перевести число 1110 из ДК в десятичную систему.

1 1 1 0(2) (ДК) = -8+4+2 = -2(10) Вес → -23 22 21 20

Проверим правильность перевода, используя промежуточный перевод в

ПК:

1 110 число в ДК инверсия

1001

+1

1 010

число в ПК, т. е. 1010(2)

= -(0+21+0) = -2(10).

 

 

.

Пример: перевести число 101100 из ДК в десятичную систему.

101100(2) (ДК) = -25+23+22 = -32+8+4 = -20(10)

Проверим:

1 01100

число в ДК

инверсия

110011

+1

110100 число в ПК, т. е. 110100(2)=-(24+22)=-20(10).

6.9. Модифицированные коды

Эти коды отличаются от прямого, обратного и дополнительного кодов тем, что на изображение знака отводится два разряда: если число положительное – 00, если число отрицательное – 11. Такие коды оказались удобны (с точки зрения построения АЛУ) для выявления переполнения разрядной сетки. Если знаковые разряды результата принимают значения 00 и 11, то

28

переполнения разрядной сетки не было, а если 01 или 10 – то было переполнение. Вернемся к примерам в п. 6.6.

2 + 1 = 3

 

-3 - 1 = -4

 

+

 

 

0010

 

 

+

1101

В этих примерах

 

 

0001

 

 

1111

переполнения нет

 

 

 

0011

 

 

– знаковые –

1100

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

разряды

 

 

2 + 2 = 4

-3 - 2 = -5

 

+

0010

 

 

+

1101

В этих примерах

0010

 

 

1110

переполнение есть

 

 

 

0110

 

 

– знаковые –

1011

 

 

 

 

 

 

 

 

 

разряды

В предыдущих параграфах рассмотрены основные принципы выполнения арифметических операций, из которых видно, что все арифметические операции с двоичными числами могут быть сведены к операциям суммирования в прямом или дополнительном кодах, а также операциям сдвига двоичного числа вправо или влево. Реальные алгоритмы выполнения операций умножения и деления в современных ЭВМ достаточно громоздки и здесь не рассматриваются.

6.10. Арифметика повышенной точности

Проблема точности возникает, как правило, при работе с микропроцессорами, микроконтроллерами, мини- и микроЭВМ, имеющими небольшую длину машинного слова (1–2 байта). Рассмотрим микропроцессор, работающий со словами длины 1 байт. Этот формат позволяет представить целые числа в диапазоне от -128 до 127. Очевидно, что для решения большинства задач такого диапазона чисел недостаточно. Использование двух однобайтовых слов (16 бит) позволяет представить уже числа в диапазоне от -32768 до 32767. Это так называемые числа с двойной точностью. Иногда используются числа тройной точности (1 бит – знак и 23 бита для модуля числа). Это обеспечивает диапазон уже от -8388608 до 8388607, т. е. точность существенно повышается.

29

Однако при работе с арифметикой повышенной точности требуется больший объем памяти для хранения того же объема данных и более интенсивная работа процессора. Увеличение объема требуемой памяти достаточно очевидно. Рассмотрим очень коротко последовательность операций при сложении чисел с тройной точностью. Здесь уже недостаточно извлечь два слова из памяти, сформировать сумму в аккумуляторе и переслать результат в однобайтовую ячейку памяти. Сначала необходимо произвести обращение к младшему значащему байту каждого числа. После сложения результат записывается в память, а возможные при этом переносы подлежат временному хранению. Затем извлекаются средние по значимости байты, их складывают и к сумме добавляют биты переноса, полученные в результате предыдущей операции. Результат записывается в память на место, специально зарезервированное для среднего байта суммы. Со старшим байтом поступают аналогично.

Таким образом, при использовании арифметики тройной точности требуются в три раза большие объем памяти и время на операции сложения по сравнению с арифметикой одинарной точности. Кроме того, в случае возникновения прерываний необходимо временно хранить содержимое регистра переносов (то же самое для вычитания, умножения и деления).

7.Представление дробных чисел в ЭВМ

7.1.Числа с фиксированной запятой

ВЭВМ числа представлены в двоичной форме и под число отводится N разрядов. N-разрядное двоичное число называют машинным словом. Диапазон представления чисел можно расширить за счет использования машинных слов двойной и большей длины. Но увеличение длины слова не может разрешить всех проблем представления чисел. Рассмотрим, как обращаться с дробной частью числа, как представлять очень большие и очень малые числа.

30