Netwide Assembler - NASM

NASM 是迄今为止 x86 架构中移植最多的汇编程序 - 它几乎适用于基于 x86 的所有操作系统(甚至包含在 MacOS 中),并且可作为其他平台上的跨平台汇编程序使用。

这个汇编程序使用 Intel 语法,但它与其他语法不同,因为它主要关注自己的语言 - 这允许程序员使用更简单的定义构建更复杂的表达式,从而允许创建新的指令

不幸的是,这个强大的功能需要付出代价:数据类型会妨碍通用指令,因此不会强制执行数据输入。

response:    db       'Y'     ; Character that user typed

             cmp      response, 'N' ; *** Error! Unknown size!
             cmp byte response, 'N' ; That's better!
             cmp      response, ax  ; No error!

但是,NASM 引入了其他人缺少的一个功能:范围符号名称。当你在其他汇编程序中定义符号时,该名称在其余代码中可用 - 但使用该名称,用符号污染全局名称空间。

例如(使用 NASM 语法):

       STRUC     Point
X      resw      1
Y      resw      1
       ENDSTRUC

在此定义之后,X 和 Y 将永远定义。为避免使用名称 XY,你需要使用更明确的名称:

       STRUC     Point
Pt_X   resw      1
Pt_Y   resw      1
       ENDSTRUC

但 NASM 提供了另一种选择。通过利用其局部变量概念,你可以定义需要在以后的引用中指定包含结构的结构字段:

       STRUC      Point
.X     resw       1
.Y     resw       1
       ENDSTRUC

Cursor ISTRUC     Point
       ENDISTRUC

       mov        ax,[Cursor+Point.X]
       mov        dx,[Cursor+Point.Y]

不幸的是,因为 NASM 没有跟踪类型,所以你不能使用更自然的语法:

       mov        ax,[Cursor.X]
       mov        dx,[Cursor.Y]