Tool Comparison
Jump to navigation
Jump to search
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 | Yes | 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 |
| AS86 | No | Yes | No | No | No | Yes | Yes | Yes | No |
| llvm-mc | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes |
- ↑ using the
.intel_syntaxdirective. 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 (of the assembler). GAS can not assemble for more than one operating mode at a time, i.e. you would need one GAS for 32bit and one GAS for 64bit if you'd want to mix those two.
- ↑ 64-bit support is only available in NASM 2.x.
- ↑ 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 | Yes |
| Clang | Yes | Yes | Yes | No | Yes | Yes | No | 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 |
| Smaller C | Yes | Yes | Yes | Yes | Yes | No | Yes (incl. huge & unreal mode(l)s)[9] | Yes | No |
- ↑ Visual Studio can emit
.COMfiles. - ↑ Smaller C wasn't really designed to properly support 16-bit and 64-bit CPUs.
Linkers
| Name | Input | Output | Flat Binary Images | Set Code Address | Library Support | Supports Debug Info | 32bit Code | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| OMF/ OBJ | 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 | |
| smlrl | No | No | Yes | No | Yes | No | Yes | Yes | DOS/COM DOS/EXE MACH-O | Yes | Yes | Yes | No | Yes | |
| LLD | Yes | Yes | Yes | Yes | |||||||||||