- Фасм
-
flat assembler Тип компилятор Разработчик Томаш Гриштар ОС Win32, основанные на BSD, 29 марта 2009 Лицензия Вариант лицензии BSD с возможно анти‐GPL исключением Сайт flatassembler.net flat assembler (fasm) — свободно распространяемый многопроходной ассемблер, написанный Томашом Гриштаром (англ. Tomasz Grysztar). Fasm написан на самом себе, обладает небольшими размерами и очень высокой скоростью компиляции, имеет богатый и ёмкий макро-синтаксис, позволяющий автоматизировать множество рутинных задач.[1][2] Поддерживаются как объектные форматы, так и форматы исполняемых файлов. Это позволяет в большинстве случаев обойтись без компоновщика. В остальных случаях нужно использовать сторонние компоновщики, поскольку таковой вместе с fasm не распространяется.
Помимо базового набора инструкций процессора и сопроцессора fasm поддерживает наборы инструкций SSE, SSE3 и 3DNow!, а также EM64T и
Содержание
Препроцессирование
На стадии препроцессора раскрываются все макросы, символические константы, обрабатываются директивы препроцессора.
В отличие от стадии ассемблирования, препроцессирование выполняется только 1 раз. Смешивание стадий ассемблирования и препроцессирования — распространённая ошибка начинающих.
Ассемблирование
На стадии ассемблирования определяются адреса меток, обрабатываются условные директивы, раскрываются циклы и генерируется собственно программа. Fasm — многопроходной ассемблер, что позволяет ему делать некоторую оптимизацию, например, генерирование короткого перехода на метку вместо длинного. Во время прохода компилятор не всегда может вычислить выражение в условных директивах. В этом случае он делает какой-нибудь выбор и пытается скомпилировать дальше. Благодаря тому, что адреса меток, вычисленные на N-ном проходе, используются на N+1-проходе, этот процесс обычно сходится.
Формат записи инструкций
Используется Intel-синтаксис записи инструкций.
Единственное существенное отличие от формата, принятого в других ассемблерах (MASM, [label_name], а просто
label_name
означает адрес (то есть порядковый номер) ячейки. Это позволяет обходится без ключевого словаoffset
. Также в fasm при переопределении размера операнда вместоbyte ptr
пишется простоbyte
, вместоword ptr
—word
и т. д. Не позволяется использовать несколько квадратных скобок в одном операнде, таким образом вместо[bx][si]
необходимо писать[bx+si]
. Эти изменения синтаксиса привели к более унифицированному и лёгкому для прочтения коду.Пример программы
Это пример Windows-программы «Hello world», которая выводит это знаменитое сообщение с помощью функции
format PE entry start include 'win32a.inc' message db 'Hello, World!',0 start: invoke MessageBox,HWND_DESKTOP,message,message,MB_OK invoke ExitProcess,0 data import library kernel, 'kernel32.dll', \ user, 'user32.dll' import kernel, ExitProcess, 'ExitProcess' import user, MessageBox, 'MessageBoxA' end data
Или так:
include 'win32ax.inc' main: invoke MessageBox,HWND_DESKTOP,'Hello, World!','Fasm message box:',MB_OK invoke ExitProcess,0 .end main
Усложнённый вариант, с уточнением секций в PE файле:
format PE entry start include 'win32a.inc' section '.data' data readable writeable message db 'Hello, World!',0 section '.code' code readable executable start: invoke MessageBox,HWND_DESKTOP,message,message,MB_OK invoke ExitProcess,0 section '.idata' import data readable writeable library kernel, 'kernel32.dll', user, 'user32.dll' import kernel, ExitProcess, 'ExitProcess' import user, MessageBox, 'MessageBoxA'
Формат выходных файлов
С помощью директивы format можно указать следующие форматы выходных файлов:
- DOS.
- PE — исполняемые файлы Microsoft Windows (консольные, графические приложения и динамические библиотеки)
- PE64 — исполняемые файлы Windows 64.
- COFF, MS COFF, MS64 COFF — объектные файлы.
- ELF, ELF64 — исполняемые файлы в .
- ARM — это энтузиастская разработка, её можно найти на официальном форуме.
- Binary — бинарные файлы с любой нужной вам структурой. На официальном форуме, например, можно найти примеры, которые компилируются (именно компилируются, а не выполняются) в tga картинки[3] и т. д.
Операционные системы
- Microsoft Windows, Windows NT
- Основанные на
- Основанные на libc (UNIX-подобные)
- KolibriOS — не поставляется в стандартном пакете fasm, поставляется вместе с этими операционными системами.
- Нестабильная работа в Windows Vista
Поддержка fasm в сторонних программных продуктах
Файл поддержки синтаксиса fasm поставляется вместе с базовым пакетом IDE, такие как WinAsm Studio, Fresh (IDE) (специально спроектированный под fasm) и т. д.
Примечания
- ↑ Tomasz Grysztar. Flat Assembler Programmer’s Manual(англ.)
- ↑ Randall Hyde. Which Assembler is the Best? (Какой ассемблер лучший?)(англ.)
- ↑ Тема на официальном форуме о создании изображений с помощью макросов Fasm
Ссылки
- Официальный сайт(англ.)
- Руководство к FASM (
Программные пакеты для программирования на ассемблере Среды разработки ПО WinAsm • ASMedit • Easy Code • Fresh Трансляторы MASM • gas • fasm • RosASM • Yasm • прочие…
Wikimedia Foundation. 2010.