Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
эвм лабы.doc
Скачиваний:
80
Добавлен:
30.03.2015
Размер:
801.28 Кб
Скачать

Лабораторная работа № 2

РАЗРАБОТКА И ОТЛАДКА МИКРОПРОГРАММЫ ВЫПОЛНЕНИЯ КОРОТКОЙ АРИФМЕТИЧЕСКОЙ ОПЕРАЦИИ ВЫЧИТАНИЯ

Рассмотрим вариант выполнения операции вычитания дробных двоичных чисел фиксированного формата, представленных в дополнительных кодах в системе с фиксированной запятой. На рис. 11 приведена ССА вычитания, в которой прямое вычитание заменяется суммированием при условии изменения знака уменьшаемого на обратный. В ССА используются следующие обозначения: ЗнA, ЗнB, ЗнC – знаковые биты операндов A, B и результата C.

Микропрограмма, отображающая рассмотренный алгоритм, представлена в табл. 4. В этой микропрограмме операнды А и В размещены соответственно в регистрах РОН0 и РОН1. Регистр РОН2 – задействован при проведении промежуточных преобразований и для размещения конечного результата операции при отсутствии переполнения. Регистр РР используется для хранения промежуточных значений. Регистр РРР используется для конечного сообщения об ошибках.

Таблица 4

Микропрограмма вычитания чисел

Адрес

Микроинструкция

Комментарий

000

РОН0 := ШИНвх

Ввод операнда A

001

РОН1 := ШИНвх

Ввод операнда B

002

РР := !РОН0 + П (П = 1)

Если ПАЛУ3, то 15 иначе 3 (Проверка A = 0)

003

РР := !РОН1 + П (П = 1)

Если ПАЛУ3. то 17 иначе 4 (Проверка B = 0)

004

РОН1 := !РОН1 + П (П = 1)

Формирование доп. кода операнда В

005

РР := РОН1 + П (П = 0)

Пересылка операнда В в РР

006

РР := РОН0 + РР + П (П = 0)

С = A  (B)

007

РОН2 := РР + П (П = 0)

Сохранение результата C

008

РР := РОН0 + П (П = 0)

Пересылка операнда А в РР

009

РР := РОН1 xor РР

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

010

РР := СЛЛ(РР + П) (П = 0)

Если !СДЛ1, то 11 иначе 19 (Проверка знаков операндов)

011

РР := РОН0 + П (П = 0)

Пересылка операнда А в РР

012

РР := РОН2 xor РР

Суммирование операнда A и результата C по mod2

013

РР := СЛЛ(РР + П) (П = 0)

Если !СДЛ1, то 19 иначе 14 (Проверка ЗнC = ЗнA)

014

РРР := !П (П = 0)

Идти к 20 (Сообщение "Переполнение")

015

РР := !РОН1 + П (П = 1)

Формирование доп. кода операнда B

016

РОН2 := РР + П (П = 0)

Идти к 19 (Сохранение результата C)

017

РР := РОН0 + П (П = 0)

Пересылка операнда A в РР

018

РОН2 := РР + П (П = 0)

Сохранение операнда A

019

РРР := !П (П = 1)

Сообщение "Переполнения нет"

020

ШИНвых := РРР + П (П = 0)

Вывод сообщения

021

ШИНвых := РОН2

Вывод С, "Конец"

Лабораторная работа № 3

РАЗРАБОТКА И ОТЛАДКА МИКРОПРОГРАММЫ ВЫПОЛЕНИЯ ДЛИННОЙ АРИФМЕТИЧЕСКОЙ ОПЕРАЦИИ УМНОЖЕНИЯ

Пример 1. В качестве длинной арифметической операции возьмём перемножение двух дробных двоичных чисел байтового формата, представленных в системе с фиксированной запятой в прямых кодах. Результат операции будем округлять путём отбрасывания младших разрядов, выдвигаемых за пределы разрядной сетки. Операцию будем выполнять по методу умножения младшими разрядами вперёд со сдвигом множителя и сумматора вправо. ССА вычитания приведена на рис. 12, где используются следующие обозначения: ЗнA, ЗнB и ЗнC – знаковые биты операндов A и B и результата C; СчЦ – счётчик циклов; Am, Bm и Cm – модули операндов и результата;Bm, Cm – логический правый сдвиг Bm, Cm на один разряд;СчЦ – логический левый сдвиг счетчика циклов на один разряд.

