TASM代码可以在NASM上运行,反之亦然?

时间:2015-08-05 22:39:18

标签: assembly nasm tasm

我正在上一门关于计算机组织和架构的课程,作为课程的一部分,我们必须学习汇编语言。他们告诉我们安装NASM,但是TASM和MASM也是完全可以接受的,尽管如果我遇到后两者问题他们也无济于事。

我在Windows 7旗舰版64位上,因此NASM无法正常工作。在尝试了两天找到解决方案让它在我的电脑上运行后,我终于放弃了。现在我用DOSBox运行TASM。

所以我的问题是:

NASM代码样本会让我在TASM上运行吗?如果我开始学习TASM教程,即使用NASM编译它,我也会学习他们正在教授的完全相同的组装吗?

我不想因为我习惯了不同的编译器而在考试中得到错误答案。

1 个答案:

答案 0 :(得分:2)

TASM和NASM是非常不同的汇编程序。

  • TASM非常类型敏感;完全没有NASM。
  • NASM大量使用宏; TASM宏非常笨重。
  • NASM支持本地符号(使用.); (大多数)TASM符号是全球性的。

正如@Peter Cordes所指出的那样:

  • TASM和NASM有不同的指定数字的方式(TASM不能使用0x前缀);
  • TASM允许可怕的mov ax, address,这意味着什么是AT address,而不是address - 作为一个值。没错,这是为了与微软(甚至更糟糕的)MASM兼容。

要避免使用最后一个,总是使用mov ax,offset addressmov ax,[address]以避免任何歧义。

虽然汇编程序的实际操作码和寄存器是相同的,但它周围的所有额外定义都使用完全不同的语法。

我使用TASM几十年了。现在我被迫使用NASM - 和I don't like it very much ......