La déclaration et l'utilisation de types de pointeurs ont peu d'utilité dans MASM. Les types dans MASM ne sont essentiellement que des tailles et ne sont utilisés que pour déterminer la taille des objets et des opérandes et leur compatibilité en termes de taille. Si vous créez un fichier de liste lors de l'assemblage de votre code d'exemple (après avoir ajouté .MODEL FLAT
et END
directives afin qu'il rassemble), vous verrez que le type de ptr1
, ptr2
et ptr3
sont tous 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
La seule chose Je peux voir les types de pointeurs à propos qui pourraient les rendre utiles est le fait qu'ils changeront automatiquement de taille en fonction du modèle de mémoire en vigueur. Donc vous si vous assemblez votre exemple avec .MODEL SMALL
au lieu de .MODEL FLAT
les types de ptr1
, ptr2
et ptr3
deviennent WORD au lieu de DWORD. De même, si vous supprimez la directive model et l'assemblez avec la version x64 de MASM, les types de ces symboles deviennent QWORD. Toutefois, si vous faites l'une ou l'autre de ces choses, cela n'est pas aussi utile que cela en a l'air, car les instructions MOV EAX, ...
dans votre exemple de code généreront alors des erreurs en raison de la différence de taille d'opérande. En pratique, beaucoup d'autres codes doivent encore être réécrits pour s'adapter à la modification de la taille du pointeur.
Une autre possibilité est que les types de pointeurs seraient en quelque sorte utilisés dans les macros pour faire quelque chose d'utile, mais je ne peux pas vraiment voir ce que ce serait. Même en tant que documentation, l'utilisation des types de pointeurs est douteuse, car les autres lecteurs ne sauront pas ce que PBYTE
ou PTYPE
veulent dire sans chercher dans le code pour leur définition. Je ne recommanderais pas de les utiliser.
n'avez-vous pas posé cette question? il indique à l'assembleur quelle instruction générer. Veuillez lire la documentation d'Intel avant de poser à nouveau cette question. –
quelqu'un vient de poser cette question cette semaine ... –
Veuillez inclure l'instruction MASM _exact_ dans laquelle ces trois directives semblent se comporter de la même manière! – zx485