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

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

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

Рассмотрим выполнение операции деления дробных чисел без восстановления остатка, представленных в системе с фиксированной запятой в прямых кодах. Алгоритм выполнения операции приведен на рис. 15, а соответствующая микропрограмма – в табл. 9.

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

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

Таблица 9

Микропрограмма деления без восстановления остатка

Адрес

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

Комментарий

1

2

3

000

РОН0 := ШИНвх

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

001

РОН1 := ШИНвх

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

002

РР := !П (П=1)

РР = 00...0

003

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

РР = 10...0

004

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

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

005

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

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

006

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

Идти к 49 (Сообщение "Ошибка")

007

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

РР = 01..1

008

РР := РОН0 and РР

Выделение Am

009

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

Сохранение Am

010

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

РР = 01...1

011

РР := РОН1 and РР

Выделение Bm

012

РР := РОН5  РР  1 + П (П = 1)

РР = Am  Bm

013

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

Если !СДЛ1, то 6 иначе 14 (Проверка A < B)

014

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

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

015

РР := РОН1 xor РР

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

016

РР := РОН3 and РР

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

017

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

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

018

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

РР = 01...1

019

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

Сохранение Bm

020

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

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

021

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

Ост = Am  Bm

022

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

Сохранение Ост

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

1

2

3

023

РР := !П (П = 1)

РР = 00...0

024

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

РР = 0...10

025

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

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

026

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

Пересылка Ост в РР

027

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

Если !СДЛ1, то 35 иначе 28 (Проверка ЗнОст)

028

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

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

029

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

Сдвиг Cm влево

030

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

Сохранение Cm

031

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

Пересылка Ост в РР

032

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

Сдвиг Ост влево

033

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

РР = Ост  Bm

034

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

Идти к 43 (Сохранение Ост)

035

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

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

036

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

Cm = Cm  1

037

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

Сдвиг Cm влево

038

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

Сохранение Cm

039

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

Пересылка Ост в РР

040

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

Сдвиг Ост влево

041

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

РР = Ост  Bm

042

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

Сохранение Ост

043

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

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

044

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

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

045

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

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

046

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

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

047

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

С = ЗнC  Cm

048

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

Сообщение "Ошибки нет"

049

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

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

050

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

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