Expressões de linguagem assembler
Este tópico se aplica a:
Edição |
Visual Basic |
C# |
C++ |
Desenvolvedores Web |
---|---|---|---|---|
Express |
Somente nativo |
|||
Padrão |
Somente nativo |
|||
PRO e equipe |
Somente nativo |
Legenda de tabela:
Aplica-se |
|
Não é aplicada |
|
Comando ou comandos oculta por padrão. |
O depurador corretamente pode avaliar expressões de linguagem assembler, com algumas restrições.A sintaxe usada para algumas expressões de linguagem assembler difere da sintaxe usada em sistemas de desenvolvimento de linguagem assembler, como o Microsoft Macro Assembler (MASM).
Operadores de memória
Operadores de memória são operadores unários que retornam o resultado de uma operação direta de memória.Esses operadores são usados principalmente para depurar o código da linguagem assembler.
{BY | WO | DW} address
The BY operador retorna um inteiro curto que contém o primeiro byte no endereço. Este operador simula BYTE PTR.
The WO operador retorna um inteiro curto que contém o valor da palavra, dois bytes no endereço. Este operador simula o Microsoft Macro Assembler WORD PTR operação. The DW operador retorna um inteiro longo que contém o valor dos quatro primeiros bytes no endereço. Este operador simula DWORD PTR.
The x especificador de formato usado em alguns desses exemplos faz com que o resultado a ser exibido em hexadecimal.
Exemplos
Para exibir o primeiro byte no endereço da soma variável:
BY sum
Para exibir a primeira palavra no endereço da variável new_set:
WO new_set
Para exibir o doubleword no endereço da soma:
DW sum
Para exibir o byte apontado pelo Registro EBP com um deslocamento de 6:
BY ebp+6,x
Para exibir a palavra apontada pelo ponteiro da pilha, a última palavra colocada na pilha:
WO esp,x
Para exibir o doubleword apontado pelo registro ESI:
DW esi,x
Registro indireto
O depurador não reconhece colchetes ([ ]) indicar um local da memória apontado por um registro. Em vez disso, use o BY, WO, e DW operadores de referência ao byte correspondente, palavra ou valores doubleword.
Expressão MASM |
Expressão do depurador |
Expressão 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 |
Registro indireto com deslocamento
Para executar operações com base, indexada ou indexado com base em modo indireto com um deslocamento, use o BY, WO, ou DW operadores com o operador de adição.
Expressão MASM |
Expressão do depurador |
---|---|
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 |
Endereço de uma variável
Usar o C endereço - do operador (&) em vez do operador MASM OFFSET.
Expressão MASM |
Expressão do depurador |
---|---|
OFFSET Var |
&Var |
Operador PTR
Usar conversões de tipo ou o BY, WO, e DW operadores com o endereço do operador (&) para substituir a linguagem assembly PTR operador.
Expressão MASM |
Expressão do depurador |
---|---|
BYTE PTR Var |
BY &Var |
*(unsigned char*) |
&Var |
WORD PTR Var |
WO &Var |
DWORD PTR Var |
DW &Var |
*(unsigned long*) |
&Var |
Sequências da linguagem assembly
Adicionar a seqüência de caracteres de formato especificador ,s Após o nome da variável.
Expressão MASM |
Expressão do depurador |
---|---|
String |
String,s |
Como sequências C terminam com um caractere nulo (ASCII 0), o depurador exibe todos os caracteres do primeiro byte da variável até o próximo byte nulo na memória quando você solicita uma exibição da sequência.Se você pretende depurar um programa linguagem assembler, e você desejar exibir sequências na janela Watch, você deve delimitar variáveis de sequência de caracteres com um caractere nulo.Uma maneira fácil de exibir sequências terminadas por caractere nulo ou não finalizadas é utilizando a janela Memory.
Matriz e elementos de estrutura
Prefixo um nome de matriz com o operador adress-of (&) e adicione o deslocamento desejado. O deslocamento pode ser uma expressão, número, nome de registrador, ou variável.
Os exemplos a seguir mostram como fazer isso para byte, palavra, e matrizes doubleword.
Expressão MASM |
Expressão do depurador |
---|---|
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) |