From 1b8f12f41784843ebf3e0d26f3ba586164f9fbfd Mon Sep 17 00:00:00 2001 From: artradeskz Date: Tue, 23 Dec 2025 16:18:48 +0300 Subject: [PATCH] Create readme.html --- readme.html | 685 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 685 insertions(+) create mode 100644 readme.html diff --git a/readme.html b/readme.html new file mode 100644 index 0000000..b25fdc6 --- /dev/null +++ b/readme.html @@ -0,0 +1,685 @@ + + + + + + КВС - Ассемблер с русским синтаксисом + + + +
+ +

КВС (kvs_9_8.py) — Ассемблер с русским синтаксисом для x86-64

+ + +
+
+   __  _____  __  __
+  / / / / _ \/ / / /
+ / / / /  __/ /_/ / 
+/_/ /_/\___/\____/  
+            
+

Версия 9.8 | Экспериментальный проект | 2024

+
+ + +

┌──[ ОГЛАВЛЕНИЕ ]────────────────────────────────────────────┐

+ +

└──────────────────────────────────────────────────────────────┘

+ + +

НАЗНАЧЕНИЕ И КОНЦЕПЦИЯ

+

КВС — это ассемблер для архитектуры x86-64, полностью использующий русскую лексику для мнемоник инструкций, имён регистров и директив. Проект носит образовательный и экспериментальный характер и демонстрирует принципы работы ассемблера, построения ELF-файлов и трансляции высокоуровневых концепций в машинный код.

+ +
+ Ключевые философские принципы проекта: +
    +
  • Самодокументируемый код: Читаемость и ясность важнее краткости.
  • +
  • Изоляция логики: Разделение парсера, трансформатора и кодогенератора.
  • +
  • Минимизация зависимостей: Используется только struct для упаковки данных, re не используется.
  • +
  • Избегание чрезмерного ООП: В контексте возможной будущей самокомпиляции.
  • +
+
+ + +

ОСОБЕННОСТИ И ВОЗМОЖНОСТИ

+ + + +

АРХИТЕКТУРА И ПРОЦЕСС СБОРКИ

+

Процесс трансляции исходного кода .квс в исполняемый файл .elf проходит через несколько этапов:

+ +
+Исходный файл (.квс) + │ + ▼ (Этап 1: Разбор и импорт) +Промежуточный файл (.квс.промежуточный) + │ + ▼ (Этап 2: Двухпроходное ассемблирование) +Данные секций + Таблица меток + │ + ▼ (Этап 3: Генерация ELF) +Исполняемый файл (.elf) + Лог (.log.csv) +
+ +

Подробнее об этапах:

+
    +
  1. Построение промежуточного представления: Исходный файл и все импортированные модули объединяются в один текст. Метки и константы переименовываются (получают суффикс имени модуля) для избежания коллизий.
  2. +
  3. Первый проход ассемблирования: Анализируется промежуточный файл, вычисляются размеры всех инструкций и данных, строится таблица меток с их смещениями внутри секций.
  4. +
  5. Второй проход ассемблирования: Генерируется машинный код. Адреса меток подставляются в инструкции переходов, загрузки адресов и т.д. Формируются бинарные содержимое секций .text и .data.
  6. +
  7. Компоновка ELF: Собранные секции упаковываются в формат исполняемого файла ELF 64-bit с корректными заголовками, таблицами секций и сегментов.
  8. +
+ + +

ФОРМАТ ИСХОДНЫХ ФАЙЛОВ (.квс)

+

Исходные файлы имеют расширение .квс. Их структура следует традициям ассемблера:

+ +
+; Комментарий начинается с точки с запятой
+.данные                   ; Начало секции данных
+    приветствие: .строка_нуль "Здравствуй, мир!"
+    число: .байт 0x2A
+
+.текст                    ; Начало секции кода
+.глобал _start            ; Объявление точки входа
+
+_start:                   ; Метка
+    переместить_имм раикс, 60   ; Системный вызов exit (60) в rax
+    переместить_имм рдикс, 42   ; Код возврата (42) в rdi
+    вызов_системы               ; Вызов ядра (syscall)
+ + +

СИСТЕМА КОМАНД (ИНСТРУКЦИИ)

+

Ассемблер поддерживает обширный набор инструкций x86-64, сгруппированных по категориям:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
КатегорияПримеры инструкцийСоответствие NASM
Перемещение данныхпереместить, загрузить, сохранить, загрузить_адресmov, lea
Арифметикаприбавить, вычесть, умножить, разделить, увеличитьadd, sub, mul, div, inc
Логические операциии, или, инвертировать, проверитьand, or, not, test
Управление потокомпереход, переход_если_равно, вызвать, вернутьсяjmp, je, call, ret
Работа со стекомвтолкнуть, вытолкнутьpush, pop
Сдвиги и вращениясдвиг_влево, вращать_вправоshl, ror
Строковые операциипереместить_байт, сравнить_байтыmovsb, cmpsb
Системные вызовывызов_системы, прерватьsyscall, int
+ +

