Skip to content

obzix-128/MyCPU

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyCPU

Оглавление


Аннотация

MyCPU — это учебный проект, представляющий собой реализацию пользовательского ассемблера и виртуального стекового процессора на языке C. Проект позволяет писать программы на собственном диалекте ассемблера, компилировать их в байт-код и исполнять на виртуальной машине с поддержкой регистров, оперативной памяти (RAM) и стека.

В репозитории уже представлены примеры программ: вычисление факториала, решение квадратного уравнения и консольная отрисовка окружности.


Описание проекта

Проект логически разделён на два основных модуля.

Ассемблер (Assembler)

  • Читает исходный код из текстового файла, проводит лексический анализ и транслирует мнемоники команд (push, pop, add и т.д.), метки и аргументы в машинный код.
  • Поддерживает работу с метками (для условных и безусловных переходов) и различные виды адресации: непосредственную, регистровую и прямую адресацию в память.
  • Встраивает в выходной бинарный файл специальную сигнатуру и версию ассемблера для проверки совместимости на этапе исполнения.

Виртуальный процессор (SPU)

Среда исполнения считывает сгенерированный ассемблером бинарный файл, проверяет версию и выполняет байт-код. Архитектура процессора включает:

  • Стек — собственная реализация динамического стека с автоматическим изменением размера.
  • Регистры — 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

Использование

  1. Написание кода — исходный код программ пишется в текстовых файлах и размещается в CommandsFilesVer/ (например, Program.txt).

  2. Компиляция (ассемблирование) — запустите asm.exe, передав первым аргументом имя исходного файла, а вторым — имя для выходного бинарного файла. Бинарные файлы сохраняются в Assembler/CommandsFilesNum/.

./asm.exe Program.txt Program.bin
  1. Исполнение — запустите 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors