Wykonania skoku do etykiety w zestawie Inline
Programu Microsoft
Podobnie jak zwykłe c lub C++ etykietę, etykieta w __asm blok ma zakres całej funkcji, w którym jest zdefiniowana (nie tylko w bloku).Zarówno instrukcja montażu i goto instrukcji, można przejść do etykiety, wewnątrz lub na zewnątrz __asm bloku.
Etykiety określone w __asm bloków nie jest uwzględniana wielkość liter; obie goto sprawozdań i instrukcje montażu może odnosić się do tych etykiet, bez względu na wielkość liter.Etykiety c i C++ jest uwzględniana wielkość liter tylko wtedy, gdy jest używana przez goto instrukcji.Instrukcje montażu można przejść do etykiety c lub C++, bez względu na wielkość liter.
Poniższy kod przedstawia wszystkie permutacji:
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()
{
}
Nie używaj nazw funkcji biblioteki c jako etykiety w __asm bloków.Na przykład, może być skłonny użyć exit jako etykietę, w następujący sposób:
; BAD TECHNIQUE: using library function name as label
jne exit
.
.
.
exit:
; More __asm code follows
Ponieważ zamknąć jest nazwą funkcji biblioteki C, kod ten może spowodować Skocz do zamknąć funkcjonować zamiast do żądanej lokalizacji.
Jak w programach MORGÓW, symbol dolara ($) służy jako licznik bieżącej lokalizacji.Jest etykieta dla instrukcji, obecnie zmontowane.W __asm bloków, jego główne zastosowanie jest skoków długo warunkowe:
jne $+5 ; next instruction is 5 bytes long
jmp farlabel
; $+5
.
.
.
farlabel:
KONIEC Microsoft szczególne