Compartilhar via


Usando operadores em blocos __asm

Seção específica da Microsoft

Um bloco __asm não pode usar operadores C ou C++ específicos, como o operador <<. No entanto, os operadores compartilhados por C e MASM, como o operador *, são interpretados como operadores de linguagem assembly. Por exemplo, fora de um bloco __asm, colchetes ([ ]) são interpretados como subscritos de matriz delimitadores, que C dimensiona automaticamente para o tamanho de um elemento na matriz. Dentro de um bloco __asm, eles são vistos como o operador de índice MASM, que produz um deslocamento de bytes não dimensionado de qualquer objeto ou rótulo de dados (não apenas uma matriz). O código a seguir ilustra a diferença:

int array[10];

__asm mov array[6], bx ;  Store BX at array+6 (not scaled)

array[6] = 0;         /* Store 0 at array+24 (scaled) */

A primeira referência a array é não dimensionada, mas a segunda é. Observe que você pode usar o operador TYPE para obter dimensionamento com base em uma constante. Por exemplo, as instruções seguintes são equivalentes:

__asm mov array[6 * TYPE int], 0 ; Store 0 at array + 24

array[6] = 0;                   /* Store 0 at array + 24 */

Fim da seção específica da Microsoft

Confira também

Usando C ou C++ em blocos __asm