Partilhar via


Saltar para rótulos de Assembly embutido

Específicos do Microsoft

Como um comum c ou C++ rótulo, um rótulo em um __asm bloco tem escopo em toda a função em que ele é definido (não apenas no bloco).Ambas as instruções do assembly e goto instruções podem saltar para rótulos dentro ou fora do __asm bloco.

Rótulos definidos no __asm blocos não diferenciam maiúsculas de minúsculas; ambos goto declarações e instruções assembly podem se referir a esses rótulos sem considerar a ocorrência.Rótulos de c e C++ diferenciam maiúsculas de minúsculas apenas quando usado por goto instruções.Instruções assembly podem saltar para um rótulo de c ou C++ sem considerar a ocorrência.

O código a seguir mostra todas as permutas a:

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 usar nomes de função de biblioteca c como rótulos em __asm blocos.Por exemplo, você poderá ficar tentado a usar exit como um rótulo, da seguinte maneira:

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

Porque Sair é o nome de uma função de biblioteca de C, esse código pode causar um salto para o Sair funcionar em vez de para o local desejado.

Como em programas MASM, o símbolo de dólar ($) serve como contador do local atual.Ele é um rótulo para a instrução atualmente sendo montado.Na __asm blocos, seu uso principal é tornar o longo condicionais saltos:

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

Específicos do Microsoft final

Consulte também

Referência

Montador embutido