MyCPU — это учебный проект, представляющий собой реализацию пользовательского ассемблера и виртуального стекового процессора на языке C. Проект позволяет писать программы на собственном диалекте ассемблера, компилировать их в байт-код и исполнять на виртуальной машине с поддержкой регистров, оперативной памяти (RAM) и стека.
В репозитории уже представлены примеры программ: вычисление факториала, решение квадратного уравнения и консольная отрисовка окружности.
Проект логически разделён на два основных модуля.
- Читает исходный код из текстового файла, проводит лексический анализ и транслирует мнемоники команд (
push,pop,addи т.д.), метки и аргументы в машинный код. - Поддерживает работу с метками (для условных и безусловных переходов) и различные виды адресации: непосредственную, регистровую и прямую адресацию в память.
- Встраивает в выходной бинарный файл специальную сигнатуру и версию ассемблера для проверки совместимости на этапе исполнения.
Среда исполнения считывает сгенерированный ассемблером бинарный файл, проверяет версию и выполняет байт-код. Архитектура процессора включает:
- Стек — собственная реализация динамического стека с автоматическим изменением размера.
- Регистры — 9 регистров (их число задаётся константой) общего назначения (
ax,bx,cx,dx,ex,hxи др.). - Оперативная память (RAM) — массив из 1600 ячеек памяти для хранения временных данных и построения консольной графики.
| Категория | Команды |
|---|---|
| Арифметика и математика | add, sub, mul, div, sqrt, sqr, sin, cos |
| Стек и ввод/вывод | push, pop, in, out, dump, hlt |
| Переходы и функции | jmp, jb, je, call, ret |
| Графика | prnt |
prnt— визуализирует состояние RAM; используется для консольной графики (см. примерCircle.txt).
Для компиляции проекта используется утилита make. Чтобы собрать ассемблер и SPU одновременно, выполните команду в корневом каталоге проекта:
makeВ результате в корневой директории появятся два исполняемых файла:
asm.exe— компилятор ассемблера.do.exe— виртуальный процессор SPU.
Для очистки папок от объектных и исполняемых файлов используйте:
make clean-
Написание кода — исходный код программ пишется в текстовых файлах и размещается в
CommandsFilesVer/(например,Program.txt). -
Компиляция (ассемблирование) — запустите
asm.exe, передав первым аргументом имя исходного файла, а вторым — имя для выходного бинарного файла. Бинарные файлы сохраняются вAssembler/CommandsFilesNum/.
./asm.exe Program.txt Program.bin- Исполнение — запустите SPU, передав ему имя созданного бинарного файла:
./do.exe Program.bin| Файл | Описание |
|---|---|
Factorial.txt |
Демонстрация рекурсии и работы с call/ret |
Square.txt |
Демонстрация условных переходов (je) и математических операций (sqrt) |
Circle.txt |
Отрисовка геометрии в консоли через работу с RAM (pop [hx]) и команду prnt |
Пример запуска программы для вычисления факториала:
./asm.exe Factorial.txt Factorial.bin
./do.exe Factorial.bin