Привет, читатель! Да, это я - тот самый парень с обложки, где большими белыми буквами написано "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-6 дней после этой статьи. Я не шучу — это будет эпично!

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

Если тебя так же, как и меня, зажигает магия низкоуровневого кода — поделись этой статьёй с друзьями и коллегами! Давайте вместе создадим сильное сообщество вокруг AsmX G3!

Заключение

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

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

Сайт: taihusk.github.io/doc.asmx-g3-lang/

Комментарии (15)