- •Пояснительная записка
- •Введение
- •1. Техническое задание
- •1.1. Область применения
- •1.2. Индивидуальное задание и литературные источники
- •1.3. Метод конвейеризации
- •1.4. Технические требования
- •1.4.1. Команды эвм
- •1.4.2. Диапазон и погрешность представления чисел
- •1.4.3. Форматы команд, данных и слова состояния процессора
- •1.4.4. Организация виртуальной памяти
- •1.4.5. Способы организации ввода/вывода информации
- •1.4.6. Способ оценки производительности эвм
- •1.4.7. Приращение производительности эвм
- •1.5. Способ тестирования эвм
- •1.6. Взаимодействие программ пользователя с внешними устройствами
- •1.7. Демонстрация возможностей взаимодействия cpu с внешними устройствами
- •1.8. Интерфейс Win32 api
- •2. Структура и алгоритм функционирования эвм классической модели
- •2.1. Вводные замечания
- •2.2. Функциональная модель эвм
- •2.3. Алгоритм функционирования эвм
- •2.4. Средства управления прерываниями
- •2.5. Организация виртуальной памяти
- •2.6. Оценка производительности эвм
- •3. Модификация созданной эвм
- •3.1. Возможности повышения производительности эвм
- •3.2. Организация конвейерной обработки команд
- •Inc 23 такта
- •Iret 12 тактов
- •3.3. Расчет прироста производительности эвм
- •4. Тестовая задача
- •4.1. Алгоритм и программа для тестирования эвм
- •4.2. Моделирование процесса выполнения программы
- •5. Программирование ввода и вывода
- •5.1. Пример использования системных функций для ввода
- •5.2. Общие сведения об интерфейсе Win32 api
- •Заключение
4.2. Моделирование процесса выполнения программы
Моделирование заключается в описании последовательности микроопераций, выполняемых функциональными блоками ЭВМ при интерпретации инструкций (команд) ЭВМ, составляющих объектную программу, и результатов, получаемых с помощью этих микроопераций. Для выбора очередной выполняемой микрооперации в алгоритме функционирования ЭВМ служат операторы проверки признаков, характеризующих результат действия микроопераций. При моделировании необходимо также описать конкретные значения указанных признаков, используемых в процессе интерпретации команды. Моделированию подвергаются следующие команды: READ и WR.
READ [REG], необходимо прочитать Аi и переместить в Акк. В REG находится адрес R1 00000400
Проверяем триггер пуска. Тп=1.
Проверяем условие INTR=1. INTR=0 прерывания нет.
Выборка очередной команды
Запись указателя на текущую инструкции в регистр адреса (RA←IP=104), сигнал V1
Ожидание готовности памяти (проверка ReadyRam = 1), сигнал Y0
Копирование инструкции из регистра RD →RI, сигнал V2
00100
11
0000000000000 0000 00000000
Проверка кода операции на равенство 00000. Код выбранной операции не равен 00000 и соответствует коду операции READ (00100)
Вычисление исполнительного адреса операнда. Способ адресации – косвенная 11. Перемещаем в RA содержимое регистра косвенной адресации REG, Y11
Перемещаем операнд из памяти, т. к. СА=11
Включение режима чтения из памяти (RD RAM устанавливаем равным 1)
Инициализация ячейки памяти (адрес 400)
Ожидание готовности памяти (проверка ReadyRam = 1), сигнал Y0
Перемещаем операнд A0 = 17 из RD в Акк, сигнал Y5
Увеличение указателя текущей команды IP=104+4=108, сигнал Y2
Возврат в начало цикла (Тп=1).
Вывод моделирования READ[REG]: моделирование прошло успешно и без ошибок, А0 равное 17 было перемещено в Акк.
WR C2, необходимо переместить содержимое Акк равное 32 в ячейку памяти С2 по адресу 610
Проверяем триггер пуска. Тп=1.
Проверяем условие INTR=1. INTR=0 прерывания нет.
Выборка очередной команды
Запись указателя на текущую инструкции в регистр адреса (RA←IP=174), сигнал V1
Ожидание готовности памяти (проверка ReadyRam = 1), сигнал Y0
Копирование инструкции из регистра RD →RI, сигнал V2
00011
01
0000000000000 011000010000
Проверка кода операции на равенство 00000. Код выбранной операции не равен 00000 и соответствует коду операции WR (00011)
Вычисление исполнительного адреса операнда. Способ адресации – прямая, СА= 01. Перемещаем в RA содержимое RI[24..0], сигнал Y8
Перемещаем содержимое Акк равное 32 на RD, сигнал Y6
Сохраняем операнд в память.
Включение режима записи в память (WR RAM устанавливаем равным 1)
Инициализация ячейки памяти (адрес 610)
Ожидание готовности памяти (проверка ReadyRam = 1), сигнал Y0
Увеличение указателя текущей команды IP=174+4=178, сигнал Y2
Возврат в начало цикла (Тп=1).
Вывод моделирования WR C2: моделирование прошло успешно и без ошибок, была осуществлена запись в ячейку С2 числа 32.
ADD 32 Необходимо к аккумулятору, в котором содержится значение 0, добавить 32 из адресной части.
Проверяем триггер пуска. Тп=1.
Проверяем условие INTR=1. INTR=0 прерывания нет.
Выборка очередной команды
Запись указателя на текущую инструкции в регистр адреса (RA←IP=170), сигнал V1
Ожидание готовности памяти (проверка ReadyRam = 1), сигнал Y0
Копирование инструкции из регистра RD →RI, сигнал V2
10011 |
10 |
0000000000000000000 100000 |
Проверка кода операции на равенство 00000. Код выбранной операции не равен 00000 и соответствует коду операции ADD (10011)
Вычисление исполнительного адреса операнда. Способ адресации –непосредственная (10) В Акк хранится значение (0)
Перемещаем операнд 32 – из адресной части в RD. Однако, для перемещения необходима связь напрямую адресной части и регистра данных. На регистровой схеме же у нас представлено только соединение полностью RI c RD, что не дает нам необходимой связи. Отсюда, необходимо внести изменения в регистровую схему, соединив непосредственно адресную часть RI и регистр данных RD, связав их сигналом Y9. (На странице 19 представлена уже исправленная схема)
Так как. СА=10 выборка из памяти операнда не производится.
Сразу выполняем следующий шаг перемещает операнд 32 из RD в R0, сигнал Y7.
Выполняем арифметическую операцию:
Пуск ALU, сигнал Y10
Ожидание готовности памяти (проверка условия ReadyRam=1), сигнал Y0
Увеличение указателя текущей команды IP=170+4=174, Y2
Проверка условия переполнения ОVR == 1, если OVR=1, то имеет место переполнение и необходимо выставить Тп=0, если же OVR = 0, то переполнения нет, и идем в начало цикла, в нашем случае OVR = 0.
Возврат в начало цикла (Тп=1).
Вывод моделирования ADD 32: в процессе моделирования была найдена ошибка в регистровой схеме (отсутствовала связь между адресной частью RI и регистром данных RD, тем самым не давая возможности использовать непосредственную адресацию). Ошибка устранена.