Микропрограмма выполнения операции представлена в табл. 5. Множимое А размещается в регистре РОН0, множитель В – в регистре РОН1. Сумма частичных произведений и конечный результат операции хранится в регистре РОН2, в регистре РОН3 хранится константа вида 10...0, в регистре РОН4 организован счётчик циклов, в регистре РОН5 хранится ЗнС. Регистр РР используется для хранения промежуточных значений.

Таблица 5

Микропрограмма умножения чисел

Адрес

Микроинструкция

Комментарий

1

2

3

000

РОН0 := ШИНвх

Ввод операнда А

001

РОН1 := ШИНвх

Ввод операнда В

002

РР := !РОН0 + П (П = 1)

Если ПАЛУ3, то 29 (Проверка A = 0)

003

РР := !РОН1 + П (П = 1)

Если ПАЛУ3, то 29 (Проверка B = 0)

004

РР := !П (П = 1)

РР = 00...0

005

РР := СЦП(РР + П) (П = 1)

РР = 10...0

006

РОН3 := РР + П (П = 0)

Формирование в константы 10...0

007

РР := РОН0 + П (П = 0)

Пересылка операнда А в РР

008

РР := РОН1 xor РР

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

009

РР := РОН3 and РР

Формирование ЗнС

010

РОН5 := РР + П (П = 0)

Сохранение ЗнС

011

РОН2 := !П (П = 1)

Сm = 00...0

012

РР := !П (П = 1)

РР = 00...0

013

РР := СЛЛ(РР + П) (П = 1)

РР = 0...10

014

РОН4 := РР + П (П = 0)

Установка СчЦ

015

РР := РОН3 + П (П = 0)

РР = 10...0

016

РОН0 := РОН0 and !РР

Сохранение Am

017

РР := РОН1 + П (П = 0)

Пересылка операнда B в РР

018

РР := СЛП(РР + П) (П = 0)

Если !СДП1, то 24 иначе 19 (Проверка значения b0)

019

РОН1 := РР + П (П = 0)

Сохранение операнда В

020

РР := РОН0 + П (П = 0)

Пересылка Am в РР

021

РР := РОН2 + РР + П (П = 0)

Сm = Сm  Am

022

РР := СЛП(РР + П) (П = 0)

Сдвиг Cm вправо

023

РОН2 := РР + П (П = 0)

Идти к 26 (Сохранение Cm)

024

РОН1 := РР + П (П = 0)

Сохранение операнда B

025

РР := РОН2 + П (П = 0)

Идти к 22 (Пересылка Cm в РР)

026

РР := РОН4 + П (П = 0)

Пересылка СчЦ в РР

Окончание табл. 5

1

2

3

027

РР := СЛЛ(РР + П) (П = 0)

Если !СДП1, то 28 иначе 30 (Проверка СчЦ = 0)

028

РОН4 := РР + П (П = 0)

Идти к 17 (Сохранение СчЦ)

029

РОН2 := !П (П = 0)

Идти к 32 (С = 0)

030

РР := РОН5 + П (П = 0)

Пересылка ЗнС в РР

031

РОН2 := РОН2 or РР

C = ЗнC  Cm

032

ШИНвых := РОН2

Вывод С, "Конец"

Пример 2. Одним из вариантов ускоренной реализации операции умножения является косвенное выполнение умножения с использованием таблицы квадратов чисел. Структурная схема алгоритма выполнения операции приведёна на рис. 13.

Алгоритм предусматривает для чисел в прямых кодах преобразование формулы (a  b)2 = a2  b2  2ab к виду ab = ((a  b)2 – a2 – b2)/2, что даёт возможность использовать операции суммирования, вычитания, табличного возведения в квадрат и логического сдвига вправо вместо прямого умножения.

Вструктурной схеме алгоритма используются следующие обозначения: ЗнA, ЗнB и ЗнC – знаковые биты операндов A и B и результата C; Am, Bm и Cm – модули операндов и результата;Cm – логический правый сдвиг Cm на один разряд.

В микропрограмме (табл. 6) предполагается размещение операндов А и В соответственно в регистрах РОН0 и РОН1. Остальные регистры распределены следующим образом: РОН2, РОН3 – для выполнения требуемых преобразований и размещения конечного результата; РОН4 – для хранения константы вида 10…0, РОН5 – для хранения ЗнC; РОН6, РОН7, РР используются для хранения промежуточных результатов.

