Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
44
Добавлен:
02.05.2014
Размер:
449.02 Кб
Скачать

4. Операции сложения чисел в прямом, обратном и дополнительном кодах с фиксированной запятой

Для выполнения арифметических операций над двоичными числами в ЭВМ могут использоваться прямой, обратный или дополнительный код. Прямой код Хпр числа Х = хm xm-1... x0 x-1 x-n с учетом знака S можно опре­делить из выражения

[Х]пр = S.X.

Если в ЭВМ модуль числа представлен с фиксированной запятой, то Хпр или целое, или дробное. Так, число Х = 1101101,11 в прямом коде может иметь два вида: как целое или дробное (с масштабным коэффициентом 2+7) в разрядной сетке 1 байт 0.1101101 или 1.1101101 (число отрицательное). В зависимости от масштабного коэффициента и разрядности сетки часть разрядов мантиссы любого числа может теряться. Нуль в прямом коде допускается двух видов: 0.0...0 или 1.0...0. В прямом коде легко выполнять операции ввода чисел, умножения и сложения с одинаковыми знаками сла­гаемых. Однако операции вычитание и деление без изменения схемы сумматора проще реализуются с использованием обратных [Х]0 или до­полнительных [X]Д кодов. Обратный и дополнительный коды можно получить по формулам

пр

пр

и ,

где m и n -номера позиций старшего и младшего разряда. В зависимости от положения запятой, если числа целые, то n = 0, а если дробные, то m = 0.

Из формул получения [Х]0 и [Х]Д видно, что прямой, обратный и дополни­тельный коды положительного числа совпадают. Обратный код отрицательного числа можно получить путем инверсии разрядов ман­тиссы

так как равенство подтверждается сложением

.

Отсюда справедливо также равенство

пр

.

Если к обратному коду отрицательного числа прибавить единицу в младший разряд (+2-n), получим дополнительный код

Д

.

Справедливо также равенство

Д

Д

пр

.

Представим числа Х1 = +125(10), Х2 = -5,5(10) с фиксированной запятой после младшего разряда в разрядной сетке 1 байт в двоичной СС в прямом, обратном и дополнительном кодах:

пр

Д

;

пр

.

Д

.

Сложим числа Х1 иХ2 в 2СС с фиксированной запятой в прямом (а), обрат­ном (б) и дополнительном (в) кодах:

а)

+

.1111101

б)

+

0.1111101

в)

+

0.1111101

.0000101

1.1111010

1.1111011

1

.0000010

0.1110111

1

0.1111000

1

0.1111000

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

Недостатком обратного кода является двоякое представление нуля 0.0... 0 и 1.1... 1, а также увеличение времени сложения за счет распространения циклического переноса. В дополнительном коде нуль представлен только 0.0... 0, отсутствует циклический перенос и корректировка резуль­тата сложения заключается в простом отбрасы­вании переноса из знакового разряда. Однако для получения дополнительного кода отрицательного числа требуется не только ин­вертирование разрядов числа, которое заме­няется в АЛУ передачей с обратных выходов триггеров регистра, но и прибавление единицы к младшему разряду в сумматоре. Недостатком сложения в обратном и дополнительном кодах является трудность опреде­ления переполне­ния разрядной сетки (ПП), которое определяется вычислением функции

ПП,

где x3,y3,z3 - знаки слагаемых и результата соответственно. Знаки слагаемых x3,y3 могут стираться после выполнения операции в одно- или двухадресных командах. Для устранения этого недостатка при сложении чисел с одинаковыми знаками могут использоваться модифицированные обратный и дополнительный коды. В них для представления числа используют два одинаковых знаковых раз­ряда 00.(+) или 11.(-). Если после сложения по тем же правилам в знаковых разрядах окажется 00. или 11., то результат правильный, соответственно, положительный или отрицательный, а если 10. или 01., то необходимо фиксировать переполнение разрядной сетки. Эти результаты при сложе­нии в модифицированном дополнительном коде можно пояснить примерами

00.111110

11.110011

00.000111

00.100010

01.000101

(ПП)

1

00.010101

(нет ПП).

