I always come back: Анонс AsmX G3 — Новый этап в программировании

от автора

Привет, читатель! Да, это я — тот самый парень с обложки, где большими белыми буквами написано «I ALWAYS COME BACK». И я действительно вернулся, чтобы рассказать тебе кое-что важное. Ты сейчас читаешь эту статью, и я знаю, что ты здесь не просто так. Сегодня я анонсирую AsmX G3 — новое поколение моего проекта, которое вот-вот перевернёт твоё представление о низкоуровневом программировании. Готовься, потому что через 1-3 дня ты сможешь сам в этом убедиться!

Ты наверняка заметил обложку этой статьи — моё лицо и та самая надпись «I ALWAYS COME BACK». Это не просто мем для хайпа, это моё обещание тебе. Я возвращаюсь с чем-то большим, и эта обложка — твой первый намёк на то, что ждёт впереди. AsmX G3 — это мой успех, и я хочу, чтобы ты стал частью этого события. Так что давай разберёмся, что же я приготовил для тебя на этот раз!

Что такое AsmX G3?

Это не просто апдейт — это революция. Это третье поколение моего языка программирования/компилятора выводит всё на новый уровень:

  • Поддержка синтаксиса AT&T: AsmX G3 полностью поддерживает синтаксис AT&T, что делает его знакомым и удобным для многих разработчиков. (JITC режим поддерживает Intel синтаксис).

  • Генерация ELF-файлов (Linux): Для создания полноценных нативных приложений AsmX G3 генерирует исполняемые файлы с компоновщиком в формате ELF для систем x86_64.

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

  • Синтаксис будущего: Такие вещи как @fn, @section @include стирают грань между ассемблером и высокоуровневыми языками. Язык, который сочетает мощь машинных инструкций с элегантностью современного дизайна.

  • Smart compiler: Умный компилятор делает много вещей когда вы пишете @fn, @section @include.

Пример кода

Чтобы ты понял, о чём речь, вот пример кода на AsmX G3:

@include libc;  @section rodata {   message: str("Hello World!\n"),   archlinux: str("\uf303 -> Arch Linux\n") }  @fn pub main {   ;; Example of simple operations   @mov $0, %rdi   @add $10, %rdi   @cmp $0, %rdi      ;; Output the first message   @mov $1, %rax        ;; sys_write   @mov $1, %rdi        ;; stdout   @mov &message, %rsi  ;; message pointer-address   @mov $21, %rdx       ;; message length   @syscall    ;; Output the second message   @mov $1, %rax   @mov $1, %rdi   @mov &archlinux, %rsi   @mov $24, %rdx   @syscall      ;; Terminate the program   @mov $60, %rax       ;; sys_exit   @mov $0, %rdi        ;; exit code 0   @syscall }

Output:

$ asmx index --release -march x86_64 -o hello $ ./hello Hello World!  -> Arch Linux

Этот простой код демонстрирует, как AsmX G3 работает с системными вызовами для вывода текста в консоль, включая специальные символы, и корректно завершает программу. Это лишь вершина айсберга, но она показывает, насколько интуитивно понятным и мощным может быть низкоуровневый код.

Синтаксис

Блочная структура как в high-level функции и секции оформляются через {} — это не просто красиво, это практично:

@fn main {   ;; Your code is here }

Современные объявления данных. Инициализация переменных в секциях выглядит чисто и выразительно:

@section rodata {   message: str("Hello World!\n") ;; string }

Набор x86_64 инструкций

На данном этапе компилятор пока что поддерживает фундаментальный набор инструкций, который является ядром любой процессорной архитектуры:

  • mov — для перемещения данных.

  • addsub — для базовой арифметики.

  • cmp — для сравнения значений и установки флагов.

  • adcsbb — для работы с многобайтовыми числами (сложение и вычитание с учётом переноса).

  • orxor — для побитовых логических операций.

 Давайте посмотрим на более релевантный пример, который демонстрирует базовые возможности AsmX G3 уже сейчас:

;; Представим, что у нас есть два 64-битных числа, ;; хранящихся в парах 32-битных регистров: ;; Первое число: %eax (младшая часть) и %edx (старшая часть) ;; Второе число: %ebx (младшая часть) и %ecx (старшая часть)  @fn pub main {   ;; Сначала складываем младшие 32-битные части.   ;; Если результат вызовет переполнение, установится флаг переноса (CF).   @add %ebx, %eax      ;; Теперь складываем старшие 32-битные части,   ;; но с учётом флага переноса от предыдущей операции.   ;; Если был перенос, к результату добавится 1.   @adc %ecx, %edx      ;; В результате в паре регистров %edx:%eax   ;; будет храниться корректная 64-битная сумма.   ;; ... }

Этот код демонстрирует 64-битную операцию сложения на 32-битных регистрах. Сначала мы складываем младшие части (@add), а затем — старшие, но уже с учётом флага переноса (@adc). Это и есть настоящая низкоуровневая логика, которая станет основой для более сложных вычислений в будущем.

Ошибки прошлого в AT&T синтаксисе. Однако в AT&T синтаксисе нет явного различия между значением переменной и её адресом. Например, если message — это метка в секции данных, запись $message может быть интерпретирована как значение, а не адрес, что часто приводит к ошибкам, особенно при работе с указателями.

В AsmX G3 этот недостаток устранён:

  • Символ & для адреса: В AsmX G3 используется & для явного указания адреса переменной. Например, &message — это адрес переменной message, а не её значение.

  • Символ $ для значений: Как и в AT&T, $ обозначает непосредственное значение. Например, $10 — это константа 10.

Анонс релиза

Ты уже заинтригован? Тогда держись: релиз AsmX G3 состоится через 1-3 дня после этой статьи. Я не шучу — это будет эпично!

Но это ещё не конец. После релиза я вернусь с новой статьёй, где подробно разберу, как использовать AsmX G3. Будь ты новичок, который только начинает разбираться в регистрах, или профи, который пишет драйверы во сне, — я покажу, как его использовать.

Заключение

Вот и всё на сегодня. AsmX G3 уже на подходе, и я не могу дождаться, чтобы увидеть, что ты с ним сделаешь. Этот инструмент создан для тех, кто не боится заглянуть «под капот» и стремится к полному контролю над своим кодом. AsmX G3 — это ваш шанс писать быстрый, эффективный и элегантный низкоуровневый код. Готовь свои IDE — через 1-3 дня начнётся новая эра низкоуровневого программирования.

И помни: я всегда возвращаюсь с чем-то великим.

Сайт: doc.asmx-g3-lang.org

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Что в AsmX G3 вас удивило больше всего?

0% ⚙️ Генерация ELF-файлов: создание нативных приложений.0
50% ✍️ Поддержка синтаксиса AT&T: знакомый и удобный синтаксис.1
50% ✨ Современные директивы и макросы: для автоматизации и удобства.1
0% 🔥 Всё вместе! Жду, чтобы попробовать.0

Проголосовали 2 пользователя. Воздержались 5 пользователей.

ссылка на оригинал статьи https://habr.com/ru/articles/928538/