Объявление и использование типов указателей мало используются в MASM. Типы в MASM в основном являются только размерами и используются только для определения размеров объектов и операндов и их совместимости по размеру. Если вы генерируете листинг файла при сборке пример кода (после добавления .MODEL FLAT
и END
директивы так компонует), вы увидите, что тип ptr1
, ptr2
и ptr3
все DWORD:
Types:
N a m e Size Attr
PBYTE . . . . . . . . . . . . . 00000004 Near32 PTR Byte
PTYPE . . . . . . . . . . . . . 00000004 Near32 PTR
PWORD . . . . . . . . . . . . . 00000004 Near32 PTR Word
...
Symbols:
N a m e Type Value Attr
...
ptr_1 . . . . . . . . . . . . . DWord 00000003 _DATA
ptr_2 . . . . . . . . . . . . . DWord 00000007 _DATA
ptr_3 . . . . . . . . . . . . . DWord 0000000B _DATA
Единственное Я вижу, что типы указателей, которые могут сделать их полезными, - это тот факт, что они будут автоматически изменяться в зависимости от модели памяти. Итак, если вы соберете свой пример с .MODEL SMALL
вместо .MODEL FLAT
, то типы ptr1
, ptr2
и ptr3
станут СЛОВО вместо DWORD. Аналогично, если вы удалите директиву модели и соберите ее с x64-версией MASM, типы этих символов станут QWORD. Однако выполнение любой из этих вещей показывает, что это не так полезно, как кажется, потому что команды MOV EAX, ...
в вашем примере кода будут генерировать ошибки из-за несоответствия размера операнда. На практике много другого кода нужно будет переписать, чтобы приспособиться к изменению размера указателя.
Другая возможность заключается в том, что типы указателей каким-то образом будут использоваться в макросах, чтобы сделать что-то полезное, но я не могу понять, что это будет. Даже в том, что касается документации, использование типов указателей сомнительно, так как другие читатели не будут знать, что означает PBYTE
или PTYPE
, не просматривая код для определения. Я бы не рекомендовал их использовать.
разве вы не задали этот вопрос? он сообщает ассемблеру, какую команду генерировать. прочитайте документацию Intel, прежде чем снова задавать этот вопрос. –
кто-то просто спросил об этом на этой неделе ... –
Пожалуйста, укажите _exact инструкцию MASM_, в которой эти три директивы, похоже, ведут себя одинаково! – zx485