Freigeben über


Assemblerausdrücke

Dieses Thema gilt für folgende Anwendungsbereiche:

Edition

Visual Basic

C#

F#

C++

Web Developer

Express

Thema ist nicht vorhanden Thema ist nicht vorhanden Thema ist nicht vorhanden

Nur "Systemeigen"

Thema ist nicht vorhanden

Pro, Premium und Ultimate

Thema ist nicht vorhanden Thema ist nicht vorhanden Thema ist nicht vorhanden

Nur "Systemeigen"

Thema ist nicht vorhanden

Mit Ausnahme einiger Einschränkungen können Ausdrücke in Assemblersprache korrekt vom Debugger ausgewertet werden. Die für einige Ausdrücke in Assemblersprache verwendete Syntax unterscheidet sich von der Syntax, die in Entwicklungssystemen verwendet wird, die auf Assemblersprache basieren, z. B. Microsoft Macro Assembler (MASM).

Speicheroperatoren

Speicheroperatoren sind unäre Operatoren, die das Ergebnis einer direkten Speicheroperation zurückgeben. Diese Operatoren werden hauptsächlich zum Debuggen von Code in Assemblersprache verwendet.

{BY | WO | DW} address

Der Operator BY gibt eine kurze ganze Zahl zurück, die das erste Byte an der Adresse enthält. Dieser Operator simuliert BYTE PTR.

Der Operator WO gibt eine kurze ganze Zahl zurück, die den Wert des Worts (zwei Bytes) an der Adresse enthält. Dieser Operator simuliert die WORD PTR-Operation von Microsoft Macro Assembler. Der Operator DW gibt eine lange ganze Zahl zurück, die den Wert der ersten vier Bytes an der Adresse enthält. Dieser Operator simuliert DWORD PTR.

Durch den Formatbezeichner x, der in einigen dieser Beispiele verwendet wird, wird das Ergebnis im Hexadezimalformat angezeigt.

Beispiele

  • Zeigt das erste Byte an der Adresse der sum-Variablen an:

    BY sum

  • Zeigt das erste Wort an der Adresse der new_set-Variablen an:

    WO new_set

  • Zeigt das Doppelwort an der Adresse von sum an:

    DW sum

  • Zeigt das Byte, auf das das EBP-Register zeigt, mit einem Index von 6 an:

    BY ebp+6,x

  • Zeigt das Wort an, auf das der Stapelzeiger zeigt (das letzte auf den Stapel verschobene Wort):

    WO esp,x

  • Zeigt das Doppelwort an, auf das das ESI-Register zeigt:

    DW esi,x

Indirekte Registeradressierung

Der Debugger akzeptiert keine eckigen Klammern ([ ]) zur Angabe einer Speicheradresse, auf die ein Register zeigt. Verwenden Sie stattdessen die Operatoren BY, WO und DW, um auf die entsprechenden Byte-, Wort- oder Doppelwortwerte zu verweisen.

MASM-Ausdruck

Debuggerausdruck

C++-Ausdruck

BYTE PTR [bx]

BY ebx

*(unsigned char) ebx

WORD PTR [bp]

WO ebp

*(unsigned short *) ebp

DWORD PTR [bp]

DW ebp

*(unsigned long *) ebp

Indirekte Registeradressierung mit Index

Um Basis-, Index- oder Basis-Index-Operationen im indirekten Modus unter Verwendung eines Indexes auszuführen, verwenden Sie die Operatoren BY, WO oder DW in Verbindung mit dem Additionsoperator.

MASM-Ausdruck

Debuggerausdruck

BYTE PTR [edi+6]

BY edi+6

BYTE PTR Test[ebx]

BY &Test+ebx

WORD PTR [esi][ebp+6]

WO esi+ebp+6

DWORD PTR [ebx][esi]

DW ebx+esi

Adresse einer Variablen

Verwenden Sie den C-Adressoperator (&) anstelle des Operators OFFSET von MASM.

MASM-Ausdruck

Debuggerausdruck

OFFSET Var

&Var

Operator PTR

Verwenden Sie Typumwandlungen oder die Operatoren BY, WO und DW in Verbindung mit dem Adressoperator (&), um den Operator PTR der Assemblersprache zu ersetzen.

MASM-Ausdruck

Debuggerausdruck

BYTE PTR Var

BY &Var

*(unsigned char*)

&Var

WORD PTR Var

WO &Var

DWORD PTR Var

DW &Var

*(unsigned long*)

&Var

Zeichenfolgen in Assemblersprache

Fügen Sie den Formatbezeichner für Zeichenfolgen ,s hinter dem Variablennamen ein.

MASM-Ausdruck

Debuggerausdruck

String

String,s

Da C-Zeichenfolgen mit einem Nullzeichen (ASCII 0) enden, zeigt der Debugger alle Zeichen vom ersten Byte der Variablen bis zum nächsten Nullbyte im Arbeitsspeicher an, sobald eine Zeichenfolgenanzeige angefordert wird. Wenn Sie ein in Assemblersprache geschriebenes Programm debuggen und Zeichenfolgen im Überwachungsfenster anzeigen möchten, sollten Sie Zeichenfolgen mit einem Nullzeichen beenden. Auf NULL endende oder nicht abgeschlossene Zeichenfolgen können mit dem Fenster Arbeitsspeicher auf einfache Weise angezeigt werden.

Array- und Strukturelemente

Stellen Sie einem Arraynamen den Adressoperator (&) voran, und fügen Sie den gewünschten Offset hinzu. Der Offset kann ein Ausdruck, eine Zahl, ein Registername oder eine Variable sein.

Die folgenden Beispiele verdeutlichen die Vorgehensweise für Byte-, Wort- und Doppelwortarrays.

MASM-Ausdruck

Debuggerausdruck

String[12]

BY &String+12*(&String+12)

aWords[bx+di]

WO &aWords+bx+di*(unsigned*)(&aWords+bx+di)

aDWords[bx+4]

DW &aDWords+bx+4*(unsigned long*)(&aDWords+bx+4)

Siehe auch

Weitere Ressourcen

Ausdrücke in systemeigenem C++