2012-01-01 5 views

Odpowiedz

12

%define jest o wiele bardziej wydajny sposób prowadzenia makra, podobny do preprocesor C. W twoim uproszczonym przypadku nie ma dużej różnicy, użycie x w kodzie źródłowym spowoduje zastąpienie stałej 3. Istnieje subtelna różnica w tym, że instrukcje equ są oceniane raz, gdy są po raz pierwszy czytane, a makra są oceniane, gdy napotykają w źródle.

Można tam zobaczyć różnicę między dwoma fragmentów stwierdzeniem:

addr equ  $ 
     %define addr $ 

W takim przypadku addr, gdy napotkał w kodzie, mają różne wartości. W pierwszym przypadku $ będzie umiejscowieniem pozycji montażowej w miejscu, w którym znajduje się equ. Innymi słowy, gdzie jest zdefiniowany .

W drugim przypadku, ocenia miejsce montażu w miejscu, w którym użyto addr, czyli .

Gdzie %define świeci się z czymś takim:

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

lub:

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

(lub nawet znacznie bardziej skomplikowane rzeczy), które pozwalają na przekazywanie parametrów do makra, coś nie jest możliwe z prostym equ.