| 
					
						 У меня на 2 курсе студенты пишут курсовые работы - реализация виртуальной машины.  Требования к реализации: 0. Реализовать интерпретатор как консольное приложение.  1. Объектно-ориентированный подход. 1.1 Процессор – отдельный класс, разделение на интерфейс и реализацию; Выполнение команд – вызов функтора (не использовать оператор-переключатель!) Память – динамический массив, поле-указатель в классе.  1.2 Команды процессора – иерархия классов-функторов; базовый класс – абстрактный класс Command с перегруженной операцией operator()  
  2. Разработать и описать в пояснительной записке: – коды команд – методы адресации операндов  – множество флагов-результатов – форматы команд переходов (если не определены) Обязательно должны быть реализованы команды: 	2.1 Пересылки (по необходимости) 2.2 Арифметика (целые и дробные) 2.3 Сравнения (целые и дробные) 2.3 Ввод-вывод (целые и дробные) 2.4 Переходы 	– безусловный 	– условный 	– к подпрограмме 	– возврат из подпрограммы 
  3. Загрузчик программы для виртуальной машины  – независимая функция, вызываемая главной программой интерпретатора.. 3.1 Код программы для виртуальной машины должен быть записан в текстовом файле. 3.2 Формат представления кода программы в файле должен быть разработан и описан в пояснительной записке. 3.3 Загрузчик должен быть способен загружать код программы по любому адресу памяти  3.3 Главная программа должна получать имя файла как параметр командной строки, и передавать загрузчику как параметр при вызове. 
  Примеры заданий: 4. Двухадресная, с Регистрами Общего Назначения, универсальная адресация операндов PSW = IP + Flags, 16+16 = 32 бит. ¬ Память – слова 16 бит, объединяются в двойные слова. Размер адреса – 16 бит. Данные:  	Целые знаковые, беззнаковые – 2 байта 	Целые знаковые – 4 байта Дробные – 4 байта РОН – 8 штук, 16 бит; содержимое – целое со знаком, целое без знака (адрес)  Они же – 4 регистра, 32 бит, номера – четные; содержимое – целое со знаком  Они же	– 4 регистра с плавающей точкой по 32 бита, номера – четные.
  Структура команд: 2 байта, 4 байта, 6 байт; результат по второму адресу КОП – 7 бит, s – 1 бит, dd – 2 бита, r1 – 3 бита, r2 – 3 бита, о1 – 16 бит, o2 – 16 бит   s – размер операнда (для целых) s = 0 – 2 байта s = 1 – 4 байта dd – формат операнда (первый и второй) dd = 00 – операнды в регистрах; o1, o2 – отсутствуют;  dd = 01 – регистр – адрес dd = 10 – адрес – регистр dd = 11 – адрес– адрес Адрес = регистр + смещение (если регистр используется) Адрес = смещение (если регистр не используется)  Особые случаи: s=1, d = 0 (аргумент в регистре)  и номер регистра – нечетный Это формат пересылок, арифметики целой, арифметики дробной; Пересылка: 	Регистр-регистр, Регистр-память, Память-регистр, Память-память арифметика дробная, арифметика целая – то же самое Переходы: 	Безусловный (использование битов s, dd – отличается от стандартного), r1 – не используется 	– s = 0: прямой, IP = адрес – s = 1: относительный, IP = IP + адрес dd = 10: адрес = r2 dd = 11: адрес = r2+o2 dd = 01: адрес = o2 dd = 00 – запрещено (резерв!)  Условный — то же самое, только проверяются флаги Вызов подпрограммы — адрес возврата запоминается в первом операнде Возврат – безусловный прямой переход (по любому варианту)  Если регистр в команде не используется, то можно использовать для дополнительных кодов операций
  6. Трехадресная, с регистрами общего назначения, все операнды в регистрах PSW = IP + Flags, 16 + 16 = 32 бит Память: слова по 2 байта, размер адреса – 16 бит Типы данных: Целые знаковые, беззнаковые – 4 байта 	Дробные – 4 байта РОН – 	8 штук, 32 бит – целые Они же 8 штук, 32 бита – дробные
  Структура команды: 2 байта, 4 байта; результат в первом операнде  16 бит:		КОП – 7 бит, r1 ¬– 3 бита, r2 ¬– 3 бита, r3 ¬– 3 бита 32 бита:		КОП – 7 бит, r1 – 3 бита, r2 ¬– 3 бита, r3 ¬– 3 бита, адрес (константа) – 16 бит Пересылка: 	Память-регистр, регистр-память, регистр–регистр;  r2 = xxx – биты пересылки 000 – регистр-регистр 001 – регистр-память, адрес (константа) в команде 011 – регистр-память, адрес = r3+константа (в команде)  101 – память-регистр, адрес (константа) в команде 111 – память-регистр, адрес = r3+константа (в команде) 010 – загрузка адреса в регистр, адрес (константа) в команде 110 – загрузка адреса в регистр, адрес = r3+константа (в команде) 100 – резерв Арифметика целая – только на регистрах Арифметика дробная – только на регистрах r1 = r2 $ r3 Переходы 	Безусловный прямой, r1 – не используется 	r2 = xxx – тип перехода 	001: прямой, IP = адрес (константа) в команде  011: прямой, IP = r3+адрес (константа) в команде  Безусловный относительный: команда формата-16: смещение = <r1r2r3>; IP = IP+смещение Условный — то же самое, только проверяются флаги Вызов подпрограммы — адрес возврата запоминается в r1 Возврат – безусловный прямой переход    13. Виртуальная машина RISC – Н. Вирт Вирт Н. Построение компиляторов. – М.: ДМК Пресс, 2010. – 192 с. Глава 9. RISC-архитектура как цель. – с. 75.
  14. Виртуальная машина MMIX – Д.Кнут Кнут Д. Искусство программирования, том 1, выпуск 1. MMIX – RISC- компьютер нового тысячелетия. – М.: ООО «И.Д. Вильямс», 2007. – 160 с.
  15. Виртуальная машина – Ч. Уэзерелл Уэзерелл Ч. Этюды для программистов. – М.: Мир, 1982. – 282 с. Глава 25. Уча – учимся, или Моделирование большого компьютера. – с. 159. 
					
  
						
					 |