Springen zu Bezeichnungen in der Inlineassembly
Microsoft-spezifisch
Wie eine gewöhnliche C- oder C++-Bezeichnung hat eine Bezeichnung in einem __asm-Block Raum in der Funktion, in der er definiert wurde (nicht nur im Block). Sowohl Assemblyanweisungen als auch goto-Anweisungen können zu den Bezeichnungen innerhalb oder außerhalb des __asm-Blocks springen.
Bei Bezeichnungen, die in __asm-Blöcken definiert sind, wird die Groß-/Kleinschreibung nicht beachtet. goto-Anweisungen und Assemblyanweisungen können gleichermaßen ohne Berücksichtigung der Groß-/Kleinschreibung auf diese Bezeichnungen verweisen. Bei C- und C++-Bezeichnungen wird die Groß-/Kleinschreibung nur dann beachtet, wenn sie von goto-Anweisungen verwendet werden. Assemblyanweisungen können ohne Berücksichtigung der Groß-/Kleinschreibung zu einer C- oder C++-Bezeichnung wechseln.
Der folgende Code zeigt alle Permutationen:
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-Bibliotheksfunktionsnamen nicht als Bezeichnungen in __asm-Blöcken. Beispielsweise können es Sie reizen, exit als Bezeichnung wie folgt zu verwenden:
; BAD TECHNIQUE: using library function name as label
jne exit
.
.
.
exit:
; More __asm code follows
Da exit der Name der C-Bibliotheksfunktion ist, kann dieser Code einen Sprung zur exit-Funktion statt an die gewünschte Position auslösen.
Wie in MASM-Programmen dient das Dollar-Symbol ($) als Zähler der aktuellen Position. Es handelt sich um eine Bezeichnung für die Anweisung, die gerade assembliert wird. In __asm-Blöcken ist die wichtigste Verwendung, lange bedingte Sprünge auszuführen:
jne $+5 ; next instruction is 5 bytes long
jmp farlabel
; $+5
.
.
.
farlabel:
END Microsoft-spezifisch