Espressioni in linguaggio assembly
Le informazioni contenute in questo argomento sono valide per:
Edizione |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Solo nativo |
||||
Pro, Premium e Ultimate |
Solo nativo |
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) |