Freigeben über


Springen in Bezeichnungen im Inlineassembly

Microsoft-spezifisch

Wie eine gewöhnliche C# oder C++-Bezeichnung weist eine Bezeichnung in einem Block Bereich __asm während der Funktion, in der er definiert wurde (nicht nur im Block).goto und Assemblyanweisungen können Anweisungen zu den Bezeichnungen innerhalb oder außerhalb der Bindung __asm-Block.

Die Bezeichnungen, die in __asm Blöcke definiert sind, wird die Groß-/Kleinschreibung nicht beachtet. goto können diese Assemblyanweisungen - Anweisungen und Sprungmarken ohne Berücksichtigung der Groß-/Kleinschreibung verweisen.C- und C++-Bezeichnungen wird die Groß-/Kleinschreibung beachtet, wenn sie nur von goto-Anweisungen verwendet werden.Assemblyanweisungen können eine oder C++-Bezeichnung ohne Berücksichtigung der Groß-/Kleinschreibung wechseln.

Der folgende Code zeigt alle Permutationen an:

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

Verwenden Sie C-Bibliotheks funktionsnamen nicht als Bezeichnungen in __asm Blöcke.Beispielsweise können Sie gereizt werden, um exit als Bezeichnung verwendet werden soll, wie folgt:

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

Da Beenden der Name der Wechselstrom-Bibliotheksfunktion ist, kann dieser Code einen Sprung zur Beenden-Funktion statt an die gewünschte Position.

Wie in MASM-Programmen, liefert das Dollar (Symbol)$als aktueller Adressenzähler.Es handelt sich um eine Bezeichnung für die Anweisung, die gerade assembliert wird.In __asm Blöcke ist die wichtigste mit langen bedingte Sprünge auszuführen:

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

Microsoft ENDES bestimmten

Siehe auch

Referenz

Inlineassembler