summaryrefslogtreecommitdiff
path: root/doc/src/libmcpu-assembler-directives-table.tex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/libmcpu-assembler-directives-table.tex')
-rw-r--r--doc/src/libmcpu-assembler-directives-table.tex37
1 files changed, 37 insertions, 0 deletions
diff --git a/doc/src/libmcpu-assembler-directives-table.tex b/doc/src/libmcpu-assembler-directives-table.tex
new file mode 100644
index 0000000..e7200b9
--- /dev/null
+++ b/doc/src/libmcpu-assembler-directives-table.tex
@@ -0,0 +1,37 @@
+\begin{longtable}{@{}L{35mm}L{48mm}L{76mm}@{}}
+\toprule
+\textbf{Директива} & \textbf{Форма} & \textbf{Назначение}\\
+\midrule
+\endfirsthead
+\toprule
+\textbf{Директива} & \textbf{Форма} & \textbf{Назначение}\\
+\midrule
+\endhead
+\code{.init} & без аргументов & Переключает текущую code section на INIT. Для final low-level ET_EXEC здесь определяется \code{_start}; ET_DYN такую секцию иметь не может.\\
+\code{.text} & без аргументов & Основная PROGRAM code section. Здесь находится \code{_life}, а PROGRAM без отдельного INIT имеет \code{_start == _life}.\\
+\code{.fini} & без аргументов & FINI code section; low-level entry symbol --- \code{_fini}. HLL finalization создаётся CRT автоматически.\\
+\code{.data} & без аргументов & Инициализированные writable DATA objects.\\
+\code{.bss} & без аргументов & Zero-initialized DATA, сериализуется как NOBITS.\\
+\code{.control} & без аргументов & Model CONTROL space contribution; guest read-only во время исполнения. Только main ET_EXEC.\\
+\code{.input} & без аргументов & Model INPUT space contribution. Только main ET_EXEC.\\
+\code{.output} & без аргументов & Model OUTPUT space contribution. Только main ET_EXEC.\\
+\code{.trace} & без аргументов & Model TRACE space contribution. Только main ET_EXEC.\\
+\code{.align} & \code{.align N} & Выравнивает следующую позицию текущей section до степени/границы, проверяемой assembler-ом; добавляет padding либо увеличивает BSS size.\\
+\code{.zero} & \code{.zero N} & Резервирует N нулевых байтов; особенно естественна в \code{.bss}.\\
+\code{.byte} & \code{.byte expr[, ...]} & Записывает raw bytes 0..255 без terminator, alignment и endian conversion.\\
+\code{.integer}, \code{.int} & \code{.int bits, expr[, ...]} & Создаёт целые target objects заданной ширины. \code{.int} --- полный синоним \code{.integer}.\\
+\code{.real} & \code{.real bits, value} & Создаёт target Real object указанной physical width через LibMPU representation.\\
+\code{.complex} & \code{.complex bits, real, imag} & Создаёт target Complex object; \code{bits} задаёт physical width всего Complex object.\\
+\code{.utf8} & \code{.utf8 "text"} & Записывает проверенную UTF-8 NUL-terminated byte string. Embedded NUL не допускается.\\
+\code{.ucs2} & \code{.ucs2 "text"} & Преобразует UTF-8 source literal в strict UCS-2 target code units и добавляет U+0000. Surrogate range и scalar values выше U+FFFF запрещены.\\
+\code{.cptr}, \code{.codeptr} & \code{.cptr code-expr} & Создаёт PROGRAM/CODE pointer object с relocation при необходимости. \code{.codeptr} --- синоним.\\
+\code{.ptr} & \code{.ptr pointer-expr} & Создаёт полный PTR64 на допустимый target segment/label с relocation при необходимости.\\
+\code{.equ} & \code{.equ name, expr} & Определяет absolute assembler symbol, не создающий bytes. Допускает forward references между \code{.equ}; section labels в таком выражении не используются.\\
+\code{.global}, \code{.globl} & \code{.global name} & Делает symbol GLOBAL. \code{.globl} --- синоним.\\
+\code{.extern} & \code{.extern name} & Объявляет внешний undefined symbol для последующей компоновки.\\
+\code{.weak} & \code{.weak name} & Объявляет/помечает symbol как WEAK согласно MELF symbol binding.\\
+\bottomrule
+\end{longtable}
+
+\paragraph{Особые синтаксические формы.}
+\code{_start_life:} --- assembler pseudo-label, эквивалентный последовательным \code{_start:} и \code{_life:} по одному адресу в \code{.text}. Он не является директивой и не создаёт отдельный MELF symbol \code{_start_life}. Preprocessor line markers \code{\# N "file" flags...} меняют только logical coordinates diagnostics; \code{\#pragma} и \code{\#lang} игнорируются assembler-ом как строки, принадлежащие другим стадиям toolchain.