- •Пояснительная записка
- •Введение
- •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
- •Заключение
1.3. Метод конвейеризации
Для модернизации классической ЭВМ в проекте используется простой способ конвейеризации, то есть предварительной выборки команды. Когда текущая команда выполняет последнюю часть своей работы в CPU, будет производиться выборка очередной команды.
1.4. Технические требования
1.4.1. Команды эвм
В таблице использованы следующие обозначения:
Акк – (аккумулятор) источник данных или приемник;
IP – указатель адреса следующей команды;
К – адресная константа, содержит в себе целевой адрес для перехода;
Rr – источник данных;
Rd – приемник данных;
Rn – начальный адрес;
N – номер порта ввода/вывода;
FLAGS –регистр флагов;
SP – указатель на вершину стека;
REG – регистр косвенной адресации;
GT – регистр начального адреса глобальной таблицы страниц;
LT – регистр начального адреса локальной таблицы страниц;
TOS – таблица описания страниц.
Мнемокод |
Код |
Операнд |
Назначение и действия |
Флаги |
ADD |
01100 |
Rr |
Сложение с фиксированной точкой Акк ←Акк + Rr |
OF, ZF, SF |
FADD |
01010 |
Rr |
Сложение с плавающей точкой Акк ←Акк + Rr |
OF, ZF, SF |
WR |
00011 |
Rd |
Запись в память из аккумулятора RAM(Rd) ←Акк |
|
READ |
00100 |
Rr |
Чтение из памяти в аккумулятор Акк←RAM(Rr) |
|
JMP |
00101 |
K |
Безусловный переход IP←K |
|
JS |
00001 |
K |
Условный переход If (SF==1) then IP←K |
|
JZ |
00010 |
K |
Условный переход If (ZF==1) then IP←K |
|
HLT |
00000 |
|
Остановка Тп ←0 |
|
CLI |
00110 |
|
Сброс флага IF IF ←0 |
IF |
STI |
00111 |
|
Установка IF IF ←1 |
IF |
SUB |
01011 |
Rr |
Вычитание Aкк ← Aкк-Rr |
OF, ZF, SF |
PUSH |
10001 |
Rr |
Запись в стек SP ← SP-4 RAM(SP) ← Rr |
|
POP |
10010 |
Rr |
Чтение из стека Rr ← RAM(SP) SP ← SP+4 |
OF,ZF,SF,IF |
SHIFTRZ |
11001 |
|
Акк ← Акк >> 1 |
ZF |
MOVREG |
10000 |
Rr |
Загружает Rr в регистр косвенной адресации REG←RAM(Rr) |
|
INC |
10111 |
Rr |
Увеличение на 1 RAM(Rr) ← RAM(Rr)+1 |
OF |
DEC |
11000 |
Rr |
Уменьшение на 1 RAM(Rr) ← RAM(Rr) -1 |
ZF |
IN |
11010 |
N |
Загрузка в Акк байта порта I/O Акк ← PORT(N) |
|
OUT |
11011 |
N |
Вывод значения из регистра в порт PORT(N) ←Aкк |
|
CALLUSER |
11110 |
|
Переключение в пользовательский режим PF 1 |
PF |
CALLSYS |
11111 |
|
Переключение в системный режим PF 0 |
PF |
Мнемокод |
Код |
Операнд |
Назначение и действия |
Флаги |
INT |
01110 |
I |
Вызов прерывания SP ← SP-4 RAM(SP) ← IP SP ← SP-4 RAM(SP) ← IF IF ← 0 IP ← RAM(I*4) |
IF |
IRET |
01111 |
|
Возврат из прерывания IF←RAM(SP) SP←SP+4 IP←RAM(SP) SP←SP+4 |
OF,ZF,SF,IF |
AND |
10011 |
Rr |
Побитовое логическое и Aкк ←Aкк&Rr |
ZF |
OR |
10100 |
Rr |
Побитовое логическое или Aкк←Aкк|Rr |
ZF |
NOT |
1101 |
|
Логическое отрицание Aкк ← !Aкк |
ZF |
CMP |
10101 |
Rd |
Сравнить содержимое регистра Rd с Акк. Установить флаг ZF – если равны, SF – если Rd < Акк |
ZF,SF |
CMD |
10110 |
Rd |
Сравнить содержимое регистра Rd с Акк. Установить флаг ZF – если равны, SF – если Rd > Акк |
ZF,SF |
CONTSAVE |
11100 |
Rn |
Сохранение контекста процесса RAM(Rn)←IP RAM(Rn +4)←FLAGS RAM(Rn +8)←Rr RAM(Rn +12)←Rd RAM(Rn +16)←Акк RAM(Rn +20)←GT RAM(Rn +24)←LT RAM(Rn +28)←TOS RAM(Rn +32) ←REG RAM(Rn +36)←SP |
|
CONTREST |
11101 |
Rn |
Восстановление контекста процесса SP←RAM(Rn +36) REG←RAM(Rn +32) TOS←RAM(Rn +28) LT←RAM(Rn +24) GT←RAM(Rn +20) Акк←RAM(Rn +16) Rd←RAM(Rn +12) Rr←RAM(Rn +8) FLAGS←RAM(Rn +4) IP←RAM(Rn) |
|