Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx53 / ПЗ (2).docx
Скачиваний:
52
Добавлен:
01.08.2013
Размер:
293.08 Кб
Скачать

5 Разработка алгоритма командного цикла вычислительного устройства

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

– выборку команды;

– формирование адреса следующей команды;

– декодирование команды;

– вычисление адресов операндов;

– выборку операндов;

– исполнение операции;

– запись результата.

На основе содержательной таблицы 3 команд проектируем блок – схему обобщенного алгоритма командного цикла представленную на рисунке 4.

Рисунок 4 – Блок-схема обобщенного алгоритма командного цикла

5.1 Алгоритм выборки команды

Алгоритм выборки команды, показанный на рисунке приложения 1.1 функционирует следующим образом. Вначале происходит обнуление регистра i. В данной операции он будет выполнять роль счётчика 8-битовых групп для регистра команды RgI и изменяться от 0 до 4. После этого на шину адреса (ША) выставляется значение программного счётчика (PC). Затем на шину данных выбираются очередные 8 бит команды (находящейся в ОЗУ), адресуемые содержимым шины адреса. Эти 8 бит копируются с шины данных в регистр RgI, начиная с младших разрядов. Далее производится переход к следующей 8-битовой группе и увеличивается на единицу содержимое программного счётчика. Выборка команды заканчивается, когда все четыре 8-битовые группы пройдены, т.е. i=4.

5.2 Алгоритм перехода к подпрограмме прерывания

Команда перехода к подпрограмме прерывания выполняется в следующем порядке (рисунок приложения 2.1). Команда выполняется, если установлен флаг IF и в регистре прерываний RgZ присутствует номер прерывания. Первоначально необходимо сохранить в стеке содержимое программного счётчика. Для этого выставляем содержимое программного счетчика на ШД, уменьшаем на 1 содержимое указателя стека SP, выставляем его на шину адреса. Так как у нас разрядность ША равна 11, а ОЗУ 8-разрядное, записать в стек за один раз мы можем только 8 бит программного счетчика. Для записи оставшихся бит РС опять уменьшаем SP на 1 и выставляем его на ША, по полученному адресу записываем оставшиеся 3 бита РС.

После этого необходимо передать управление по адресу обработчика требуемого прерывания. Для этого на шину адреса следует выставить номер прерывания из регистра RgZ; на шину данных выбрать адрес обработчика прерываний. Так как адрес обработчика 11-разрядный, а ОЗУ 8-разрядное, то адрес обработчика будет храниться в двух соседних ячейках памяти, и выборку будем проводить в два этапа, считывая сначала 8 бит из ячейки с адресом из регистра RgZ, а потом еще 3 бита из соседней ячейки. Биты последовательно считываем в регистр адреса, т.е. формируем в нем адрес обработчика прерывания. В самом конце алгоритма копируем этот адрес в РС.

Кроме того, мы сохраняем в стеке содержимое регистра флагов RgF, для чего опять уменьшаем содержимое стека на 1, выставляем его на ША и по полученному адресу записываем в стек содержимое регистра флагов, а потом сбрасываем флаг прерывания IF.

5.3 Алгоритм формирования операндов для арифметико-логического устройства

Формирование операндов в данном алгоритме происходит следующим образом (рисунок приложения 3.1). Сначала определяем тип формата команды. Если тип «аккумулятор – ячейка оперативной памяти», то одним операндом всегда будет поле ячейки памяти S. Далее определяем тип адресации этого операнда. Если адресация прямая адрес ячейки ОЗУ берётся из кода команды и выставляется на шину адреса. При косвенной адресации из кода команды на шину адреса выставляется адрес, по которому из ОЗУ выбирается ячейка и начинается считывание из нее нужного адреса. Считывание проходит в два этапа, так как нужный нам адрес будет храниться в двух соседних ячейках памяти. Этот адрес передаем на ШД через регистр данных(РгД). Сначала младшие 8 битов с ШД записываем в RgBuf. И передаем их в регистр адреса (РгА). Далее записываем в RgBuf старшие 3 бита и передаем их в РгД. Из регистра адреса адрес передается на шину адреса. При относительной адресации на шину адреса выставляется сумма значений адресов из кода команды и регистра базы B. Затем производится выборка 16-ти бит из ОЗУ.

Данные, выставленные на ШД, будут являться вторым операндом. Их копируем в регистр РВ. Первым операндом будет являться значение, хранимое в аккумуляторе. Копируем содержимое аккумулятора в регистр РА.

Для типа команды «регистр – регистр» сначала из кода команды номер регистра, в котором хранится адрес операнда. Этот номер выставляем на ША, далее на ШД записываем адрес, хранящийся в этом регистре. Оттуда отправляем его в РгД, затем в RgBuff и, наконец, в регистр адреса. Это процедура происходит в два этапа, т.к. РгД и RgBuff 8-ми разрядные, а РгА 10-ти. Определяем тип адресации. При косвенной адресации из ОЗУ по адресу хранимому на ША считываем адрес ячейки памяти, в которой хранится операнд. Считывание адреса происходит в 2 этапа, сначала считываются младшие 8 бит, затем старшие 3. Адрес с шины даны передаем через буферный регистр в регистр адреса аналогичным образом в два этапа. При относительной адресации в регистр адреса выставляется сумма значений адресов из регистра адреса и регистра базы B. Затем производится выборка 16-ти бит из ОЗУ. Данные, выставленные на ШД, будут являться первым операндом. Их копируем в регистр РА. Данные для регистра РВ получаем аналогичным способом.

В результате, у нас в регистрах РА и РВ находятся нужные нам операнды. Так как по заданию адресность равна 2, данные на обработку из этих регистров в АЛУ поступают одновременно. Далее выполняем над ними в АЛУ требуемую операцию, и результат записываем в аккумулятор А, для формата команды AS и для RR результат запишем в регистр Р.

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