The flat assembler (abbreviated to fasm, intentionally stylized with lowercase letters) is a fast self-assembling assembler running in a variety of operating systems, in continued development since 1999.
It was designed primarily for the assembly of x86 instructions and it supports x86 and x86-64 instructions sets with MMX, 3DNow!, SSE up to SSE4, AVX, AVX2, XOP and AVX-512 extensions and can produce output in plain binary, MZ, PE, COFF or ELF format.
It includes the powerful but easy to use macroinstruction support and does multiple passes to optimize the size of instruction codes.
The flat assembler is self-hosting and the complete source code is included.
The only difference between the various flat assembler packages is the operating system on which they can be executed.
For any given source each version is going to generate exactly the same output file, so each of the following releases can be used to compile programs for any operating system.
The flat assembler is made by a single person - Tomasz Grysztar - as a hobby project. Although it is an open-source freeware, donations are appreciated to help cover cost and time-loss.
It is a great help in maintaining this project.
If you would like to send money donation to the author, please click the button beside.
Apart from the command line version for Windows console this package contains the one with integrated syntax-highlighting editor,
so you can edit, compile and execute your programs from one place. It also contains the set of includes
with equates and macroinstructions for Windows programming and some examples of Windows programs created with
help of them. The provided documentation is in PDF format.
This version can be executed from command line of any operating system compatible with DOS and contains
few tiny examples of DOS programs. It also contains the documentation in text format using DOS character set.
If you want to use flat assembler from the command line of Windows system, you should use the Windows console version instead of this one.
This is version for all platforms that have support for the ELF object format and the C library, like OpenBSD or Zeta.
The object file provided in this package can be linked with the 32-bit C library to create the final executable
for any such system. The documentation in pure ASCII format is included.
The flat assembler g (abbreviated to fasmg) is a new assembly engine designed to become a successor of the one used by flat assembler 1.
It does not have a built-in support for x86 instructions. It is a generic assembler that can be used in place of flat assembler 1 in applications where only the pure macroinstruction engine is needed instead of x86 encoder, for example when an instruction set for a different architecture is defined through macroinstructions.
However, thanks to the included set of macroinstructions implementing the x86 instruction sets, it has the ability of self-hosting. With the included macroinstructions it is capable of generating all the output formats that flat assembler 1 could and additional ones, like Mach-O or Intel HEX.
This release contains executables for Linux, Windows and MacOS. It is packaged with examples of macroinstructions that allow assembly of simple programs for the architectures like x86, x64, 8052, AVR, or Java Virtual Machine. More examples and instructions set definitions for other architectures can be found in the further sections of this website.
The following are some third-party products based on flat assembler, they are available to download from their respective websites.