Condividi tramite


Espressioni in linguaggio assembly

Le informazioni contenute in questo argomento sono valide per:

Edizione

Visual Basic

C#

F#

C++

Web Developer

Express

Argomento non applicabile Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Pro, Premium e Ultimate

Argomento non applicabile Argomento non applicabile Argomento non applicabile

Solo nativo

Argomento non applicabile

Il debugger è in grado di valutare correttamente le espressioni in linguaggio assembly anche se con alcune restrizioni. La sintassi utilizzata per determinate espressioni in linguaggio assembly è diversa da quella utilizzata nei sistemi di sviluppo in linguaggio assembly, quale Microsoft Macro Assembler (MASM).

Operatori della memoria

Gli operatori relativi agli accessi alla memoria sono operatori unari che restituiscono il risultato di un'operazione di memoria diretta. Questi operatori vengono utilizzati principalmente per eseguire il debug del codice in linguaggio assembly.

{BY | WO | DW} address

L'operatore BY restituisce un valore short integer contenente il primo byte nell'indirizzo specificato. Questo operatore simula l'operazione BYTE PTR.

L'operatore WO restituisce un valore short integer contenente il valore dei primi due byte (word) nell'indirizzo specificato. Questo operatore simula l'operazione WORD PTR di Microsoft Macro Assembler. L'operatore DW restituisce un valore long integer contenente il valore dei primi quattro byte (double word) nell'indirizzo specificato. Questo operatore simula l'operazione DWORD PTR.

L'identificatore di formato x utilizzato in alcuni di questi esempi fa sì che il risultato venga visualizzato in formato esadecimale.

Esempi

  • Per visualizzare il primo byte nell'indirizzo della variabile sum:

    BY sum

  • Per visualizzare i primi due byte nell'indirizzo della variabile new_set:

    WO new_set

  • Per visualizzare i primi quattro byte nell'indirizzo della variabile sum:

    DW sum

  • Per visualizzare il byte a cui fa riferimento il registro EBP con uno spostamento pari a 6:

    BY ebp+6,x

  • Per visualizzare i due byte a cui fa riferimento il puntatore dello stack, ovvero l'ultima word inserita nello stack:

    WO esp,x

  • Per visualizzare i quattro byte a cui fa riferimento il registro ESI:

    DW esi,x

Riferimento indiretto tramite registro

Il debugger non riconosce le parentesi quadre ([ ]) per indicare una posizione di memoria a cui fa riferimento un registro. In alternativa, è possibile utilizzare gli operatori BY, WO e DW per fare riferimento ai valori corrispondenti in formato byte, word o double word.

Espressione MASM

Espressione del debugger

Espressione C++

BYTE PTR [bx]

BY ebx

*(unsigned char) ebx

WORD PTR [bp]

WO ebp

*(unsigned short *) ebp

DWORD PTR [bp]

DW ebp

*(unsigned long *) ebp

Riferimento indiretto tramite registro con spostamento

Per eseguire operazioni in modalità di riferimento indiretto in base, indicizzate o in base-indicizzate con uno spostamento, utilizzare l'operatore BY, WO o DW con l'operatore di addizione.

Espressione MASM

Espressione del debugger

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

Indirizzo di una variabile

Utilizzare l'operatore address-of di C (&) anziché l'operatore OFFSET di MASM.

Espressione MASM

Espressione del debugger

OFFSET Var

&Var

Operatore PTR

Utilizzare cast di tipo o gli operatori BY, WO e DW con l'operatore address-of (&) per sostituire l'operatore PTR del linguaggio assembly.

Espressione MASM

Espressione del debugger

BYTE PTR Var

BY &Var

*(unsigned char*)

&Var

WORD PTR Var

WO &Var

DWORD PTR Var

DW &Var

*(unsigned long*)

&Var

Stringhe in linguaggio assembly

Aggiungere l'identificatore del formato stringa ,s dopo il nome della variabile.

Espressione MASM

Espressione del debugger

String

String,s

Poiché le stringhe C terminano con un carattere null (ASCII 0), quando viene chiesta la visualizzazione di una stringa il debugger visualizza tutti i caratteri dal primo byte della variabile fino al successivo byte null nella memoria. Se si desidera eseguire il debug di un programma scritto in linguaggio assembly e visualizzare le stringhe nella finestra Espressioni di controllo, delimitare le variabili stringa con un carattere null. Per identificare facilmente le stringhe con terminazione null o senza terminazione, utilizzare la finestra Memoria.

Elementi di matrice e di struttura

Immettere l'operatore address-of (&) davanti a un nome di matrice, quindi aggiungere l'offset desiderato. L'offset può essere un'espressione, un numero, un nome di registro o una variabile.

Negli esempi riportati di seguito è illustrata l'esecuzione di questa operazione per le matrici di byte, word e double word.

Espressione MASM

Espressione del debugger

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)

Vedere anche

Altre risorse

Espressioni in C++ nativo