Kod:Jaka jest różnica między% define i equ w NASM?
%define x 0x03
x equ 0x03
Jaka jest różnica między nimi?
Kod:Jaka jest różnica między% define i equ w NASM?
%define x 0x03
x equ 0x03
Jaka jest różnica między nimi?
%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
.