首页 > 解决方案 > NASM、TASM 和 MASM 之间的区别

问题描述

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

标签: linuxwindowsnasmmasmtasm

解决方案


TASM、MASM 和 NASM 是 x86 汇编器。

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

所有这些汇编程序都将 x86 指令集作为输入。然而,这并不意味着汇编源文件是相同且兼容的。

指令语法

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

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

特定于汇编器的语法

汇编器对影响汇编过程、宏和注释的指令有自己的语法。这些通常因汇编程序而异。

兼容性

TASM 可以在“MASM 模式”下组装 MASM 源。

NASM 可以在“TASM 模式”下组装 TASM 代码。因此,理论上,您可以使用 TASM 代码并在 Linux 上使用该模式使用 NASM 组装它们。当然,代码可能仍需要调整。如果代码具有操作系统依赖性,那么在您从 Windows 迁移到 Linux 时,这些都需要您注意。


推荐阅读