Skip to content

Latest commit

 

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Конфигурационное управление

Домашнее задание №4

Вариант №29

Разработать ассемблер и интерпретатор для учебной виртуальной машины (УВМ). Система команд УВМ представлена далее.

Для ассемблера необходимо разработать читаемое представление команд УВМ. Ассемблер принимает на вход файл с текстом исходной программы, путь к которой задается из командной строки. Результатом работы ассемблера является бинарный файл в виде последовательности байт, путь к которому задается из командной строки. Дополнительный ключ командной строки задает путь к файлулогу, в котором хранятся ассемблированные инструкции в духе списков “ключ=значение”, как в приведенных далее тестах.

Интерпретатор принимает на вход бинарный файл, выполняет команды УВМ и сохраняет в файле-результате значения из диапазона памяти УВМ. Диапазон также указывается из командной строки.

Форматом для файла-лога и файла-результата является yaml.

Необходимо реализовать приведенные тесты для всех команд, а также написать и отладить тестовую программу.

Загрузка константы

A B C
Биты 0—3 Биты 4—7 Биты 8—32
14 Адрес Константа

Размер команды: 5 байт. Операнд: поле C. Результат: регистр по адресу, которым является поле B

Тест (A=14, B=13, C=629):

0xDE, 0x75, 0x02, 0x00, 0x00

Чтение значения из памяти

A B C D
Биты 0—3 Биты 4—7 Биты 8—11 Биты 12—26
10 Адрес Адрес Смещение

Размер команды: 4 байт. Операнд: значение в памяти по адресу, которымявляется сумма адреса (регистр по адресу, которым является поле C) и смещения(поле D). Результат: регистр по адресу, которым является поле B.

Тест (A=10, B=7, C=13, D=333):

0x7A, 0xDD, 0x14, 0x00

Запись значения в память

A B C
Биты 0—3 Биты 4—7 Биты 8—11
0 Адрес Адрес

Размер команды: 2 байт. Операнд: регистр по адресу, которым является поле C. Результат: значение в памяти по адресу, которым является регистр по адресу, которым является поле B

Тест (A=0, B=6, C=4):

0x60, 0x04

Унарная операция: побитовое "не"

A B C D
Биты 0—3 Биты 4—7 Биты 8—22 Биты 23—26
1 Адрес Смещение Адрес

Размер команды: 4 байт. Операнд: значение в памяти по адресу, которым является сумма адреса (регистр по адресу, которым является поле B) и смещения (поле C). Результат: регистр по адресу, которым является поле D.

Тест (A=1, B=6, C=87, D=11):

0x61, 0x57, 0x80, 0x05

Тестовая программа: Выполнить поэлементно операцию побитовое "не" над вектором длины 7. Результат записать в исходный вектор.

Зависимости

pip install pyyaml

Команда для запуска проекта

cd target_4
python assembler.py input_assembler.asm output_assembler.bin log_assembler.yaml
python interpreter.py output_assembler.bin results.yaml 128 

Команда для запуска юнит-тестов

cd target_4
python -m unittest test_assembler.py  
python -m unittest test_interpreter.py

Результат юнит-тестов программы

Результат работы программы

Результат выполнения тестовой программы

About

Домашняя работа №4 по дисциплине «Конфигурационное управление» Вариант №29

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages