Tool Comparison
跳到导航
跳到搜索
这里是各种操作系统开发工具的比较。
= x86汇编程序 =
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 |
- ↑ 使用
.intel_syntax
指令。 几个操作码仍将使用AT&T的名称。 - ↑ 虽然GAS通常只编写 “纯” 32位i386代码,但它具有 有限支持,用于编写以实际模式或16位受保护模式代码段运行的代码。
- ↑ 你必须在 (汇编器的) 编译时选择指令集。 GAS不能一次汇编多个操作模式,即如果你想混合两个模式,你需要一个GAS 32bit和一个GAS 64bit。
- ↑ 64位支持仅在NASM 2.X中可用。
- ↑ 64位支持仅在名为ml64的单独可执行文件中可用。
- ↑ Sol_Asm使用自己的语法,它看起来像Intel语法。
编译器
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可以生产
.COM
文件。 - ↑ Smaller C 并不是真正为支持16位和64位cpu而设计的。
链接器
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 |