Passando alle etichette in assembly inline

Specifici di Microsoft

Ad esempio un'etichetta comune di C++ o c#, un'etichetta in __asm il blocco ha ambito della funzione in cui è definito (non solo nel blocco.entrambe le istruzioni di assembly e goto le istruzioni possono passare alle etichette interno o esterno __asm blocco.

Contrassegna definito in __asm i blocchi non viene fatta distinzione tra maiuscole e minuscole; entrambi goto le istruzioni e le istruzioni in linguaggio assembly possono fare riferimento a tali etichette indipendentemente dall'evento.Le etichette C++ e c# viene fatta distinzione tra maiuscole e minuscole solo una volta utilizzate da goto istruzioni.Le istruzioni dell'assembly possono passare a c o all'etichetta di C++ indipendentemente dall'evento.

Il codice seguente mostra tutte le permutazioni:

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()
{
}

Non utilizzare nomi delle funzioni della libreria C Come etichette in __asm blocchi.Ad esempio, la tentazione di utilizzare exit come etichetta, come segue:

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

Poiché uscita è il nome della funzione della libreria di c, il codice potrebbe causare un ramo a uscita funzione anziché nella posizione desiderata.

Come nei programmi di MASM, il simbolo del dollaro ($) funge da contatore di posizione corrente.È un'etichetta per l'istruzione attualmente è completa.in __asm i blocchi, la loro utilizzo principale consiste nella creazione di rami condizionali lunghi:

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

Microsoft FINALE specifico

Vedere anche

Riferimenti

Assembler inline