Не избыточен ли PTR в этой инструкции: CALL DWORD PTR [XXXXXXXX] - PullRequest
1 голос
/ 21 июня 2010

Не является ли PTR избыточным в этой инструкции CALL DWORD PTR [XXXXXXXX]. Если инструкция была CALL DWORD [XXXXXXXX] Это также говорит: вызовите значение длины DWORD, расположенное по адресу XXXXXXXX.

Почему тогда PTR?

Ответы [ 2 ]

0 голосов
/ 22 июня 2010

На языке masm DWORD PTR - это переопределение указателя, то есть то, что вы обычно называете приведением.По сути, это означает, что «считать адрес XXXXXXXX указателем DWORD».

masm фактически печатает свои элементы данных.Таким образом, если XXXXXXXX был ранее определен как

XXXXXXXX DWORD SomeAddress   ; Presumably a function entry point.

, то достаточно

 CALL XXXXXXXX

, и он сгенерирует тот же код, что и

  CALL DWORD PTR XXXXXXXX

OTOH, если для некоторыхпричина, XXXXXXXX вместо этого были определены как

XXXXXXXX  WORD ?
          WORD ?

, тогда единственный способ заставить MASM собрать вызов XXXXXXXX без генерирования ошибки mams был бы

  CALL DWORD PTR XXXXXXXX

Квадратные скобки []в этом случае ничего не приносите на тарелку, кстати.Для некоторых других ассемблеров они указывают на косвенность.В приведенных выше примерах masm не требует их.В других контекстах (выражения base + index) они используются для заключения в регистры индекса и / или значений.

Oh, а между прочим:

  CALL DWORD [XXXXXXXX]

- сегодня необычный синтаксис masm (per masm 6 книг документации и их примеры) и, возможно, допуск на совместимость, соответствующий некоторому старому синтаксису masm.

0 голосов
/ 21 июня 2010

Если я правильно помню, есть оператор "PTR", потому что в MASM бывают ситуации, когда вы можете иметь выражение, которое выглядит как обычное значение, но на самом деле является указателем.

Если оба утверждения работают для вас, все, что я могу сказать, это собрать их оба и убедиться, что они оба генерируют одинаковые байты. Это должно быть одно и то же, учитывая, что «xxxxxxxx» в [xxxxxxxx] по определению является указателем, но прошло уже много времени с тех пор, как я последний раз кодировал в MASM. (NASM, который я склоняюсь, гораздо менее запутан в таких вещах.)

...