Заметим, что при сложении чисел в обратном и дополнительном ко­дах с разными знаками переполнения не происходит.

4.1. Операция умножения чисел с фиксированной запятой в прямых кодах

Ч

пр

пр

пр

пр

аще всего для исключения потери старших разрядов из-за переполне­ния разрядной сетки умножение выполняют в прямых кодах с числами, представленными с фиксированной запятой перед старшим разрядом (с отрицательными индексами). Для чисел [Х]пр=x3.x-1,...,x-n, [Y]пр=y3.y-1, ...,y-n([Х]пр , [Y]пр <1) требуется получить произведение

[

пр

пр

пр

Z]пр= [Х]п р[Y]пр=z3.z-1,z-2, ...z-n.

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

Операция выполняется в два этапа. Отдельно определяется знак произведения z3 с учетом знаков сомножителей x3 и y3 в соответствии с выражением:

z3 = x3 y3.

Затем определяется цифровая часть произведения мантисс сомножителей. С этой целью процесс умножения можно представить в следующем виде

Z=ХY=Х(y12-1+y2 2-2+ ...+y(n-1)2-n+1+y(n) 2-n) =

(1).

= Х2-1 y1+Х 2-2y2 + ... +Х 2-n+1 y(n-1)+X 2-ny(n).

Это выражение после преобразования можно представить в виде:

Z= ((...(( 0 +Xy(n)) 2-1 +Xy(n-1)) 2-1 +... +Xy2) 2-1 +Xy1) 2-1

(2).

Полученные выражения (1, 2) являются аналитическими записями двух основных способов умножения: со старших разрядов множителя (1) и младших разрядов множителя (2).

Согласно выражению (2) при умножении с младших разрядов должна выполняться следующая последовательность микроопераций:

- анализируется младшая цифра множителя. Если yn= 1, то множимое Х участвует в формировании цифровой части произведения; если yn = 0, то Х не участвует в формировании произведения;

- полученное первое частичное произведение, равное 0+Xyn, сдвигается на один разряд вправо, то есть умножается на 2-1. Указанная последовательность действий справедлива при умножении на все последующие разряды. Так, при умножении на разряд y(n-1):

- анализируется цифра множителя yn-1. Если yn-1= 1, то множимое прибавляется к сдвинутому первому частичному произведению, т.е. A2 = (0 + Xyn) 2-1 + X1. Если yn-1=0, то множимое не участвует в формировании произведения, т.е.

A2 = (0 + Xyn)·2-1 + X0.

Полученное второе частичное произведение сдвигается на один разряд вправо. Указанную процедуру умножения можно описать следующей рекуррентной формулой:

A(i) = A(i-1) · 2-1 + y(n+1-i) · Х

(3).

Для выполнения умножения необходимо повторить n тактов (i=1,2,..,n) в соответствии с формулой (3) и в заключение осуществить последний n-й сдвиг A(n)2-1 = XY = Z. Отметим, что при перемножении n-разрядных чисел получается 2n-разрядное произведение (n старших разрядов и n младших). При этом получение только n старших разрядов произведения или всех 2n разрядов обеспечивается суммированием в n-разрядном сумматоре. Время умножения равно:

Тх = (tSM+ tСД) · n, где tSM - время суммирования; tСД - время сдвига.

Согласно выражению (1) умножение со старших разрядов множителя должно выполняться в следующей последовательности:

- множимое сдвигается на 1 разряд вправо, т.е. X·2-1;

- анализируется старшая цифра множителя y1. Если y1 = 1, то X·2-1 участвует в формировании произведения, при y1 = 0, X·2-1 - не участвует в формировании произведения.

Выполнение такой последовательности соответствует умножению на старший разряд множителя и справедливо при умножении на все последующие разряды. Так, при умножении на второй разряд:

- производится второй сдвиг множимого, т.е. (X·2-1)·2-1;

- анализируется значение y2 и осуществляется или не осуществляется передача X·2-1 на суммирование.

Процесс умножения повторяется до просмотра всех y(i), i = 1,2,...,n.

Соседние файлы в папке Дубинин Н.М. Организация ЭВМ и Систем