Скачиваний:
89
Добавлен:
10.05.2014
Размер:
11.4 Mб
Скачать

5. Умножение чисел с плавающей запятой.

(ОТК, лекция 20.10.2003)

Разрядную сетку компьютера можно условно представить следующим образом:

Мантисса нормализована, если находится в диапазоне: 0,1 M x <1 (т.е. после запятой

должна быть 1).

В основе действий над числами с плавающей запятой лежат действия над числами с фиксированной запятой. Действия выполняются в несколько этапов. При этом порядки заданы в обратном коде, а мантиссы - в прямом.

Умножение чисел с плавающей запятой:

Предполагаем, что мантисса нормализована (х1 всегда =1). Мx - в обратном коде, х - в прямом.

1-е число: õ = [2mõ Sõ ],[õ1, õ2,..., õN]

 

 

цифровая

 

 

часть

2-е число: y = 2my S

,[y1, y2,..., yN]

 

y

 

 

 

цифровая

 

 

часть

Результат: z = x y = [2mz Sz ],[z1, z2,..., zN]

цифровая

часть

Порядок выполнения операции умножения:

1.Знак произведения находится так же, как знак произведения при умножении чисел с фиксированной запятой: Sz = Sx S y

2.Порядок произведения находится алгебраическим суммированием порядков множимого и множителя: mz = mx + my

3.Мантисса находится по правилу умножения чисел с фиксированной запятой. Для получения произведения необходимо выполнять две микрооперации: сдвиг и суммирование чисел в позиционной системе счисления. Два основных алгоритма (всего алгоритмов умножения ~50 шт.):

3.1.Алгоритм умножения со старших разрядов множителя

3.1.1.Множимое сдвигаем вправо на 1 разряд

3.1.2.Анализируем цифру множителя. Если она 0, то частное произведение не суммируется, а если 1, то частное произведение доставляется к общему результату.

3.1.3.Последовательность операций повторяется по всем знакам числа.

3.2.Алгоритм умножения с младших разрядов множителя. Достоинства: Для получения произведения с точностью не ниже 2n необходимо иметь разрядную сетку только в n-разрядов, имеет преимущество по точности. Недостаток - чтобы использовать этот алгоритм, надо сначала перевести в прямой код.

3.2.1.Анализируются младшие цифры множителя. Если она =1, то множимое участвует в формировании частичного произведения.

3.2.2.Полученное частичное произведение сдвигается вправо на 1 разряд.

3.2.3.Последовательность операций повторяется до старшего разряда.

4.Нормализация мантиссы. После вычисления мантиссы, возможны следующие

случаи:

1

2

| M

x

|<1 ,

1

2

| M

y

|<1, а для результата

1

4

| M

z

|<1 1

4

| M

z

|< 1

2

.

 

 

 

 

 

 

 

 

 

 

 

 

 

В последнем случае необходима нормализация мантиссы - влево, максимум на 1 разряд.

4.1.В этом случае мантисса сдвигается влево на 1 разряд, что соответствует умножению числа на 2 в 1-й степени. Чтобы число увеличилось в 2 раза, надо из порядка результата вычисть единицу.

4.2.При умножении. В силу ограниченности разрядной сетки можно получить число, которое не может быть в ней представлено. Это соответствует случаю получения машинной бесконечности. При этом вырабатывается специальный признак (или флаг), по которому дальнейшие вычисления прекращаются.

4.3.При умножении двух чисел можно получить минимальное число, которое так же не может быть представлено в разрядной сетке. Это соответствует числу, когда получаемое число должно быть интерпретировано как ноль. Вырабатывается признак, по которому программист (пользователь) сам принимает решение.

Пример: (пример из к/р)

Перемножить два числа в прямых кодах со старших разрядов множителя (в 2 -ичной

системе): (-15)(10)х12(10)

-15(10)=-1111(2) 12(10)=1100(2)

[x]ÏÊ

=1.1111

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[y]ÏÊ

= 0.1 1 0 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y1y2 y3y4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Действие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Общий

Добавка

Частичные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

результат

 

суммы

 

Берём модуль множимого |х|=

0.1111

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

Сдвигаем вправо на 1 разряд

0.0111

1=

 

x

 

21

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

т.к. цифра множителя =1,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

частичное произведение

 

 

 

