Tool Comparison: Difference between revisions
Jump to navigation
Jump to search
[unchecked revision] | [unchecked revision] |
Content deleted Content added
annotated nasm+64bit combination (not an official release) |
m use cite extension |
||
(32 intermediate revisions by 17 users not shown) | |||
Line 1:
This is a comparison of various
==x86 Assemblers==
{| {{wikitable}}
|-
!
! colspan="2" | Syntax
! colspan="
! colspan="3" | Instruction Set
|-
Line 15 ⟶ 14:
! [[ELF]]
! [[a.out]]
! [[COFF]]
! flat
! 16 bit
Line 22:
! [[GAS]]
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}<ref name="note3" group="Note" />
|-
! [[NASM]]
Line 38 ⟶ 39:
| {{Yes}}
| {{Yes}}
| {{Yes
| {{Yes}}<ref name="note4" group="Note" />
|-
! [[YASM]]
Line 45 ⟶ 47:
| {{Yes}}
| {{No}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
Line 57 ⟶ 60:
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
|-
! [[JWASM]]
| {{No}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
|-
! [[MASM]]<ref name="note5" group="Note" />
| {{No}}
| {{Yes}}
| {{No}}
| {{No}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}<ref name="note6" group="Note" />
|-
! [[Sol_asm]]
| {{No}}
| {{Yes}}
| {{Yes}}
| {{No}}
| n/a
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
|-
! [[AS86]]
| {{No}}
| {{Yes}}
| {{No}}
| {{No}}
| {{No}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{No}}
|-
! [[LLVM|llvm-mc]]
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
| {{Yes}}
| {{Yes}}
|}
<references group="Note">
<ref name="note1">Using the <code>.intel_syntax</code> directive. Several opcodes will still use the AT&T name.</ref>
<ref name="note3">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.</ref>
<ref name="note4">64-bit support is only available in NASM 2.x.</ref>
<ref name="note5">64-bit support is only available in a separate executable, named ml64.</ref>
<ref name="note6">Sol_Asm uses its own syntax, which looks like the Intel syntax.</ref>
</references>
==Compilers==
Line 74 ⟶ 134:
!
! Extensions
! colspan=
|-
!
Line 82 ⟶ 142:
! flat
! [[PE]]
! COFF
! 16-bit code segments
! 32-bit code segments
! 64-bit code segments
|-
!
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| ?
| {{Yes}}
| {{Yes}}
|-
! [[LLVM|Clang]]
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{Yes}}
| {{Yes}}
|-
! msvc
| {{Yes}}
| {{No}}
| {{No}}
| {{No}}<ref name="note7" group="Note" />
| {{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)<ref name="note8" group="Note" />
| {{Yes}}
| {{No}}
|}
<references group="Note">
<ref name="note7">Visual Studio can emit <code>.COM</code> files.</ref>
<ref name="note8">Smaller C [https://github.com/alexfru/SmallerC/pull/25#issuecomment-516694067| wasn't really designed to properly support 16-bit and 64-bit CPUs].</ref>
</references>
==Linkers==
{| {{wikitable}}
|-
! rowspan=2 | Name
! colspan=5 | Input
! colspan=5 | Output
! rowspan=2 | Flat Binary Images
! rowspan=2 | Set Code Address
! rowspan=2 | Library Support
! rowspan=2 | Supports Debug Info
! rowspan=2 | 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}}
Line 125 ⟶ 261:
! [[ALink]]
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
| DJGPP/COFF
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
| DOS/COM DOS/EXE
| {{No}}
| {{Yes}}
Line 135 ⟶ 278:
! [[LD]]
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| DJGPP/COFF OMF/COFF
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| various
| {{Yes}}
| {{Yes}}
Line 145 ⟶ 295:
! [[TLink]]
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
|
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
| DOS/EXE DOS/COM
| {{No}}
| {{Yes}}
Line 155 ⟶ 312:
! [[Link]]
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
|
| {{Yes}}
| {{Yes}}
| {{No}}
| {{No}}
| DOS/EXE DOS/COM LE
| {{No}}
| {{Yes}}
Line 166 ⟶ 330:
| {{Yes}}
|
|
|
|
| {{No}}
| {{No}}
| {{No}}
| {{No}}
| DOS/EXE
| {{No}}
Line 175 ⟶ 346:
! [[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}}
|-
! [[LLVM|LLD]]
|
| {{Yes}}
| {{Yes}}
|
|
|
|
|
|
|
|
|
| {{Yes}}
|
| {{Yes}}
|}
|
Latest revision as of 11:53, 17 June 2024
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[Note 1] | Yes | Yes | Yes | Yes | Yes[Note 2] | Yes | Yes[Note 3] |
NASM | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes[Note 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[Note 5] | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes[Note 6] |
Sol_asm | No | Yes | 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_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 (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[Note 1] | 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)[Note 2] | Yes | No |
- ↑ Visual Studio can emit
.COM
files. - ↑ 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 |