2012-01-01 4 views

답변

12

%define은 C 프리 프로세서와 비슷한 매크로를 수행하는 훨씬 더 강력한 방법입니다. 귀하의 단순한 경우에는 많은 차이가 없으며 x을 소스 코드에 사용하면 상수가 3으로 대체됩니다. equ 문은 매크로가 처음으로 읽혀질 때마다 평가되고 매크로에서 %define 매크로가 발견 될 때마다 평가된다는 점에서 미묘한 차이점이 있습니다.

당신은 두 개의 문 조각 사이에이 차이를 볼 수있다 :이 경우

addr equ  $ 
     %define addr $ 

, addr 코드에서 발생하는 경우, 다른 값을 가질 것이다. 첫 번째 경우 $equ이있는 위치에서 어셈블리 위치의 위치가됩니다. 다시 말해, 이 정의 된 곳입니다.

두 번째 경우에는 addr인 곳에서 조립 위치로 평가됩니다. 당신이 당신의 매크로에 매개 변수를 전달할 수 있도록

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

(또는 훨씬 더 복잡한 일) 가능하지, 뭔가 :

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

또는 : %define이 빛나는

같은 것을 함께 단순한 equ.

관련 문제