x

 

 

21 y1

 

x

 

 

 

21 y1

 

 

 

добавляется к общему

0.0111

1=

 

 

 

 

 

 

 

0.0111|1000

 

 

результату (y1=1=> результат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не обнулиться)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.0111|1000

2

Сдвигаем вправо на 1 разряд.

0.0011

11=

 

x

 

 

22

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

т.к. цифра множителя =1,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

частичное произведение

 

 

 

 

x

 

 

22 y2

 

x

 

 

22 y2

0.0011|1100

 

 

добавляется к общему

0.0011

11=

 

 

 

 

 

 

 

результату (y2=1=> результат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.1011|0100

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не обнулиться)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

Сдвигаем вправо на 1 разряд.

0.0001

111=

 

 

 

x

 

 

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

т.к. цифра множителя =1,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

частичное произведение

 

 

 

 

 

 

 

x

 

23 y3

 

x

 

23 y3

 

 

 

добавляется к общему

0.0000

000=

 

 

 

 

 

 

0.0000|0000

 

 

результату (y3=0=> результат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обнулиться)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.1011|0100

 

 

 

Действие

 

 

 

 

 

 

 

 

 

 

 

 

 

Общий

Добавка

Частичные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

результат

 

суммы

 

4

Сдвигаем вправо на 1 разряд

 

0.0000

1111=

 

x

 

 

24

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

т.к. цифра множителя =1,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

частичное произведение

 

 

 

 

x

 

 

24

y4

 

x

 

2

4

y4

0.0000|0000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

добавляется к общему

 

0.0000

0000=

 

 

 

 

 

 

 

 

результату (y4=0=> результат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.1011|0100

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не обнулиться)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Итого:

0.1011|0100

 

Знак произведения находится независимо от цифровой части; и определяется на основе

 

операции сложения по модулю 2:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SignZ = Singnx Signy

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица истинности:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x1

 

x2

x1 x2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

1

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

0

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SignZ =1 0 =1, то есть знак результата - отрицательный.

 

 

 

 

 

Ответ: [Z ]ÏÊ

=1.10110100

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В десятичной системе:

= −(11 161 + 4 160 )(10)

= −(11 16 + 4)(10) = −(176 + 4)(10)

= −(180)(10)

 

Z = −10110100 = −B4(16)

 

 

 

B

4

(2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ответ:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[Z ]ÏÊ

=1.10110100

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z = −10110100(2) = −B4(16)

= −180(10)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6. Форматы команд.

(ОТК, лекция 01.12.2003; )

Правила выборки операндов определяется режимом адресации.

Форматы команд:

1.Четырёхадресная

2.Трёхадресная

3.Двухадресная

4.Одноадресная

5.Безадресная

1)Четырёхадресная команда

* - обобщённая операция (логическая или арифметическая)

A3 - ячейка оперативной памяти или регистр общего назначения

КОП A1 A2 A3 A4

(A1) (A2)A3 , где A4 - адрес следующей выполняемой команды. Принцип явной

адресации на сегодня не используется.

По адресу A1 выбирается первый операнд, по A2 - второй. А3 - используется для записи результата

2) Трёхадресная команда

(A1) (A2)A3

КОП A1 A2 A3

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

Работа процессора при выполнении команды:

1)считывание команды в устройство управления и её расшифровка;

2)По адресам A1 и A2 операнды считываются из ячеек ОП или РОН и загружаются в рабочие регистры АЛУ.

3)По команде из устройств управления выполняется операция

4)Результат из рабочего регистра АЛУ заносится в оперативную память или в один из регистров общего назначения по адресу A3.

3) Двухадресная команда

Начиная с машин III-го поколения - система команд двухадресная.

КОП A1 A2

В двухадресной команде третий адрес берётся по умолчанию (начиная с машин III поколения - система команд двухадресная).

4) Одноадресная команда

Пример: инкремент / декремент i=i+1; i=i-1

КОП A1

Для одноадресной команды два поля берутся по умолчанию и записываются в некоторый регистр результата (?):

Пример: a=b+c

Требуется только две дополнительных команды, в то время как система команд стала короче, и, следовательно, программа выполняется быстрее.

5) Безадресная система команд

КОП * (регистр центрального процессора)

КОП

Соседние файлы в папке docs