2010-06-21 2 views

답변

0

내가 기억한다면, "PTR"연산자가 있습니다. MASM에서는 일반 값처럼 보이지만 실제로는 포인터 인 표현식을 사용할 수있는 경우가 있기 때문입니다.

두 문장 모두 당신을 위해 작동한다면, 내가 말할 수있는 건, 그것들을 모두 조립해서 둘 다 같은 바이트를 생성하는지 확인하는 것입니다. 그것들은 똑같은 것이어야한다. 왜냐하면 [xxxxxxxx]의 "xxxxxxxx"는 정의상 포인터이지만, 마침내 MASM으로 코딩 된 이후로 꽤 오랜 시간이 걸렸다. (내가 선호하는 NASM은 그런 것들에 대해 훨씬 덜 혼란 스럽습니다.)

0

masm 용어에서 DWORD PTR은 일반적으로 캐스트라고하는 IOW 포인터 오버라이드입니다. 기본적으로 "XXXXXXXX 주소를 DWORD 포인터로 간주합니다"라는 의미입니다.

masm은 실제로 데이터 항목을 입력합니다. XXXXXXXX는 이전에 다음

XXXXXXXX DWORD SomeAddress ; Presumably a function entry point. 

CALL XXXXXXXX 

로 정의 된 그래서 경우에 충분하고 어떤 이유로, XXXXXXXX 대신 정의 된 경우

CALL DWORD PTR XXXXXXXX 

OTOH, 같은 코드를 생성합니다 예 :

XXXXXXXX WORD ? 
      WORD ? 

다음 유일한 방법은 MASM이

CALL DWORD PTR XXXXXXXX 

대괄호 []를 BTW,이 경우 플레이트에 아무것도 가져 오지 않는 일 것 MAMS 오류를 생성하지 않고 XXXXXXXX로 전화를 조립 얻을 수 있습니다. 다른 어셈블러에서는 간접 지정을 나타냅니다. 위의 예제에서, masm은 필요하지 않습니다. 다른 컨텍스트 (기본 + 인덱스 식)에서는 인덱스 레지스터 및/또는 값을 묶는 데 사용됩니다.

아, 그리고 BTW :

CALL DWORD [XXXXXXXX] 

은 (MASM 6 문서 책과 예제 당) 특이한 MASM 구문 및 일부 오래된 MASM 구문에 해당 아마 호환성 수당 오늘입니다.