FASM (''flat assembler'') is an
assembler for
x86 processors. It supports
Intel-style assembly language on the
IA-32 and
x86-64
x86-64 (also known as x64, x86_64, AMD64, and Intel 64) is a 64-bit version of the x86 instruction set, first released in 1999. It introduced two new modes of operation, 64-bit mode and compatibility mode, along with a new 4-level paging ...
computer architectures. It claims high speed, size optimizations,
operating system
An operating system (OS) is system software that manages computer hardware, software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ef ...
(OS) portability, and
macro
Macro (or MACRO) may refer to:
Science and technology
* Macroscopic, subjects visible to the eye
* Macro photography, a type of close-up photography
* Image macro, a picture with text superimposed
* Monopole, Astrophysics and Cosmic Ray Observat ...
abilities.
It is a
low-level
High-level and low-level, as technical terms, are used to classify, describe and point to specific goals of a systematic operation; and are applied in a wide range of contexts, such as, for instance, in domains as widely varied as computer scienc ...
assembler
and intentionally uses very few
command-line options. It is
free and open-source software.
All versions of FASM can directly output any of the following: flat "raw"
binary (usable also as MS-DOS
COM executable or SYS driver), objects:
Executable and Linkable Format (ELF) or
Common Object File Format (COFF) (classic or MS-specific), or executables in either
MZ, ELF, or
Portable Executable (PE) format (including WDM drivers, allows custom MZ DOS stub). An unofficial port targeting the
ARM architecture
ARM (stylised in lowercase as arm, formerly an acronym for Advanced RISC Machines and originally Acorn RISC Machine) is a family of reduced instruction set computer (RISC) instruction set architectures for computer processors, configure ...
FASMARM also exists.
History
The project was started in 1999 by Tomasz Grysztar, a.k.a. ''Privalov'', at that time an undergraduate student of mathematics from
Poland
Poland, officially the Republic of Poland, , is a country in Central Europe. Poland is divided into Voivodeships of Poland, sixteen voivodeships and is the fifth most populous member state of the European Union (EU), with over 38 mill ...
. It was released publicly in March 2000.
FASM is completely written in
assembly language and comes with full source. It is
self-hosting and has been able to assemble itself since version 0.90 (May 4, 1999).
FASM originally ran in 16-bit
flat real mode. 32-bit support was added and then supplemented with optional
DPMI support. Designed to be easy to port to any operating system with flat 32-bit addressing, it was ported to Windows, then Linux.
Design
FASM does not support as many
high-level statements as
MASM
The Microsoft Macro Assembler (MASM) is an x86 assembler that uses the Intel syntax for MS-DOS and Microsoft Windows. Beginning with MASM 8.0, there are two versions of the assembler: One for 16-bit & 32-bit assembly sources, and another (ML64 ...
or
TASM.
It provides syntax features and macros, which make it possible to customize or create missing statements.
Its memory-addressing syntax is similar to TASM's ideal mode and
NASM. Brackets are used to denote memory operands as in both assemblers, but their size is placed outside the brackets, like in NASM.
FASM is a multi-pass assembler. It makes extensive code-size optimization and allows unconstrained forward referencing.
An unusual FASM construct is defining procedures only if they are used somewhere in the code, something that in most languages is done per-object by the
linker.
FASM is based on the "same source, same output" principle: the contents of the resulting file are not affected by the command line.
Such an approach saves FASM sources from compiling problems often present in many assembly projects. On the other hand, it makes it harder to maintain a project that consists of multiple separately compiled source files or mixed-language projects. However, there exists a Win32
wrapper called FA, which mitigates this problem.
FASM projects can be built from one source file directly into an executable file without a linking stage.
IDE
Fresh, an internet community supported project started by John Found, is an
integrated development environment
An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools a ...
for FASM.
Fresh currently supports Microsoft Windows and Linux.
[
]
Use
Operating systems written with FASM:
* MenuetOS
MenuetOS is an operating system with a monolithic preemptive, real-time kernel written in FASM assembly language. The system also includes video drivers. It runs on 64-bit and 32-bit x86 architecture computers. Its author is Ville M. Turja ...
– 32- and 64-bit GUI operating systems by Ville Turijanmaa
* KolibriOS
Compilers that use FASM as a backend:
* PureBasic
* High Level Assembly (HLA)
* BlitzMax
Blitz BASIC is the programming language dialect of the first Blitz compilers, devised by New Zealand-based developer Mark Sibly. Being derived from BASIC, Blitz syntax was designed to be easy to pick up for beginners first learning to program. T ...
See also
* Comparison of assemblers
References
External links
* FASM project:
FASMLIB
0.8.0 – portable 32-bit x86 asm lib for FASM/MASM/YASM/NASM/GASM
FASMARM
– FASM for ARM processors, v1.27,
The Fresh IDE
{{X86 assembly topics
2000 software
Assemblers
DOS software
Free software primarily written in assembly language
Linux programming tools
Programming tools for Windows
Self-hosting software
Unix programming tools