Skip to content

PurpleSwtr/Pymputer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pymputer

Python Computer Science Architecture

Идея для этого проекта пришла ко мне во время изучения Computer Science, и мне захотелось повторить архитектуру Фон Неймана на Python.

Я изначально знал на что иду, и мне было неинтересно пользоваться упрощениями и высоким уровнем абстракции в Python, и я буквально начал писать симулятор ассемблера, который в дальнейшем должен перерасти в симулятор процессора, который воссоздаётся из самых базовых логических схем, триггеров и так далее.

Визуальное представление:

Image

Установка

git clone https://github.com/PurpleSwtr/Pymputer.git
cd Pymputer

Запуск

Запустите главный файл main.py, чтобы увидеть примеры выполнения команд:

python main.py

Вы можете изменять команды в файле main.py:

from Classes.Computer import Computer

# Инициализация основного экземпляра класса 
computer = Computer()

# Отображение начального состояния регистров
computer.comp_repr()

# Пример 1: Выполнение команды в машинных кодах
computer.command("0010 0100 0010 0101")

# Пример 2: Выполнение команды на ассемблере
computer.command("w = 7 + 9")

Компоненты системы

  • Computer: Главный класс, координирующий работу всех модулей.
  • ALU (Arithmetic-Logic Unit): Реализует логические операции (AND, OR, XOR, NOT) и арифметические операции на их основе (полусумматоры, полные сумматоры).
  • RegisterFile: Хранилище данных, состоящее из нескольких 4-битных регистров, включая регистр инструкций [OP] и регистр для записи результата [w] (итого 16).
  • Decoder: Преобразует команды с упрощенного ассемблера (например, w = 7 + 9) в машинный код.
  • ProgramCounter (PC): Счетчик команд, указывающий на текущий шаг выполнения программы.

Примечание: абсолютно все блоки реализовывались на основе предыдущих, начиная с самых низких уровней абстракции


Как это работает?

Процесс выполнения команды w = 7 + 9 выглядит следующим образом:

  1. Пользователь передает строку "w = 7 + 9" в метод computer.command().
  2. Decoder преобразует эту строку в машинный код. Он разбивает команду на (w, =, 7, +, 9) и заменяет их на соответствующие 4-битные коды из своего словаря инструкций. Результат: ['0010', '0111', '1001', '1101'].
  3. Computer загружает эти 4-битные чанки в RegisterFile:
    • 0010 (код операции +) -> в регистр [OP]
    • 0111 (число 7) -> в регистр [R1]
    • 1001 (число 9) -> в регистр [R2]
  4. Computer извлекает инструкцию (0010) и аргументы (0111, 1001) из регистров и передает их в ALU.
  5. ALU выполняет 4-битное сложение 0111 + 1001. Результат 10000 (16 в десятичной).
  6. Поскольку результат 5-битный, ALU сигнализирует о переполнении ([WARNING] - stack overflow!).
  7. Computer записывает 4 младших бита результата (0000) в регистр [w].
  8. Computer выводит конечное состояние регистров.

About

Реализация регистров памяти в машинных кодах и симулятора ассемблера.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages