From OSDev Wiki
This is a comparison of various operating system development tools.
x86 Assemblers
|
| Syntax
| Output Format
| Instruction Set
|
|
| AT&T
| Intel
| ELF
| a.out
| COFF
| flat
| 16 bit
| 32 bit
| 64 bit
|
| GAS
| Yes
| Yes[1]
| Yes
| Yes
| Yes
| Yes
| Yes[2]
| Yes
| Yes[3]
|
| NASM
| No
| Yes
| Yes
| Yes
| Yes
| Yes
| Yes
| Yes
| Yes[4]
|
| YASM
| Yes
| Yes
| Yes
| No
| Yes
| Yes
| Yes
| Yes
| Yes
|
| FASM
| No
| Yes
| Yes
| No
| n/a
| Yes
| Yes
| Yes
| Yes
|
| JWASM
| No
| Yes
| Yes
| No
| Yes
| Yes
| Yes
| Yes
| Yes
|
| MASM[5]
| No
| Yes
| No
| No
| Yes
| Yes
| Yes
| Yes
| Yes[6]
|
| Sol_asm
| No
| Yes[7]
| Yes
| No
| n/a
| Yes
| Yes
| Yes
| Yes
|
| WASM
| No
| Yes
| No
| No
| No
| No
| Yes
| Yes
| Yes
|
- ↑ using the
.intel_syntax directive. Several opcodes will still use the AT&T name.
- ↑ While GAS normally writes only "pure" 32-bit i386 code, it has limited support for writing code to run in real mode or in 16-bit protected mode code segments.
- ↑ You have to choose the instruction set at compile time. GAS can not assemble for more than one operating mode at a time.
- ↑ 64-bit support is only available in NASM 2.x.
- ↑ Because of the license it may be illegal to use MASM for "non-windows development"
- ↑ 64-bit support is only available in a separate executable, named ml64.
- ↑ Sol_Asm uses its own syntax, which looks like the Intel syntax.
Compilers
|
| Extensions
| Output format
|
|
| Inline Assembly
| ELF
| a.out
| flat
| PE
| COFF
| 16-bit code segments
| 32-bit code segments
| 64-bit code segments
|
| gcc
| Yes
| Yes
| Yes
| Yes
| Yes
| ?
| ?
| Yes
| Yes
|
| msvc
| Yes
| No
| No
| No[8]
| Yes
| Yes
| Version 4.X
| Yes
| Yes
|
| icl
| Yes
| No
| No
| No
| Yes
| Yes
| No
| Yes
| Yes
|
| watcom
| Yes
| No
| No
| No
| Yes
| Yes
| Yes
| Yes
| Yes
|
- ↑ Visual Studio can emit
.COM files.
Linkers
| Name
| OMF/OBJ
| Input
| Output
| Flat Binary Images
| Set Code Address
| Library Support
| Supports Debug Info
| 32bit Code
|
| Win32/ COFF
| ELF
| A.OUT
| Others
| Win32/ PE
| Win32/ DLL
| ELF
| A.OUT
| Others
|
| JLoc
| Yes
|
|
|
|
| No
| No
| No
| No
| DOS/COM
| Yes
| Yes
| No
| OMF/OBJ
| Yes
|
| ALink
| Yes
| Yes
| No
| No
| DJGPP/COFF
| Yes
| Yes
| No
| No
| DOS/COM DOS/EXE
| No
| Yes
| Yes
| No
| Yes
|
| LD
| Yes
| Yes
| Yes
| Yes
| DJGPP/COFF OMF/COFF
| Yes
| Yes
| Yes
| Yes
| various
| Yes
| Yes
| Yes
| ECOFF DWARF STABS
| Yes
|
| TLink
| Yes
| Yes
| No
| No
|
| Yes
| Yes
| No
| No
| DOS/EXE DOS/COM
| No
| Yes
| Yes
| OMF/OBJ
| Yes
|
| Link
| Yes
| Yes
| No
| No
|
| Yes
| Yes
| No
| No
| DOS/EXE DOS/COM LE
| No
| Yes
| Yes
| CODEVIEW DWARF
| Yes
|
| VAL
| Yes
|
|
|
|
| No
| No
| No
| No
| DOS/EXE
| No
| No
| No
| Yes
| No
|
| WLink
| Yes
| Yes
| Yes
| No
|
| Yes
| Yes
| Yes
| No
| DOS/EXE DOS/COM LE Pharlap Novell_NLM Causeway QNX
| Yes
| Yes
| Yes
| WATCOM CODEVIEW DWARF
| Yes
|