Что такое Emula80?

Emula80 - интерактивный интерпретатор ассемблера c intel-подобным синтаксисом предназначенный для обучения и ознакомления с главными принципами программирования на языках ассемблера. Подмножество языка ассемблера представленного в данной программе является полным поТьюрингу.

Что умеет Emula80?

Emula80 - представляет собой приложение предоставляющее интерактивную оболочку для программирования на подмножестве команд ассемблера (c кодовым именем EmuLang). Главной особенностью программы является способность отображать состояние регистров виртуального процессора и памяти виртуальной машины на которой выполняется программа. Так же местная реализация ассемблера может допускать нескольких вариантов написания инструкций (что несколько ослабляет требования к правильности написания синтаксиса) и позволяет сконцентрироваться на обучении.

Ограничения Emula80

Несмотря на цель создать максимально правдоподобный аналог ассемблера, в Emula80 содержится несколько ограничений наложенных с целью упростить внутреннею реализацию, а также внешний интерфейс программы. Так в Emula80 поддерживается только один тип данных (int32). Все регистры моделируемого процессора и ячейки памяти виртуальной машины так же имеют этот тип данных. Так же подмножество языка было урезано до команд арифметики, операций с регистрами, определения процедур, операций с памятью. Многие команды из множества команд процессоров семейства x86-x64 в данном приложении не доступны, что позволяет использовать Emula80 только в учебных целях.

Справочная система

  1. Основы синтаксиса
  2. Система команд
  3. Регистры и их назначение
  4. Интерактивная оболочка

Основы синтаксиса

Реализация ассемблера в данном приложении не требует особых требований к структуризации программ на EmuLang. Синтаксический анализатор реализованный является плоским и считывает информацию последовательно, игнорируя знаки пробелов (кроме тех случаев когда они разделяют лексемы), а так же запятые и символы перевода каретки. Практически это означает что можно написать корректную программу в одну строку без специальных символов-разделителей. Главным требованием синтаксиса является что бы каждое значимое выражение начиналось с оператора.

Пример корректной программы

1 |MOV EAX 4
2 |MOV EBX, 12
3 |MUL EAX, EBX ADD EAX 1
Как можно увидеть в данном примере, разбивать программу на строки строго не обязательно, так же необязательно отделять аргументы операторов запятой.

Особенности Работы

Текст программы разбивается на лексемы, затем каждой лексеме присваивается номер. Этот номер будет адресом данной лексемы. По этому адресу можно переходить с помощью регистра IAR. Однако надо быть острожным, так как "не операторы" тоже имеют свой адресс и интерпретатор выдаст ошибку при попытке выполнить "EAX" или другую подобную "не инструкцию".

Система команд

EmuLang реализует маленькое подмножество команд семейства x86-x64 в которое вошли базовые команды этого семейства процессоров.
Обозначения

Регистры и их назначение

Регистры общего назначения

Могут быть использованы для любых операций над регистрами
  1. EAX
  2. EBX
  3. ECX
  4. EDX
  5. EFX
  6. EGX
  7. ESX
  8. EPX - регистр общего назначения, но хранит адрес вершины стека

Регистры специального назначения

Используются для хранения специальной информации, хотя они и доступны для изменения, не рекомендуется их изменять, если программист не может предвидеть результата.
  1. IAR - Содержит номер инструкции программы.*
  2. DRF - Флаг отладки = 1 если программа выполняется пошагово
  3. RET - Содержит номер инструкции* для возврата из процедуры
  4. STE - Адрес конца стека
  5. CRF - Флаговый регистр сравнения

Интерактивная оболочка

Интерактивная оболочка предназначена для программирования и интерактивного отслеживания информации. Программа имеет одно главное окно поделенное на следующие области.
  1. Элемент текстового ввода, для программного кода. Именно тут будет размещаться код программы
  2. Здесь отображается информация о регистрах и памяти виртуальной машины
  3. Здесь выводятся сообщения от интерпретатора
  4. Панель инструментов - манипуляции с файлами, и не посредственно с исполнением программы