Skip to content

Четвёртая работа по конфигурационному управлению

License

Notifications You must be signed in to change notification settings

rainy351/conf_4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Ассемблер и Интерпретатор

Этот репозиторий содержит ассемблер и интерпретатор для простой виртуальной машины (UVM).

Обзор

Этот проект предоставляет инструменты для:

  1. Ассемблирования: Преобразования читаемого человеком кода на языке ассемблера в бинарный код, который может быть выполнен UVM.
  2. Интерпретации: Выполнения собранного бинарного кода и наблюдения за результатами.

Структура Проекта

  • assembler.py: Программа-ассемблер. Принимает исходный файл на языке ассемблера и выводит бинарный файл.
  • interpreter.py: Программа-интерпретатор. Принимает бинарный файл, выполняет его и записывает состояние памяти в XML-файл.
  • README.md: Этот файл.
  • test_programs/: Директория для хранения тестовых программ на языке ассемблера.
  • test_output/: Директория, куда должны сохраняться результаты тестов.

Архитектура UVM

Память

  • UVM имеет 256 байт памяти.

Регистры

  • Аккумулятор: Единственный регистр аккумулятора для временного хранения данных.
  • Счетчик Команд (PC): Отслеживает адрес выполняемой в данный момент инструкции.
  • Стек: Стек для хранения промежуточных значений.

Набор Инструкций

UVM поддерживает следующие инструкции:

Мнемоника Код Операции (младшие 5 бит) Описание Операнды A-поле
CONST 0x01 Помещает 16-битное константное значение в стек. 16-битная константа 0
LOAD 0x02 Помещает значение из памяти по 16-битному адресу в стек. 16-битный адрес 0
STORE 0x03 Извлекает значение из стека в аккумулятор (не используется напрямую для записи в память). Нет 0
SHL 0x04 Извлекает значение из стека и сдвигает его влево на 16-битное значение сдвига. 16-битный сдвиг 0
OUTS 0x05 Выводит верхнее значение из стека на стандартный вывод. Нет 0
LOAD_ACC 0x06 Извлекает значение из стека в аккумулятор. Нет 0
STORE_ADDR 0x07 Извлекает значение из стека в аккумулятор. Нет 0
STORE_VAL 0x08 Извлекает значение из стека. Сохраняет его в памяти по адресу, находящемуся в аккумуляторе. Нет 0
  • Формат Кода Операции: Инструкции кодируются с использованием одного байта для кода операции и A-поля, и двух байтов для операнда (если применимо). Младшие 5 бит байта кода операции - это код операции. Старшие 4 бита - A-поле, которое не используется в этой версии машины.
  • А-поле: 4 битное значение в байте кода операции.

Как Использовать

Ассемблер

  1. Напишите Код на Ассемблере: Создайте текстовый файл, содержащий код на языке ассемблера UVM (например, program.asm).

  2. Соберите: Запустите ассемблер:

    python assembler.py program.asm output.bin --log_file output.xml
    • program.asm: Путь к исходному файлу ассемблера.
    • output.bin: Путь к выходному бинарному файлу.
    • --log_file output.xml: Путь для хранения лога.

Интерпретатор

  1. Запустите Интерпретатор: Выполните собранный бинарный файл:

    python interpreter.py output.bin 0 10 output.xml
    • output.bin: Путь к бинарному файлу, созданному ассемблером.
    • 0: Начальный адрес памяти для вывода в XML-файл.
    • 10: Конечный адрес памяти для вывода в XML-файл.
    • output.xml: Путь к XML-файлу вывода, хранящему состояние памяти.

Примеры

Примеры программ находятся в /test_programs/, а результаты их выполнения - в /test_output/.

Пример Программы на Ассемблере (test_programs/example1.asm)

CONST 10  # Поместить 10 в стек
CONST 5   # Поместить 5 в стек
SHL 2   # Сдвинуть 5 влево на 2. Результат должен быть 20
OUTS    # Вывести верхнее значение стека, должно быть 20
STORE_ADDR # Извлечь из стека в аккумулятор
CONST 20
STORE_VAL # Извлечь из стека в mem[аккумулятор]
LOAD 20
OUTS    # Вывести mem[20], должно быть 20

Пример Использования

python assembler.py test_programs/example1.asm test_output/example1.bin --log_file test_output/example1.log
python interpreter.py test_output/example1.bin 0 25 test_output/example1.xml

About

Четвёртая работа по конфигурационному управлению

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages