2017-08-28 3 views
3

Le Microsoft operators reference for MASM montre un opérateur :: dans la section Divers. Le lien pour cet article ouvre la page pour un ;; operator.Est-ce que MASM a un opérateur ::?

Je ne suis pas si c'est un nom erroné dans la table ou un lien erroné sur l'article. Il y a plusieurs autres articles qui ont des liens erronés.

Est-ce que MASM a un opérateur ::? Que fait-il?

+4

[ici] (https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/masm-numbers-and-operators#symbols_in_masm_expressions) 'sa lien pour masm qui le mentionne. –

+0

Matériau nettement meilleur que dans les documents MASM @DavidWohlferd. Bon. – Lycan

+2

@DavidWohlferd Ce lien est pour les outils de débogage de Microsoft, et l'utilisation de l'opérateur '::' pour "indiquer les membres d'une classe" n'est pas supportée par MASM lui-même. –

Répondre

6

Oui, c'est le cas.

J'ai trouvé une référence dans un ancien TASM 4 manual (Page 124 du document imprimé, 135 du PDF).

Il est utilisé pour définir des étiquettes avec une portée plus large que la procédure qu'ils sont définis dans

Tenir compte.

foo PROC 

lbl: 
    ret 

foo ENDP 

bar PROC 
jmp lbl  ;Undefined symbol lbl 
bar ENDP 

Cela n'assemble pas dans MASM car lbl est dans une autre procédure.
Cependant, ceci:

foo PROC 

lbl:: 
    ret 

foo ENDP 

bar PROC 
jmp lbl  ;Fine 
bar ENDP 

fait. Autant que je me souvienne, les étiquettes dans TASM/NASM se comportent différemment, elles n'ont pas de portée (TASM peut être fait pour émuler MASM cependant).

+0

Merci. Aime lire votre matériel BTW. Vraiment satisfaisant comment vous êtes commandé. – Lycan

+0

Dans NASM, 'lbl:' a une portée de fichier. Les labels locaux commencent par un '.' (vous écrirez donc' .lbl: '), mais ils ne sont vraiment que du sucre syntaxique pour' foo.lbl'. Donc, après 'bar:', vous pouvez toujours écrire 'jmp foo.lbl'. (NASM n'a aucun truc PROC Vous écrivez simplement 'global foo' si vous voulez que l'étiquette' foo' soit exportée dans la table des symboles.) –

+1

@PeterCordes C'est pour ça que je l'aime! ;) –

5

Le Guide du programmeur MASM de livre de 1996 de Microsoft 6.1 révèle quelques sémantiques supplémentaires.

Un double-point :: peut être utilisé pour passer un pointeur éloigné produit à partir de valeurs de registre en tant qu'argument dans un appel de procédure. Page 157 décrit:

Vous pouvez passer un pointeur FAR dans un segment :: décalage paire, comme indiqué ci-après. Notez l'utilisation de doubles-points pour séparer la paire de registres.
..
INVOKE SomeProc, ES::BX, arg1, arg2