Особенности кодирования: Проект корректно генерирует префиксы REX, учитывает размеры операндов (8/16/32/64 бита) и поддерживает базовые режимы адресации памяти (например, [раикс]).

+ + +

РЕГИСТРЫ ПРОЦЕССОРА

+

Поддерживаются регистры x86-64 во всех их размерах:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
64-битные32-битные16-битные8-битные (младшие)8-битные (старшие)
раиксеаиксаиксалаш
рбиксебиксбиксблбш
рсиксесикссиксклчш
рдикседиксдиксдлдш
рсипиесипиэспспл
рбипиебипибипибпл
рсиайесиайэссил
рдиайедиайдидил
р8 ... р15р8д ... р15др8в ... р15вр8б ... р15б
+ + +

ДИРЕКТИВЫ АССЕМБЛЕРА

+

Директивы управляют процессом ассемблирования, не превращаясь в машинный код напрямую.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ДирективаОписаниеПример
.текстПереключает ассемблер на запись в секцию кода..текст
.данныеПереключает ассемблер на запись в секцию данных..данные
.глобалОбъявляет метку глобальной (точку входа программы)..глобал _start
.строка / .строка_нульРезервирует место в секции данных для строки (без нуля / с нулевым завершителем)..строка_нуль "Текст"
.байтРезервирует один или несколько байт с заданными значениями..байт 1, 0xFE, 255
.константаОпределяет символьную константу, которую можно использовать как число..константа ВЫХОД = 60
.импортВключает содержимое другого файла .квс в текущую сборку..импорт библиотека.квс
+ + +

СИСТЕМА ИМПОРТА МОДУЛЕЙ

+

Директива .импорт позволяет разбивать проект на несколько файлов.

+ +

Принцип работы:

+
    +
  1. Рекурсивный поиск: Ассемблер ищет указанный файл в той же директории, что и импортирующий файл.
  2. +
  3. Переименование: Чтобы избежать конфликтов имён, все метки и константы импортированного модуля автоматически получают суффикс, основанный на имени файла (например, метка цикл из модуль.квс станет цикл_модуль).
  4. +
  5. Объединение: Содержимое всех секций .данные из импортированных файлов сливается в общую секцию .данные промежуточного файла. Аналогично для .текст.
  6. +
+ +
+ Это упрощает создание библиотек и организацию больших проектов. +
+ + +

ПРОЦЕСС ТРАНСЛЯЦИИ И ВЫХОДНЫЕ ФАЙЛЫ

+

Запуск ассемблера:

+
python3 kvs_9_8.py программа.квс
+ +

В результате создаются три файла:

+
    +
  1. программа.квс.промежуточный: Текстовый файл, содержащий объединённый и переименованный код всех модулей. Используется для отладки процесса импорта.
  2. +
  3. программа.elf: Исполняемый 64-битный ELF-файл. Для запуска может потребоваться установить флаг исполнения: chmod +x программа.elf.
  4. +
  5. программа.log.csv: Детальный лог в формате CSV, где для каждого байта машинного кода указан его виртуальный адрес, шестнадцатеричное значение, целевой адрес (для инструкций переходов) и исходная команда на русском языке. Неоценим для обучения и отладки.
  6. +
+ + +

ОГРАНИЧЕНИЯ И ОСОБЕННОСТИ РЕАЛИЗАЦИИ

+
+
    +
  • Экспериментальный статус: Проект в активной разработке, некоторые углы архитектуры x86-64 могут быть реализованы не полностью.
  • +
  • Базовая адресация памяти: На данный момент поддерживаются преимущественно простые формы адресации (например, [регистр]). Режимы со сдвигом и несколькими регистрами ([база + индекс*масштаб + смещение]) предназначены для реализации через трансформацию в промежуточном представлении (задел на будущее).
  • +
  • Отсутствие макросов и условной компиляции: В текущей версии эти конструкции не поддерживаются.
  • +
  • Лексический анализатор (лексер): Написан "вручную", без использования регулярных выражений (re), в соответствии с философией проекта.
  • +
  • Генерация ELF: Реализация фокусируется на создании рабочих исполняемых файлов для Linux. Некоторые необязательные или специфичные поля заголовков ELF могут быть заполнены упрощённо.
  • +
+
+ + +
+

───────────────────────────────────────────────────────────────────────

+

КВС Ассемблер v9.8 | Экспериментальный проект | 2025

+

Исходный код: github.com/artradeskz/kvs

+

Только для образовательных целей. Используйте на свой страх и риск.

+

+ > Система готова. Введите команду... + +

+
+
+ + + +