2017-08-28 1 views
3

Das Microsoft operators reference for MASM zeigt einen Operator :: in dem Abschnitt Verschiedenes.Hat MASM einen Operator ::?

Der Link für diesen Artikel öffnet die Seite für eine ;; operator.

Ich bin nicht, ob dies ein falscher Name in der Tabelle oder eine falsche Verknüpfung auf dem Element ist. Es gibt mehrere andere Elemente, die falsche Links haben.

Hat MASM einen Operator ::? Was macht es?

+4

[hier] (https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/masm-numbers-and-operators#symbols_in_masm_expressions) 'sa Link für Masm, der es erwähnt. –

+0

Drastisch besseres Material als in der MASM Docs @DavidWohlverld. Gute Eins. – Lycan

+2

@DavidWohlferd Dieser Link ist für die Debugging-Tools von Microsoft, und die Verwendung des '::' -Operators zur Angabe der Member einer Klasse wird von MASM selbst nicht unterstützt. –

Antwort

6

Ja, tut es.

Ich fand einen Verweis darauf in einer alten TASM 4 manual (Seite 124 des gedruckten Dokuments, 135 der PDF).

Es wird verwendet, Etiketten mit einem breiteren Rahmen zu definieren, als das Verfahren sie in definierten

Betrachten.

foo PROC 

lbl: 
    ret 

foo ENDP 

bar PROC 
jmp lbl  ;Undefined symbol lbl 
bar ENDP 

Die in MASM zusammenbauen nicht, weil lbl in einem anderen Verfahren ist.
Dies ist jedoch:

foo PROC 

lbl:: 
    ret 

foo ENDP 

bar PROC 
jmp lbl  ;Fine 
bar ENDP 

tut.

Soweit ich mich erinnere, verhalten sich Bezeichnungen in TASM/NASM anders, sie haben keinen Geltungsbereich (TASM kann jedoch dazu gebracht werden, MASM zu emulieren).

+0

Danke. Liebe dein Material zu lesen BTW. Wirklich befriedigend wie bestellt du bist. – Lycan

+0

In NASM hat 'lbl:' Dateibereich. Lokale Labels beginnen mit einem '.' (also würden Sie' .lbl: 'schreiben), aber sie sind wirklich nur syntaktischer Zucker für' foo.lbl'. Nach 'bar:' können Sie also 'jmp foo.lbl' schreiben. (NASM hat kein PROC-Zeug. Sie schreiben einfach 'global foo', wenn Sie möchten, dass das' foo'-Etikett in die Symboltabelle exportiert wird.) –

+1

@PeterCordes Deshalb liebe ich es! ;) –

5

Die 1996 Microsoft Buch MASM Programmer's Guide 6.1 enthüllt einige zusätzliche Semantik.

Ein doppelter Doppelpunkt :: kann verwendet werden, um einen aus Registerwerten erzeugten fernen Zeiger als Argument in einem Prozeduraufruf zu übergeben. Seite 157 beschreibt es:

Sie können passieren einen FAR Zeiger in einem Segment :: Offset Paar, wie im Folgenden dargestellt. Beachten Sie die Verwendung von doppelten Doppelpunkten, um das Registerpaar zu trennen.
..
INVOKE SomeProc, ES::BX, arg1, arg2