Skip to content

IsaevSlava2001/assembly_emulator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Эмулятор стекового процессора

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

Данный проект представляет собой эмулятор процессора с безадресной (стековой) архитектурой и Гарвардской организацией памяти (разделение памяти команд и данных). Эмулятор разработан для выполнения программ на ассемблере и визуализации работы процессора в реальном времени.

Основные особенности

  • Стековая архитектура: Все операции выполняются над данными, расположенными на стеке
  • Гарвардская архитектура: Раздельная память для команд и данных
  • Визуализация состояния: Регистры, флаги, стек и память отображаются в реальном времени
  • Встроенный ассемблер: Преобразование мнемокода в машинные инструкции
  • Интерактивное управление: Пошаговое выполнение и отладка программ

Функциональные требования

Эмулируемые компоненты

  • Регистр команд (IR): Текущая выполняемая команда (машинный код + ассемблер)
  • Счетчик команд (PC): Адрес следующей команды в памяти
  • Стек данных: LIFO-структура для операций с данными
  • Указатель стека (SP): Адрес вершины стека в памяти
  • Регистр флагов: Z (ноль), S (знак), C (перенос), V (переполнение)
  • Память команд: 16-битные инструкции (отдельная область)
  • Память данных: Ячейки для массивов и рабочих данных

Система команд

  • Формат команд: 16-битные инструкции фиксированной длины
  • Типы операций:
    • Пересылка данных (PUSH, POP)
    • Арифметические операции (ADD, SUB, MUL)
    • Логические операции (AND, OR, NOT)
    • Операции сравнения (CMP)
    • Управление выполнением (JMP, JZ, JNZ, CALL, RET, HALT)

Поддерживаемые задачи

  1. Сумма элементов массива (массив из 6-15 элементов)
  2. Свертка двух массивов (по 10 элементов каждый)

Структура массивов в памяти

Память данных:
Адрес 0x1000: [Размер массива A]
Адрес 0x1001: [Элемент A1]
Адрес 0x1002: [Элемент A2]
...
Адрес 0x1010: [Размер массива B]
Адрес 0x1011: [Элемент B1]
Адрес 0x1012: [Элемент B2]

Интерфейс пользователя

1. Панель управления и состояние процессора

- Регистр команд (IR) с машинным кодом и ассемблерным представлением
- Счетчик команд (PC)
- Стек данных с визуализацией LIFO
- Указатель стека (SP)
- Регистр флагов (Z, S, C, V)

2. Блоки памяти

  • Вкладка "Память команд": Таблица с адресами, машинными кодами и ассемблерными мнемониками
  • Вкладка "Память данных": Таблица с адресами, значениями и комментариями для массивов

3. Редактор кода и управление

  • Текстовый редактор с подсветкой синтаксиса ассемблера
  • Кнопки управления: Ассемблировать, Сброс, Стоп, Шаг, Пуск
  • Предустановленные программы для задач

4. Консоль вывода

  • Вкладка для ошибок ассемблирования
  • Вкладка для системных сообщений

Пример программы

Сумма элементов массива

; Инициализация
PUSH [0x1000]    ; Загружаем размер массива
PUSH 0           ; Инициализируем аккумулятор

LOOP:
  DUP            ; Дублируем счетчик
  JZ EXIT        ; Если счетчик = 0, выходим
  DEC            ; Уменьшаем счетчик
  SWAP           ; Меняем счетчик и аккумулятор местами
  
  ; Загружаем следующий элемент массива
  PUSH [0x1001]  ; Базовый адрес массива
  ADD            ; Добавляем смещение
  LOAD           ; Загружаем значение элемента
  
  ADD            ; Добавляем к аккумулятору
  SWAP           ; Возвращаем счетчик на вершину
  JMP LOOP       ; Повторяем цикл

EXIT:
  POP            ; Убираем счетчик со стека
  PUSH [0x1100]  ; Адрес для результата
  STORE          ; Сохраняем результат
  HALT           ; Завершаем выполнение

Эмулятор стекового процессора с Гарвардской архитектурой

Современный веб-интерфейс для эмуляции процессора с безадресной (стековой) архитектурой и раздельной памятью команд и данных.

Стек технологий

Frontend Framework

  • React 19.1.1 - Библиотека для создания пользовательских интерфейсов
  • TypeScript 5.8.3 - Типизированный JavaScript для масштабируемых приложений

Build Tools

  • Vite 5.0.0 - Быстрый инструмент сборки для современного фронтенда
  • ESLint - Линтер для обеспечения качества кода

UI Library

  • PrimeReact 10.9.7 - Богатая библиотека компонентов для React
  • PrimeIcons 7.0.0 - Набор иконок для интерфейса

State Management

  • Zustand 5.0.8 - Легковесное управление состоянием

Styling

  • CSS3 - Современные стили с градиентами и анимациями
  • Glassmorphism - Полупрозрачные эффекты
  • Responsive Design - Адаптивный дизайн для всех устройств

Особенности

UI/UX

  • Glassmorphism дизайн - Полупрозрачные карточки с размытием
  • Градиентные фоны - Профессиональная синяя цветовая схема
  • Плавные анимации - Fade-in эффекты и hover анимации
  • Адаптивность - Корректное отображение на всех устройствах

Функциональность

  • Редактор ассемблера - С подсветкой синтаксиса и автодополнением
  • Готовые примеры - Программы для суммы массива и свертки
  • Справочник команд - Полная документация по ассемблеру
  • Визуализация состояния - Регистры, флаги, стек и память
  • Пошаговое выполнение - Отладка программ

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

src/
├── components/           # React компоненты
│   ├── TaskPanel/       # Панель заданий
│   ├── CommandEditor/   # Редактор ассемблера
│   ├── ProcessorView/   # Состояние процессора
│   ├── MemoryView/      # Память и история
│   ├── ControlPanel/    # Управление выполнением
│   └── TechStack/       # Стек технологий
├── store/               # Zustand store
├── types/               # TypeScript типы
├── styles/              # Глобальные стили
└── App.tsx             # Главный компонент

Запуск проекта

# Установка зависимостей
npm install

# Запуск dev сервера
npm run dev

# Сборка для продакшена
npm run build

# Предварительный просмотр сборки
npm run preview

Доступные команды

Пересылка данных

  • PUSH <value> - поместить значение на стек
  • POP - извлечь значение со стека
  • DUP - дублировать верхний элемент стека
  • SWAP - поменять местами два верхних элемента

Арифметические операции

  • ADD - сложение
  • SUB - вычитание
  • MUL - умножение
  • DIV - деление
  • INC - инкремент
  • DEC - декремент

Управление выполнением

  • JMP <label> - безусловный переход
  • JZ <label> - переход если ноль
  • JNZ <label> - переход если не ноль
  • HALT - остановка выполнения

Поддерживаемые задачи

  1. Сумма элементов массива - Вычисление суммы всех элементов массива из 6-15 элементов
  2. Свертка двух массивов - Вычисление свертки двух массивов по 10 элементов каждый

Разработка

Проект использует современные инструменты разработки:

  • Hot Module Replacement - Мгновенное обновление при изменениях
  • TypeScript - Проверка типов во время разработки
  • ESLint - Автоматическая проверка кода
  • Vite - Быстрая сборка и разработка

Лицензия

MIT License - свободное использование и модификация.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •