NASM、TASM 和 MASM 之间的区别

Difference between NASM, TASM, & MASM

有人可以解释一下 masm、tasm 和 nasm 之间的区别吗? 为什么我不能 运行 在 linux 上输入 tasm 代码?他们是不同的语言吗? 我认为汇编语言对于所有系统都是独一无二的。

TASM、MASM 和 NASM 是 x86 assemblers.

Borland Turbo Assembler (TASM) 和 Microsoft Macro Assembler (MASM) DOS/Windows-based,Netwide Assembler (NASM) 也可用于其他平台。 TASM 产生 16-bit/32-bit 输出,MASM 和 NASM 也产生 64 位输出。

所有这些 assemblers 都将 x86 指令集作为输入。但是,这并不意味着 assembler 个源文件相同且兼容。

指令语法

汇编程序希望使用 Intel 指令集文档中的原始语法 - Intel 语法 - 或 AT&T 贝尔实验室开发的所谓 AT&T 语法。 AT&T 使用 mov src, dest,英特尔使用 mov dest, src,以及其他差异。

Windows assemblers 更喜欢 Intel 语法(TASM、MASM),大多数 Linux/UNIX assemblers 使用 AT&T。 NASM 使用 Intel 语法的变体。

特定于汇编程序的语法

汇编程序对影响汇编过程、宏和注释的指令有自己的语法。这些通常不同于 assembler 到 assembler.

兼容性

TASM 可以 assemble "MASM mode" 中的 MASM 源。

NASM 可以 assemble "TASM mode" 中的 TASM 代码。因此,理论上,您可以使用该模式在 Linux 上使用 NASM 获取 TASM 代码和 assemble 它们。当然,代码可能仍需要调整。如果代码具有 OS 依赖项,则在从 Windows 移动到 Linux.

时需要您注意这些