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 将永远定义。为避免使用名称 X
和 Y
,你需要使用更明确的名称:
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]