Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
28-12-2014_12-52-57 / пповсрв.pdf
Скачиваний:
77
Добавлен:
11.05.2015
Размер:
1.03 Mб
Скачать

 

dst

a, CHI

;1w

 

nop

AROUND, anov

;1w

 

bcd

;1w

 

sftl

a, -1, b

 

ld

CEXP, a

;1w A = CEXP

; переполнение при сложении

;

OVFLOW

dst

b, CHI

 

bd

AROUND

;2w

NORMAL

add

#1, a

dld

CHI, b

 

 

exp

b

;

 

stl

a, CSIGN

 

ldm

T, a

 

 

neg

a

 

 

norm

b

 

 

bd

AROUND

;1w

 

dst

b, CHI

AROUND

add

CEXP, a

;1w

stl

a, CEXP

; новый порядок

;

rpt

#3

 

;portw *ar2+, PA0

 

ret

 

80h

; Выровнять на страницу

ASIGN

.align

.word

0

; 1-й операнд

AEXP

.word

0

; двойное слово

AHI

.word

5555h

ALO

.word

2222h

; с четного адреса

BSIGN

.word

-1

; 2-й операнд

СLO

.

.

.

; с четного адреса

.word

0

TEMP

.word

0

; Конец программы

 

.end

 

 

 

4.3.

Операция умножения с плавающей запятой

Основу алгоритма операции умножения составляет по парное перемножение старших и младших частей мантисс сомножителей с последующим их суммированием с соответствующим сдвигом и суммированием порядков.

Тогда алгоритм умножения чисел f1 = m1 · be1 и f2 = m2 · be2 может быть за-

писан следующим образом:

f1 · f2 = m1 · m2 · b(e1+e2)

Процесс перемножения мантисс можно проиллюстрировать следующим образом (рис.4.2):

Лекции по ППО ВС РВ © Клюс В.Б.

87

x

AHI

 

AL

 

 

O

 

 

 

 

 

 

 

 

BHI

 

BL

 

 

 

O

 

 

 

 

ALO x BLO

+

+

AHI x BLO

+

BHI x ALO

AHI x BHI

CHI CL

O

Рисунок4.2. Алгоритм умножения мантисс чисел с плавающей запятой

При этом, учитывая что первое произведение выходит за пределы 32-х старших разрядов и практически не влияет на результат, его можно не вычислять.

Схема алгоритма умножения двух чисел с плавающей запятой А и В с формированием результата в С приведена на рис.4.3.

Учитывая что значения сомножителей равны и B = BHI + BLO·2-15, результат умножения формируется следующим образом A·B = AHI·BHI + (AHI·BLO+ALO·BHI)·2-15 + ALO·BLO·2-30.

Пример программы с прямой адресацией вычисления произведения двух чисел с ПЗ приведен ниже.

Лекции по ППО ВС РВ © Клюс В.Б.

88

mА

mВ

умножение мантисс mС = mА · mВ

еА еВ

сложение порядков еС = еА + еВ

проверка на специальные случаи mС

=0 нормализовано ненормализовано

еС = 0

сдвиг mС влево на 1 бит

 

 

 

еС = еС 1

 

 

 

 

 

 

 

 

 

 

 

округление или усечение результата

 

 

 

 

 

 

 

 

 

 

 

 

проверка mС на переполнение (при округление)

 

 

 

 

 

 

 

нет

да

 

 

 

 

 

 

 

 

сдвиг mС вправо на 1 бит

 

 

 

 

 

еС = еС +1

 

проверка на специальные случаи еС

переполнение или

в заданных

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

пределах

установка специального значения результата

С=А·В

Рисунок4.3. Схема алгоритма умножения двух чисел с плавающей запятой

;ППО ВС РВ Умножение с ПЗ

;(c) Клюс В.Б. 22/11/04 21:00

.mmregs

;

Определение регистров

 

.def

_c_int00

;

Метка начала программы

 

_c_int00:

#ASIGN, DP

;

Текущая страница

 

ld

 

stm

#ASIGN, SP

;

Указатель стека

 

st

#1, ONE

;

Умножение дробных чисел

 

ssbx

FRCT

 

 

Лекции по ППО ВС РВ © Клюс В.Б.

89

 

ssbx

SXM

; Расширение знака

 

rsbx

OVM

; Запрет коррек.переполнения

 

call

MULFLT

 

MULFLT

nop

#ASIGN, ar2

; Адрес 1-го операнда

stm

;

stm

#AHI, ar3

; Адрес AHI

rpt

#6

 

;portr PA0, *ar2+

;

portr

PA0, *ar2

;

ar2 -> BLO

UP

ld

AEXP, a

;

Суммирование порядков

 

add

BEXP, a

;

 

 

stl

a, CEXP

;

T = BLO

 

ld

*ar2-,

T

 

mpyu

*ar3+,

a

;

a = BLO * AHI

 

macsu

*ar3-,

*ar2, a ;

a + BHI * ALO

 

sftl

a, -15

 

;

с 0 (-16 без 0)

 

macsu

*ar3, *ar2+, a ;

a + BHI * AHI

 

sftc

a

 

 

 

 

bcd

OK, aeq

;1w

 

dst

a, CHI

 

 

mar

*ar2+

 

;1w

 

bcd

SIGN, tc

;1w

 

ld

CEXP, 16, a

 

or

ASIGN,

a

;1w

SIGN

sub

ONE, 16, a

 

 

xor

BSIGN,

a

;

CEXP | CSIGN

OK

dst

a, CEXP

;

rpt

#3

 

 

 

;portw *ar2+, PA0 ret

ASIGN

.align

80h

; Выровнять на страницу

.word

0

; 1-й операнд

AEXP

.word

0

; двойное слово

AHI

.word

5555h

ALO

.word

2222h

; с четного адреса

BSIGN

.word

-1

; 2-й операнд

CLO

.

.

.

; с четного адреса

.word

0

ONE

.word

0

; Конец программы

 

.end

 

 

Лекции по ППО ВС РВ © Клюс В.Б.

90

Соседние файлы в папке 28-12-2014_12-52-57