Fasm

Fasm (Flat Assembler) — свободно распространяемый многопроходной ассемблер, написанный Приваловым (псевдоним Tomasz Grysztar). Fasm написан на самом себе, обладает небольшими размерами и очень высокой скоростью компиляции, имеет богатый и ёмкий макро-синтаксис, позволяющий автоматизировать множество рутинных задач. Поддерживаются как объектные форматы, так и форматы исполняемых файлов. Это позволяет в большинстве случаев обойтись без линковщика. Однако в некоторых случаях без него не обойтись. В этом случае нужно использовать сторонние линковщики, поскольку линковщик вместе с Fasm’ом не распространяется.

Помимо базового набора инструкций процессора и сопроцессора fasm поддерживает наборы инструкций MMX, SSE, SSE2, SSE3 и 3DNow!, а также AMD64.

Компиляция программы в Fasm’e состоит из 2 стадий: препроцессирование и ассемблирование.

Содержание

Препроцессирование

На стадии препроцессора раскрываются все макросы, символические константы обрабатываются директивы препроцессора.

В отличие от стадии ассемблирования, препроцессирование выполняется только 1 раз. Смешивание стадий ассемблирования и препроцессирования — распространенная ошибка начинающих.

Язык препроцессора fasm

Ассемблирование

На стадии ассемблирования определяются адреса меток, обрабатываются условные директивы, раскрываются циклы и генерируется собственно программа. Fasm — многопроходной ассемблер, что позволяет ему делать некоторую оптимизацию, например, генерирование короткого перехода на метку вместо длинного. Во время прохода компилятор не всегда может вычислить выражение в условных директивах. В этом случае он делает какой-нибудь выбор и пытается скомпилировать дальше. Благодаря тому, что вычисленные адреса меток на N-ном проходе используется на N+1-проходе, это процесс обычно сходится.

Формат записи инструкций

Используется Intel-синтаксис записи инструкций.

Единственное существенное отличие от формата, принятого в других ассемблерах (MASM, TASM) — значения ячейки памяти всегда записываются как [label_name], а просто label_name означает адрес ячейки. Это позволяет обходится без ключевого слова offset. Также в fasm’e при переопределении размера операнда вместо byte ptr пишется просто byte, вместо word ptrword и т. д. Не позволяется использовать несколько квадратных скобок в одном операнде, таким образом вместо [bx][si] необходимо писать [bx+si]. Эти изменения синтаксиса привели к более унифицированному и легкому для прочтения коду.

Поддерживаемые платформы

С помощью директивы format можно указать следующие форматы выходных файлов:

  • MZ — исполняемые файлы DOS.
  • PE — исполняемые файлы Windows (консольные, графические приложения и динамические библиотеки)
  • PE64 — исполняемые файлы Windows 64.
  • COFF, MS COFF, MS64 COFF — объектные файлы.
  • ELF, ELF64 — исполняемые файлы в UNIX-like системах.
  • ARM — это энтузиастская разработка, ее можно найти на официальном форуме.

Сам Fasm может работать под DOS, Windows, Linux (напрямую, через системные вызовы), UNIX-like операционных системах (через libc), MenuetOS/KolibriOS (не поставляется в стандартном пакете).

Поддержка fasm'а в сторонних программных продуктах

Файл поддержки синтаксиса fasm поставляется вместе с базовым пакетом Vim.

Использование fasm'а поддерживают многие специализированные IDE, такие как RadASM, Fresh (специально спроектированный под fasm) и .т.д.

Ссылки


Программные пакеты для программирования на ассемблере
Компиляторы: MASMFASMNASM • RosASM • TASM • YASM • HLASM • прочие...
 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home