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]