Partilhar via


Saltando até rótulos no assembly embutido

Específico da Microsoft

Como um rótulo comum de 2.0 C ou C++, um rótulo em um bloco de __asm tem o escopo em toda a função na qual é definido (não apenas no bloco). As instruções de assembly e as instruções de goto podem ir diretamente para rótulos dentro ou fora do bloco de __asm .

Os rótulos definidas em blocos de __asm não diferenciam maiúsculas e minúsculas; as instruções de goto e as instruções de assembly podem fazer referência a essas rótulos sem considerar o caso. Os rótulos de 2.0 C e C++ diferenciam maiúsculas e minúsculas somente quando usadas pelas instruções de goto . As instruções de assembly podem passar a c ou C++ para o rótulo sem considerar o caso.

O código a seguir mostra todas as permutações:

void func( void )
{
   goto C_Dest;  /* Legal: correct case   */
   goto c_dest;  /* Error: incorrect case */

   goto A_Dest;  /* Legal: correct case   */
   goto a_dest;  /* Legal: incorrect case */

   __asm
   {
      jmp C_Dest ; Legal: correct case
      jmp c_dest ; Legal: incorrect case

      jmp A_Dest ; Legal: correct case
      jmp a_dest ; Legal: incorrect case

      a_dest:    ; __asm label
   }

   C_Dest:       /* C label */ 
   return;
}
int main()
{
}

Não use nomes de função de biblioteca de 2.0 c como rótulos em blocos de __asm . Por exemplo, você poderia ser tentado usar exit como um rótulo, como segue:

; BAD TECHNIQUE: using library function name as label
jne exit
   .
   .
   .
exit:
   ; More __asm code follows

Como exit é o nome da função de biblioteca c, esse código pode causar um salto à função de exit em vez do local desejado.

Como em programas de MASM, o símbolo de cifrão ($) serve como o contador de local atual. É um rótulo para a instrução que está sendo atualmente montada. Em blocos de __asm , sua própria principal é fazer saltos condicionais longos:

jne $+5 ; next instruction is 5 bytes long
jmp farlabel
; $+5
   .
   .
   .
farlabel:

FINALIZAR Específico da Microsoft

Consulte também

Referência

Assembler embutido