2012-01-01 90 views

回答

12

%define是一種更強大的宏執行方式,類似於C預處理器。在你簡單化的情況下,沒有太大的區別,在源代碼中使用x將導致替換常量3equ語句在初次讀取時會進行一次評估,並在源中遇到%define宏時進行評估,這兩者之間存在細微差別。

你可以看到區別有兩個說法之間的片段:

addr equ  $ 
     %define addr $ 

在這種情況下,addr,在代碼中遇到時,會有不同的值。在第一種情況下,$將是equ所在位置的裝配位置的位置。換句話說,它定義的是

在第二種情況下,它使用addr的地方評估裝配位置。

哪裏%define閃耀是這樣的:

%define thricexplusy(x,y) (3 * x + y) 

或:

%define ctrl(c) (c & 0x1F) 
: : 
mov  al, ctrl('z') 

(甚至是相當複雜的東西),它允許您將參數傳遞到您的宏,什麼不可能用簡單的equ