Таблица квадратов занимает в табличном преобразователе (ТП) 2n ячеек разрядностью 2n каждая (n ≤ 16).

Таблица 6

Микропрограмма ускоренного умножения (метод квадратов)

Адрес

Микроинструкция

Комментарий

1

2

3

000

РОН0 := ШИНвх

Ввод операнда A

001

РОН1 := ШИНвх

Ввод операнда B

002

РР := !РОН0 + П (П = 1)

Если ПАЛУ3, то 4 иначе 3 (Проверка A = 0)

003

РР := !РОН1 + П (П = 1)

Если ПАЛУ3, то 4 иначе 6 (Проверка B = 0)

004

РОН2 := !П (П = 1)

Ch = 00...0 (Старшая часть C)

005

РОН3 := !П (П = 1)

Идти к 47 (Cl = 00…0 – младшая часть С)

006

РР := !П (П = 1)

РР = 00...0

007

РР := РР + П (П = 1)

РР = 00...1

008

РР := СЦП(РР + П) (П = 0)

РР = 10...0

009

РОН4 := РР + П (П = 0)

Формирование константы 10...0

010

РР := РОН0 + П (П = 0)

Пересылка операнда A в РР

011

РР := РОН1 xor РР

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

012

РР := РОН4 and РР

Формирование ЗнC

013

РОН5 := РР + П (П = 0)

Сохранение ЗнC

014

РР := РОН4 + П (П = 0)

РР = 10...0

015

РОН0 := РОН0 and !РР

Сохранение Am

Продолжение табл. 6

1

2

3

016

РР := РОН4 + П (П = 0)

РР = 10...0

017

РОН1 := РОН1 and !РР

Сохранение Bm

018

РР := РОН0 + П (П = 0)

Пересылка Аm в РР

019

РР := РОН1 + РР + П (П = 0)

РР = Am + Bm

020

ШИНвых := РР + П (П = 0)

Запрос (Am  Bm)2

021

РОН3 := ШИНвх

Ввод Cl = ((Am  Bm)2)ml (младшая часть)

022

РОН2 := ШИНвх

Ввод Ch = ((Am  Bm)2)mh (старшая часть)

023

ШИНвых := РОН0

Запрос (Am)2

024

РОН7 := ШИНвх

Ввод ((Am)2)ml (младшая часть)

025

РОН6 := ШИНвх

Ввод ((Am)2)mh (старшая часть)

026

РР := РОН7 + П (П = 0)

Пересылка ((Am)2)ml в РР

027

РОН3 := РОН3 – РР – 1 + П (П = 1)

Если ПАЛУ3, то 28 иначе 30 (Cl = Cl – ((Am)2)ml)

028

РР := РОН6 + П (П = 0)

Пересылка ((Am)2)mh в РР (вычитание без заёма из старшей части)

029

РОН2 := РОН2 – РР – 1 + П (П = 1)

Идти к 32

(Ch = Ch – ((Am)2)mh)

030

РР := РОН6 + П (П = 0)

Пересылка ((Am)2)mh в РР (вычитание с заёмом из старшей части)

031

РОН2 := РОН2 – РР – 1 + П (П = 0)

Ch = Ch – ((Am)2)mh

032

ШИНвых := РОН1

Запрос (Bm)2

033

РОН7 := ШИНвх

Ввод ((Bm)2)ml (младшая часть)

034

РОН6 := ШИНвх

Ввод ((Bm)2)mh (старшая часть)

035

РР := РОН7 + П (П=0)

Пересылка ((Bm)2)ml в РР

036

РОН3 := РОН3 – РР – 1 + П (П = 1)

Если ПАЛУ3, то 37 иначе 39 (Cl = Cl – ((Bm)2)ml)

037

РР := РОН6 + П (П = 0)

Пересылка ((Bm)2)mh в РР (вычитание без заёма из старшей части)

038

РОН2 := РОН2 – РР – 1 + П (П = 1)

Идти к 41

(Ch = Ch – ((Bm)2)mh)

Окончание табл. 6

1

2

3

039

РР := РОН6 + П (П = 0)

Пересылка ((Bm)2)mh в РР (вычитание c заёмом из старшей части)

040

РОН2 := РОН2 – РР – 1 + П (П = 0)

Ch = Ch – ((Bm)2)mh

041

РР := РОН2 + П (П = 0)

Пересылка в Ch в РР

042

РРР := РОН3

Пересылка в Cl в РРР

043

(РР, РРР) := СЛП(РР + П, РРР) (П = 0)

