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]