Первая лабораторная работа по дисциплине Java была вводной, и её тема никак не была связана со темой следующих лабораторных работ, поэтому отсчёт идёт с лабораторной работы №2.
Необходимо написать класс "Процессор".
Количество регистров - 4. Размер памяти - 1024 элемента int.
Доступные инструкции:
-
ld <регистр> <адрес памяти> - загрузка данных из памяти в регистр;
-
st <регистр> <адрес памяти> - загрузка данных из регистра в память;
-
mv <регистр r1> <регистр r2> - копирование r1 = r2;
-
init <адрес> <значение> - инициализация памяти по адресу значением;
-
print – печать всех значений регистров;
-
add – с точки зрения регистров d = a + b;
-
sub – с точки зрения регистров d = a - b;
-
mult – с точки зрения регистров d = a * b.
Пример программы (вычисление (20+25) / 5):
init 10 20
init 11 25
init 12 5
ld a 10
ld b 11
ld c 12
add
print // вывод 20 25 5 45
mv a d
mv b c
div
print // вывод 45 5 5 9
Особенности реализации:
-
Процессор - отдельный класс.
-
Метод выполнения инструкций описан в классе процессора или классах-обработчиках.
-
Возможность расширения списка инструкций.
Возможный интерфейс процессора:
interface ICpu {
void exec(Command c);
}
Программу представить отдельным классом.
Программа должна давать возможность добавить инструкцию.
Программа должна быть итерируема (показать реализацию интерфейса Iterator).
Программа должна отвечать на следующие запросы (использовать класс Collections или StreamAPI):
-
Какая инструкция в программе встречается наиболее часто.
-
Какой диапазон адресов памяти используется в программе.
-
Получить список инструкций, используемых в программе, упорядоченный по частоте появления.
Разработать визуальное приложение – эмулятор процессора.
Программа должна позволять:
-
Добавлять инструкции в программу.
-
Удалять инструкцию из программы.
-
Перемещать по коду инструкции вверх и вниз.
-
Отображать состояние регистров.
-
Отображать состояние памяти.
-
Выводить статистику по программе (см. л.р. 3).
-
Исполнять программу по шагам.
Текущая инструкция отображается красным.
Должна быть возможность перезапустить программу.
Программа (набор инструкций) должна сохраняться в базе данных с помощью Hibernate/JDBC (в данной работе я использовал JDBC).
За счёт этого она будет поддерживаться в актуальном состоянии при редактировании внутри эмулятора и вновь становиться доступной при очередном запуске эмулятора.