Сдвиг Cm вправо

044

РР := РОН5 or РР

Ch = ЗнС  Ch

045

РОН2 := РР + П (П = 0)

Сохранение Ch с учётом знака

046

РОН3 := РРР + П (П = 0)

Сохранение Cl

047

ШИНвых := РОН3

Вывод Cl

048

ШИНвых := РОН2

Вывод Сh, "Конец"

Пример 3. Рассмотрим выполнение операции умножения дробных чисел, представленных в системе с фиксированной запятой в прямых модифицированных кодах, программным ускоренным методом. Сущность метода раскрывается в табл. 7, где введены следующие обозначения: b1, b0 – два младших разряда модуля множителя Вm; Р – значение бита переноса из предыдущей пары разрядов множителя до операции; Р1 – значение бита переноса из предыдущей пары разрядов множителя после операции; Cm – текущее значение суммы частичных произведений; Аm – модуль множимого.

Таблица 7

Операции в цикле программного ускоренного умножения

b1

b0

P

Операция

Р1

0

0

0

Сдвиг Cm и Вm вправо на два разряда

0

0

1

0

Cm = Cm + Аm; Сдвиг Cm и Вm вправо на два разряда

0

1

0

0

Cm = Cm + 2Аm; Сдвиг Cm и Вm вправо на два разряда

0

1

1

0

Cm = Cm – Аm; Сдвиг Cm и Вm вправо на два разряда

1

0

0

1

Cm = Cm + Аm; Сдвиг Cm и Вm вправо на два разряда

0

0

1

1

Cm = Cm + 2Аm; Сдвиг Cm и Вm вправо на два разряда

0

1

0

1

Cm = Cm – Аm; Сдвиг Cm и Вm вправо на два разряда

1

1

1

1

Сдвиг Cm и Вm вправо на два разряда

1

Для реализации данного метода будем использовать модифицированный алгоритм выполнения операции представленный на рис. 14.

В этом алгоритме вместо анализа трёх битов b1, b0, P анализируются лишь два бита s1, s0 переменной S, полученной после операции S = (Вm  0003h) + Р. Это позволило существенно сократить длину текста микропрограммы по сравнению с прямым отображением метода.

В

2

2

2

ССА используются следующие обозначения: ЗнA, ЗнB и ЗнC – знаковые биты операндов A и B и результата C; Am, Bm и Cm – модули операндов и результата; СчЦ – счетчик циклов;s0, s1 – два младших разряда переменной S; P – значение бита переноса из предыдущей пары разрядов множителя до операции;Bm – логический правый сдвиг Bm на два разряда;Cm – арифметический правый сдвиг Cm на два разряда (подобный сдвиг результата операции Сm = Сm – Аm позволяет учесть тот факт, что отрицательный результат будет представлен в дополнительном коде); СчЦ – логический левый сдвиг СчЦ на два разряда.

В микропрограмме (табл. 8) предполагается размещение операндов А и В соответственно в регистрах РОН0 и РОН1. Остальные регистры распределены следующим образом: РОН2 – для выполнения требуемых преобразований и размещения конечного результата; РОН3 – для хранения константы вида 10…0, РОН4 – для организации СчЦ; РОН5 – для хранения ЗнC, РОН6 – для хранения значения 2A; РОН7 – для хранения значения P. Регистр РР используется для хранения промежуточных результатов.

Таблица 8

Микропрограмма умножения с анализом двух разрядов

Адрес

Микроинструкция

Комментарий

1

2

3

000

РОН0 := ШИНвх

Ввод операнда A

001

РОН1 := ШИНвх

Ввод операнда B

002

РР := !РОН0 + П (П = 1)

Если ПАЛУ3, то 4 иначе 3 (Проверка A = 0)

003

РР := !РОН1 + П (П = 1)

Если ПАЛУ3, то 4 иначе 5 (Проверка B = 0)

004

РОН2 := !П (П = 1)

Идти к 63 (C = 0)

005

РР := !П (П = 1)

РР = 00...0

006

РР := СЦП(РР + П) (П = 1)

РР = 10...0

007

РОН3 := РР + П (П = 0)

Формирование константы 10...0

008

РОН7 := !П (П = 1)

Установка начального значения переноса (P = 0)

009

РР := РОН0 + П (П = 0)

Пересылка операнда A в РР

010

РР := РОН1 xor РР

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

Продолжение табл. 8

1

2

3

011

