Skip to content

Nechda/ASM2LLVM

Repository files navigation

ENG

ASM2LLVM

В данном репозитории представлен исходный код бинарного транслятора программ под архитектуру CPU-emulator в код на LLVM IR.

Requerements

В данном проекте используется пакет llvm (ver 10.0.0). Стандарт языка - c++14.

Command prompt

После сборки проекта, например, в файл translator вам доступны следующие команды:

  • -i <имя файла>
    Указывает входной файл, содержащий скомпилированную программу. Данный флаг является обязательным при запуске.
  • -o <имя файла>
    Указывает выходной файл для транслятора. Если данный флаг не указывается, то результат трансляции выподится на экран.
  • -l <имя файла>
    Задает имя файла лога. По умолчанию файл лога "log.log".
  • -n
    Отключает логирование. При возникновении ошибок отладочная информация печатается на экран.
  • -r
    Запуск программы на исполнение после трансляции.
  • --memorySize=<число байт>
    Указывает размер памяти виртуального процессора в байтах. Минимальный размер памяти равен 128 байтам, а максимальный 512 кБ.
  • --makeItBetter
    При выставлении данного флага транслятор производит оптимизацию сгенерированного LLVM IR.

Examples

В директории examples располагаются примеры программ и их оттранслированный вариант. Рассмотрим примеры команд, запускающих транслятор в различных режимах:

>translator -i sqr.bin -r --memorySize=1024 --makeItBetter

Транслятор будет работать с файлом sqr.bin, а после трансляции запустит на исполнение с ограничением по памяти процессора в 1024 байта. Оттранслированный код отобразится на экране, но перед этим пройдет этап оптимизации.

>translator -i factorial.bin -o factorial.ll -l my_log.txt

Транслируем программу factorial.bin, результат записывается в factorial.ll. В случае ошибок, логирование происходит в файл my_log.txt.

Writing your own programs

Для получения скомпилированных программ можно поступить двумя способами:

  • Собрать компилятор ассемблера из проекта CPU-emulator
  • Собрать компилятор простого языка программирования высокого уровня из проекта Programming language

После того, как вы соберете компилятор ассемблера или ЯП, то сгенерированные бинарники можно будет передавать транслятору.

About

Simplest translator from custom assembler into LLVM IR

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages