Tool Comparison: Difference between revisions

[unchecked revision][unchecked revision]
Content deleted Content added
Yasm supports 16bit/32bit & 64bit instructions.
m use cite extension
 
(46 intermediate revisions by 20 users not shown)
Line 1:
This is a comparison of various osdevoperating system development tools.
 
==x86 Assemblers==
<!--I'll fix this later, this is just an example-->
{| {{wikitable}}
|-
!
! colspan="2" | Syntax
! AT&T syntax
! colspan="4" | Output Format
! Intel syntax
! colspan="3" | Instruction Set
! elf
|-
! a.out
!
! [[Assembly#AT&T Syntax|AT&T]]
! [[Assembly#Intel Syntax|Intel]]
! [[ELF]]
! [[a.out]]
! [[COFF]]
! flat
! 16 bit instructions
! 32 bit instructions
! 64 bit instructions
|-
! [[gasGAS]]
| {{Yes}}
| {{Yes}}{{<ref|1}} name="note1" group="Note" />
| {{Yes}}
| {{Yes}}
| {{Yes}}
| ?
| {{Yes}}
| {{Yes}}{{<ref|2}} name="note2" group="Note" />
| {{Yes}}
| {{Yes}}<ref name="note3" group="Note" />
|-
! [[NASM]]
Line 30 ⟶ 36:
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}<ref name="note4" group="Note" />
|-
! [[YASM]]
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
|-
! [[YasmFASM]]
| {{No}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
|-
! [[JWASM]]
| {{No}}
| {{Yes}}
| {{Yes}}
| {{No}}
| {{Yes}}
| {{Yes}}
| {{Yes}}
Line 45 ⟶ 75:
| {{Yes}}
|-
! [[MASM]]<ref name="note5" group="Note" />
! [[fasm]]
| {{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">
{{note|1}} using .intel_syntax directive
<ref name="note1">Using the <code>.intel_syntax</code> directive. Several opcodes will still use the AT&T name.</ref>
<ref name="note2">While GAS normally writes only "pure" 32-bit i386 code, it has [http://sourceware.org/binutils/docs/as/i386_002d16bit.html limited support] for writing code to run in real mode or in 16-bit protected mode code segments.</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==
{| {{wikitable}}
|-
!
! Extensions
! colspan=8 | 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}}
|-
! [[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}}
| {{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}}
|-
! [[LLVM|LLD]]
|
| {{Yes}}
| {{Yes}}
|
|
|
|
|
|
|
|
|
| {{Yes}}
|
| {{Yes}}
|}
 
[[Category:Tools]]
{{note|2}} You have to choose the instruction set at compile time. GAS can not assemble for more than one operating mode at a time