FASM#Fresh IDE
{{short description|Open source assembler for x86 processors}}
{{For|the Royal Navy project also known as "FASM"|Future Attack Submarine}}
{{Infobox software
| name = FASM
| screenshot = FASM2.png
| caption = Screenshot with supplied example
| developer = Tomasz Grysztar
| released = {{Start date and age|2000|03}}
| latest release version = {{wikidata|property|reference|edit|P348}}
| latest release date = {{Start date and age|{{wikidata|qualifier|P348|P577}}}}
| latest_preview_version =
| latest_preview_date =
| programming language = Assembly
| operating_system = Unix-like, Linux, Windows and IDE, MS-DOS and IDE, OpenBSD, etc., MenuetOS, KolibriOS, [http://octavio.vega.fernandez.googlepages.com/octaos/ OctaOS], DexOS and IDE, SkyOS, [http://www.oby.ro/os/ Solar_OS]
| genre = Assembler
| license = Simplified BSD with a weak copyleft clause
| website = {{url|flatassembler.net}}
}}
FASM (flat assembler) is an assembler for x86 processors. It supports Intel-style assembly language on the IA-32 and x86-64 computer architectures. It claims high speed, size optimizations, operating system (OS) portability, and macro abilities.{{cite web |author=Grysztar |first=Tomasz |date=2008-05-12 |title=Flat Assembler Programmer's Manual |url=http://flatassembler.net/docs.php?article=manual |accessdate=2008-05-12 |website=flat assembler}} It is a low-level 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 ([http://arm.flatassembler.net FASMARM]) also exists.{{cite web|url=http://arm.flatassembler.net/|title=FASMARM|date= 2008-03-20|accessdate=2008-05-12}}
History
The project was started in 1999 by Tomasz Grysztar, a.k.a. Privalov, at that time an undergraduate student of mathematics from Poland. It was released publicly in March 2000.{{cite web|url=http://www.wasm.ru/article.php?article=privalov_en|title=Interview with Privalov the author of FASM|date=2004-08-12|access-date=2008-05-12|archive-url=https://web.archive.org/web/20071008021423/http://wasm.ru/article.php?article=privalov_en|archive-date=2007-10-08|url-status=dead}}{{cite web |author=Grysztar |first=Tomasz |date=2000-03-15 |title=flat assembler |url=http://marc.info/?l=freedos-dev&m=95311018003959&w=2 |accessdate=2008-05-19}} 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 or TASM.{{cite web |author=Hyde |first=Randall |title=Which Assembler is the Best? |url=http://mmcs.sfedu.ru/~ulysses/Edu/MP/WhichAsm.html |archive-url=https://archive.today/20131116172530/http://mmcs.sfedu.ru/~ulysses/Edu/MP/WhichAsm.html |url-status=dead |archive-date=November 16, 2013 |accessdate=2008-05-18 }} 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.{{cite web |author=Grysztar |first=Tomasz |title=Flat Assembler Design Principles |url=http://flatassembler.net/docs.php?article=design |accessdate=2008-05-12}} 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.{{cite web |author=Grysztar |first=Tomasz |title=FA – command line extension for fasm |url=http://board.flatassembler.net/topic.php?t=9948 |accessdate=2012-05-11}} 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 for FASM.{{cite web |last=Found |first=John |title=Fresh ID project |url=https://fresh.flatassembler.net/}} Fresh currently supports Microsoft Windows and Linux.
Use
Operating systems written with FASM:
- MenuetOS{{cite web|url=http://www.menuetos.net/|title=MenuetOS|accessdate=2008-05-18}} – 32- and 64-bit GUI operating systems by Ville Turijanmaa
- KolibriOS
Compilers that use FASM as a backend:
See also
References
{{Reflist}}
External links
- FASM project: {{official website|flatassembler.net}}
- [http://fasmlib.x86asm.net/ FASMLIB] 0.8.0 – portable 32-bit x86 asm lib for FASM/MASM/YASM/NASM/GASM
- [http://arm.flatassembler.net FASMARM] – FASM for ARM processors, v1.27, {{Release date|2012|06|09}}
- [http://fresh.flatassembler.net/ The Fresh IDE]
{{X86 assembly topics}}
Category:Free software primarily written in assembly language
Category:Linux programming tools
Category:Programming tools for Windows