Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория автоматов / 2008-03-21-01-47-Елена- лекций по ТА.doc
Скачиваний:
76
Добавлен:
01.05.2014
Размер:
1 Мб
Скачать
☆

Умножение двоичных чисел с фиксированной запятой на дсок, схема 1

В этом случае рассуждения совпадают со схемой предыдущего раздела. Однако, так как правило образования обратного кода отрицательного числа имеет вид [B]o=p + B - 1*2-n, схема Горнера принимает следующий вид:

[C]o = [A]o*(b12-1+b22-2+…+bn2-n-1+1*2-n).

(4)

Подставляя (4) в произведение, получим

[C]o= b1 ([A]o2-1)+b2([A]o2-2) +…+ bn([A]o2-n) - SgB[A]o+ SgB*2-n.

(5)

Из (5) следует, что при умножении на отрицательный множитель на ДСОК выполняется две коррекции: первая коррекция (– SgB*[A]o) выполняется перед входом в цикл, вторая –

(+SgB*2-n) –после выхода из цикла.

Пример 2. Пусть А=-0.1101, В=-0.1011. Тогда [A]o = 1.0010, [B]o = 1.0100. Процедуру умножения и результат представим в виде таблицы 2.

Таблица 2 Умножение двоичных чисел с фиксированной запятой на ДСОК, схема 1

СМ

РгА

РгВ

СТ

Комментарии

1.1111 1111

+0.1101 0000

0.1101 0000

+ 1.1100 1011

0.1001 1011

+ 1

0.1001 1100

+1.1111 0010

0.1000 1110

+ 1

0.1000 1111

1.0010 1111

1.0100

4

Такт 1. СМ:=0, РгА:=[A]o|1111, РгВ:= [B]o, СТ:=4.

Такт 2. Проверка знака В. SgB=1, следовательно выполняется первая коррекция: СМ:=СМ+РгА.

1.1001 0111

01001

Такт 3. РгА:= R(1)РгА, РгВ:=СдвЦ L(1)РгВ, (так как после выхода из цикла потребуется выполнение второй коррекции (см. (5)), для сохранения знака применяем циклический сдвиг РгВ). При этом старший разряд переписывается на место младшего разряда этого же регистра.

1.1100 1011

10010

3

Такт 4. Выполняется проверка РгВ[0]=1. Условие не выполняется. Поэтому такт подсуммирования пропускается, выполняются сдвиги и декремент счетчика: РгА:= R(1)РгА, РгВ:=L(1)РгВ, СТ:=СТ-1.

Такт 5. Проверка: СТ=0. Условие не выполняется. Выполняется проверка РгВ[0]=1. Условие выполняется. СМ:=СМ+РгА.

1.1110 0101

00101

2

Такт 6. РгА:= R(1)РгА, РгВ:=СдвЦ L(1)РгВ, СТ:=СТ-1.

1.1111 0010

01010

1

Такт 7. Выполняется проверка РгВ[0]=1. Условие не выполняется. Поэтому такт подсуммирования пропускается, выполняются сдвиги и декремент счетчика: РгА:= R(1)РгА,

РгВ:=СдвЦ L(1)РгВ, СТ:=СТ-1.

0

Такт 8. Такт 7. Выполняется проверка РгВ[0]=1. Условие не выполняется. Поэтому такт подсуммирования пропускается, выполняется декремент счетчика: СТ:=СТ-1.

1.0100

Такт 9. Проверка: СТ=0. Условие выполняется. Выход из цикла. РгВ:= СдвЦ L(1)РгВ,

Такт 10. Выполняется проверка: РгВ(0)=1. Условие выполняется. Производится вторая коррекция. СМ:= СМ+РгА. Конец.

Результат получился автоматически с правильным знаком.