РР := РОН3 and РР

Формирование ЗнС

012

РОН5 := РР + П (П = 0)

Сохранение ЗнC

013

РОН2 := !П (П = 1)

Cm = 00...0

014

РР := !П (П = 1)

РР = 00...0

015

РР := СЛЛ(РР + П) (П = 1)

РР = 0...10

016

РР := СЛЛ(РР + П) (П = 0)

РР = 0...100

017

РОН4 := РР + П (П = 0)

Установка СчЦ

018

РР := РОН3 + П (П = 0)

РР = 10...0

019

РР := РОН0 and !РР

Формирование Am

020

РОН0 := РР + П (П = 0)

Сохранение Am

021

РР := СЛЛ(РР + П) (П = 0)

Формирование 2A

022

РОН6 := РР + П (П = 0)

Сохранение 2A

023

РР := РОН3 + П (П = 0)

РР = 10...0

024

РОН1 := РОН1 and !РР

Сохранение Bm

025

РР := !П (П = 1)

РР = 00...0

026

РР := РР + П (П = 1)

РР = 00...1

027

РР := СЛЛ(РР + П) (П = 0)

РР = 00...10

028

РР := РР + П (П = 1)

РР = 00...11

029

РР := РОН1 and РР

Формирование b1, b0

030

РР := РОН7 + РР + П (П = 0)

b1, b0  P

031

РР := СЛП(РР + П) (П = 0)

Если !СДП1, то 32 иначе 48 (Проверка значения s0)

032

РР := СЛП(РР + П) (П = 0)

Если !СДП1, то 33 иначе 45 (Проверка значения s1)

033

РР := РОН2 + П (П = 0)

Пересылка Cm в РР

034

РР: = САП(РР + П) (П=0)

Сдвиг Cm вправо

035

РР: = САП(РР + П) (П=0)

Сдвиг Cm вправо

036

РОН2 := РР + П (П = 0)

Сохранение Cm

037

РР := РОН1 + П (П = 0)

Пересылка Bm в РР

038

РР := СЛП(РР + П) (П = 0)

Сдвиг Bm вправо

039

РР := СЛП(РР + П) (П = 0)

Сдвиг Bm вправо

040

РОН1 := РР + П (П = 0)

Сохранение Bm

041

РР := РОН4 + П (П = 0)

Пересылка СчЦ в РР

042

РР := СЛЛ(РР + П) (П = 0)

Сдвиг СчЦ влево

043

РР := СЛЛ(РР + П) (П = 0)

Если !СДЛ1, то 44 иначе 56 (Проверка СчЦ = 0)

044

РОН4 := РР + П (П = 0)

Идти к 25 (Сохранение СчЦ)

045

РР := РОН2 + П (П = 0)

Пересылка Cm в РР (s1 = 1, s0 = 0)

Окончание табл. 8

1

2

3

046

РР := РОН6 + РР + П (П = 0)

Cm = Cm + 2Am

047

РОН7 := !П (П = 1)

Идти к 34 (P = 0)

048

РР := СЛП(РР + П) (П = 0)

Если !СДП1, то 49 иначе 52 (Проверка значения s1)

049

РР := РОН2 + П (П = 0)

Пересылка Cm в РР (s1 = 0, s0 = 1)

050

РР := РОН0 + РР + П (П = 0)

Cm = Cm  Am

051

РОН7 := !П (П = 1)

Идти к 34 (Р = 0)

052

РР := РОН2 + П (П = 0)

Пересылка Cm в РР (s1 = 1, s0 = 1)

053

РР := РР – РОН0 – 1 + П (П = 1)

Cm = Cm  Am

054

РОН7 := !П (П = 1)

РОН7 = 00…0

055

РОН7 := РОН7 + П (П = 1)

Идти к 34 (P = 1)

056

РР := РОН7 + П (П = 0)

Пересылка переноса (Р) в РР

057

РР := СЛП(РР + П) (П = 0)

Если !СДП1, то 61 иначе 58 (Проверка значения P)

058

РР := РОН2 + П (П = 0)

Пересылка Cm в РР

059

РР := РОН0 + РР + П (П = 0)

Cm = Cm  Am

060

РОН2 := РР + П (П = 0)

Сохранение Cm

061

РР := РОН5 + П (П = 0)

Пересылка ЗнC в РР

062

РОН2 := РОН2 or РР

С = ЗнC  Cm

063

ШИНвых := РОН2

Вывод С, "Конец"