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

╔══════════════════════════════════╗
║   ██╗  ██╗  ██╗   ██╗  ███████╗  ║
║   ██║ ██╔╝  ██╗   ██╗  ██╔════╝  ║
║   █████╔╝   ██╗   ██╗  ███████╗  ║
║   ██║╚██╗   ╚██╗ ██╔╝  ╚════██║  ║
║   ██║ ╚██╗    ╚██╔╝    ███████║  ║
║   ╚═╝  ╚═╝     ╚═╝     ╚══════╝  ║
╚══════════════════════════════════╝

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

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

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

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

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

Ключевые принципы проекта:

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

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

Исходный файл (.квс) │ ▼ (kvs_lexer.py) Файл токенов (.токены) │ ▼ (kvs_parser.py) AST-представление (.аст) │ ▼ (kvs_pass1.py) Первый проход: размеры, метки (.проход1) │ ▼ (kvs_pass2.py) Второй проход: генерация кода (.csv) │ ▼ (kvs_builder.py) ELF-компоновщик (.elf) Исполняемый файл!

УСТАНОВКА И ЗАПУСК

# Клонирование репозитория
git clone https://github.com/username/kvs.git
cd kvs

# Установка прав на выполнение (при необходимости)
chmod +x kvs_build.py

# Компиляция программы
python3 kvs_build.py программа.квс

# Запуск скомпилированной программы
./программа.elf

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

; Комментарий начинается с точки с запятой

.данные                     ; Начало секции данных
    message: .строка_нуль "Привет, мир!"
    counter: .байт 0x0A

.текст                      ; Начало секции кода
.глобал _start              ; Точка входа

_start:
    ; Аргументы для write(1, message, 13)
    переместить_имм раикс, 1
    загрузить_адрес рсиай, message
    переместить_имм рдикс, 13
    вызов_системы

    ; Выход с кодом 0
    переместить_имм раикс, 60
    переместить_имм рдикс, 0
    вызов_системы

СИСТЕМА КОМАНД

КатегорияПримеры инструкцийСоответствие NASM
Перемещение данныхпереместить, загрузить, сохранить, переместить_иммmov, lea
Арифметикаприбавить, вычесть, умножить, разделить, увеличить, уменьшитьadd, sub, mul, div, inc, dec
Логическиеи, или, исключающее_или, инвертировать, отрицатьand, or, xor, not, neg
Сравнение и проверкасравнить, сравнить_с, проверитьcmp, test
Условные переходыпереход_если_равно, переход_если_больше, короткий_переход_если_равноje, jg, je short
Безусловные переходыпереход, короткий_переход, вызвать, вернутьсяjmp, jmp short, call, ret
Стеквтолкнуть, вытолкнуть, втолкнуть_непосредственноpush, pop, push imm
Сдвиги и вращениясдвиг_влево, сдвиг_вправо, вращать_влево, вращать_вправоshl, shr, rol, ror
Без операндовнет_операции, вызов_системы, остановить, отладкаnop, syscall, hlt, int3
Строковыепереместить_байт, сравнить_байтыmovsb, cmpsb

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

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

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

ДирективаОписаниеПример
.текстПереключение в секцию кода.текст
.данныеПереключение в секцию данных.данные
.глобалОбъявление глобальной метки (точки входа).глобал _start
.строкаСтрока без нулевого терминатора.строка "Hello"
.строка_нульСтрока с нулевым терминатором.строка_нуль "Hello"
.байтРезервирование байтов.байт 0x0A, 255, 0b0001
.константаОпределение константы.константа SIZE = 100

ПРИМЕРЫ ПРОГРАММ

Пример 1: "Привет, мир!"

.глобал _start
.текст

_start:
    ; write(1, msg, 13)
    переместить_имм раикс, 1
    загрузить_адрес рсиай, msg
    переместить_имм рдикс, 13
    вызов_системы

    ; exit(0)
    переместить_имм раикс, 60
    переместить_имм рдикс, 0
    вызов_системы

.данные
msg: .строка_нуль "Привет, мир!"

Пример 2: Цикл для вычисления суммы

.глобал _start
.текст

_start:
    переместить_имм р8, 0      ; сумма
    переместить_имм р9, 10     ; счётчик

loop:
    прибавить р8, р9
    уменьшить р9
    сравнить_с р9, 0
    переход_если_больше loop

    ; exit(сумма в r8)
    переместить_имм раикс, 60
    переместить рдикс, р8
    вызов_системы

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

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

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

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

ОГРАНИЧЕНИЯ