Die Deklaration und Verwendung von Zeigertypen hat wenig Nutzen in MASM. Typen in MASM sind im Grunde genommen nur Größen und dienen nur dazu, Größen von Objekten und Operanden und deren Kompatibilität in der Größe zu bestimmen. Wenn Sie eine Listendatei erzeugen, während die Beispielcode Montage (nach der Zugabe von .MODEL FLAT
und END
Richtlinien, damit es montiert), werden Sie sehen, dass die Art der ptr1
, ptr2
und ptr3
sind alle 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
Das einzige, was Ich kann die ungefähren Zeigertypen sehen, die sie nützlich machen, ist die Tatsache, dass sie sich automatisch in der Größe entsprechend dem Speichermodell ändern, das in Kraft ist. Wenn Sie also Ihr Beispiel mit .MODEL SMALL
anstelle von .MODEL FLAT
zusammenbauen, werden die Typen ptr1
, ptr2
und ptr3
WORD anstelle von DWORD. Wenn Sie die Modellanweisung löschen und sie mit der x64-Version von MASM zusammensetzen, werden die Typen dieser Symbole zu QWORD. Wenn Sie jedoch eines dieser Dinge tun, wird Ihnen klar, dass es nicht so nützlich ist, wie es sich anhört, denn die Anweisungen in Ihrem Beispielcode erzeugen dann Fehler, weil die Operandengröße nicht übereinstimmt. In der Praxis müsste noch viel anderer Code neu geschrieben werden, um ihn an die Änderung der Zeigergröße anzupassen.
Eine andere Möglichkeit ist, dass die Zeigertypen irgendwie in Makros verwendet werden, um etwas Nützliches zu tun, aber ich kann nicht wirklich sehen, was das wäre. Auch als Dokumentation ist die Verwendung der Zeigertypen zweifelhaft, da andere Leser nicht wissen, was PBYTE
oder PTYPE
bedeuten, ohne den Code nach ihrer Definition zu durchsuchen. Ich würde nicht empfehlen, sie zu benutzen.
hast du diese Frage nicht gestellt? Es teilt dem Assembler mit, welche Anweisung generiert werden soll. Bitte lesen Sie die intel-Dokumentation, bevor Sie diese Frage erneut stellen. –
jemand hat das gerade diese Woche gefragt ... –
Bitte fügen Sie die _exact MASM-Anweisung_, in der diese drei Direktiven scheinen sich auf die gleiche Weise zu verhalten! – zx485