天天看點

nasm預處理器(3)

nasm提供一個限定符.nolist,可以包含它到一個宏定義中,這樣該宏就不會在清單檔案中被展開;限定符 .nolist直接放到參數後面:

條件彙編

和c預處理器類似,nasm允許對一段源代碼隻在某特定條件滿足時進行彙編:

%ifdef和 %ifndef 測試單行宏是否存在,在分支測試中也有類似的%elifdef和%elifndef

%ifmacro測試多行宏是否存在,同樣存在和判斷單行宏類似的%ifnmacro、%elifmacro和%elifnmacro

%ifctx ctxname 測試上下文棧,當與處理器上下文棧中頂部的上下文為ctxname時條件成立。

%ifidn和%ifidni當且僅當文本相同時才會使代碼彙編,2段文本在空格個數的不同會被忽略。後者是前者的大小寫不敏感版本。

%ifid 當參數為記号時條件成立

%ifnum 當參數為數字時條件成立

%ifstr當參數為字元串時條件成立

%error産生一個錯誤

雖然nasm的times字首很有用,但不能用來作用于一個多行宏,在nasm展開宏之後times才被處理,是以nasm提供另外一種在預處理器級别的循環:%rep

%rep可以帶一個數值表達式,表示rep代碼重複的次數:

可以使用%exitrep跳出%rep循環

使用%include包含其它源檔案,被包含檔案在運作nasm所在目錄查找,可以通過在nasm指令行中使用-i增加搜尋路徑。也可以在指令行中使用-p包含一個檔案。