Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
FASM
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{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]], [[Microsoft Windows|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] | platform = [[x86]], [[x86-64]] | genre = [[Assembly language assembler|Assembler]] | license = [[Simplified BSD license|Simplified BSD]] with a [[weak copyleft]] clause | website = {{url|flatassembler.net}} }} '''FASM''' (''flat assembler'') is an [[assembly language assembler|assembler]] for [[x86]] processors. It supports [[x86 assembly language|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 (computer science)|macro]] abilities.<ref name="Manual">{{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}}</ref><ref name="WhichAsm"/> It is a [[low-level programming language|low-level]] assembler<ref name="WhichAsm"/> and intentionally uses very few [[command line interface|command-line]] options. It is [[free and open-source software]]. All versions of FASM can directly output any of the following: flat "raw" [[binary file|binary]] (usable also as MS-DOS [[COM file|COM executable]] or SYS driver), objects: [[Executable and Linkable Format]] (ELF) or [[COFF|Common Object File Format]] (COFF) (classic or MS-specific), or executables in either [[DOS MZ executable|MZ]], ELF, or [[Portable Executable]] (PE) format (including WDM drivers, allows custom MZ DOS stub). An unofficial port targeting the [[ARM architecture]] also exists.<ref name="ARM">{{cite web|url=http://arm.flatassembler.net/|title=FASMARM|date= 2008-03-20|accessdate=2008-05-12}}</ref> == 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.<ref name="Interview">{{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}}</ref><ref name="Release">{{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}}</ref> FASM is completely written in [[assembly language]] and comes with full source. It is [[Self-hosting (compilers)|self-hosting]] and has been able to assemble itself since version 0.90 (May 4, 1999). FASM originally ran in 16-bit [[unreal mode|flat real mode]]. 32-bit support was added and then supplemented with optional [[DOS Protected Mode Interface|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 assembler|high-level]] statements as [[MASM]] or [[TASM]].<ref name="WhichAsm">{{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 }}</ref> It provides syntax features and macros, which make it possible to customize or create missing statements.<ref name="Interview"/> Its memory-addressing syntax is similar to TASM's ideal mode and [[Netwide Assembler|NASM]]. Brackets are used to denote memory operands as in both assemblers, but their size is placed outside the brackets, like in NASM.<ref name="Design"/> FASM is a multi-pass assembler. It makes extensive code-size optimization and allows unconstrained forward referencing.<ref name="WhichAsm"/><ref name="Design">{{cite web |author=Grysztar |first=Tomasz |title=Flat Assembler Design Principles |url=http://flatassembler.net/docs.php?article=design |accessdate=2008-05-12}}</ref> 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 (computing)|linker]]. FASM is based on the "same source, same output" principle: the contents of the resulting file are not affected by the command line.<ref name="Design"/> 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 library|wrapper]] called FA, which mitigates this problem.<ref name="FA">{{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}}</ref> FASM projects can be built from one source file directly into an executable file without a linking stage.<ref name="WhichAsm" /> == IDE == '''Fresh''', a project started by John Found, is an [[integrated development environment]] for FASM under Windows and Linux.<ref name="fresh">{{cite web |last=Found |first=John |title=Fresh ID project |url=https://fresh.flatassembler.net/}}</ref> == Use == Operating systems written with FASM: * [[MenuetOS]]<ref name="MenuetOS">{{cite web|url=http://www.menuetos.net/|title=MenuetOS|accessdate=2008-05-18}}</ref> β 32- and [[64-bit]] GUI operating systems by Ville Turijanmaa * [[KolibriOS]] Compilers that use FASM as a backend: * [[PureBasic]] * [[High Level Assembly]] (HLA) * [[BlitzMax]] == See also == * [[Comparison of assemblers]] == 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, <small> v1.27, {{Release date|2012|06|09}}</small> * [http://fresh.flatassembler.net/ The Fresh IDE] {{X86 assembly topics}} [[Category:2000 software]] [[Category:Assemblers]] [[Category:DOS software]] [[Category:Free software primarily written in assembly language]] [[Category:Linux programming tools]] [[Category:Programming tools for Windows]] [[Category:Self-hosting software]] [[Category:Unix programming tools]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite web
(
edit
)
Template:For
(
edit
)
Template:Infobox
(
edit
)
Template:Infobox software
(
edit
)
Template:Main other
(
edit
)
Template:Official website
(
edit
)
Template:Reflist
(
edit
)
Template:Release date
(
edit
)
Template:Short description
(
edit
)
Template:Template other
(
edit
)
Template:X86 assembly topics
(
edit
)