╔══════════════════════════════════╗ ║ ██╗ ██╗ ██╗ ██╗ ███████╗ ║ ║ ██║ ██╔╝ ██╗ ██╗ ██╔════╝ ║ ║ █████╔╝ ██╗ ██╗ ███████╗ ║ ║ ██║╚██╗ ╚██╗ ██╔╝ ╚════██║ ║ ║ ██║ ╚██╗ ╚██╔╝ ███████║ ║ ║ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ║ ╚══════════════════════════════════╝
Версия 2.0 | Экспериментальный проект | 2025
КВС — это ассемблер для архитектуры x86-64, полностью использующий русскую лексику для мнемоник инструкций, имён регистров и директив. Проект носит образовательный и экспериментальный характер и демонстрирует принципы работы ассемблера, построения ELF-файлов и трансляции высокоуровневых концепций в машинный код.
переместить, прибавить, вызвать, регистры раикс, есипи, ал, директивы .текст, .данные.текст (код) и .данные (данные).csv с соответствием адресов, байтов и исходных команд# Клонирование репозитория 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 |
.глобал _start
.текст
_start:
; write(1, msg, 13)
переместить_имм раикс, 1
загрузить_адрес рсиай, msg
переместить_имм рдикс, 13
вызов_системы
; exit(0)
переместить_имм раикс, 60
переместить_имм рдикс, 0
вызов_системы
.данные
msg: .строка_нуль "Привет, мир!"
.глобал _start
.текст
_start:
переместить_имм р8, 0 ; сумма
переместить_имм р9, 10 ; счётчик
loop:
прибавить р8, р9
уменьшить р9
сравнить_с р9, 0
переход_если_больше loop
; exit(сумма в r8)
переместить_имм раикс, 60
переместить рдикс, р8
вызов_системы
Запуск ассемблера:
python3 kvs_build.py программа.квс
В результате создаются файлы:
программа.токены — результат лексического анализапрограмма.аст — AST-представлениепрограмма.проход1 — результаты первого прохода (размеры, метки)программа.csv — детальный лог с адресами, байтами и командамипрограмма.elf — исполняемый ELF-файл[регистр]; полная поддержка [база + индекс*масштаб + смещение] в разработке