Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Specyficzne dla firmy Microsoft
Podobnie jak zwykła etykieta języka C lub C++, etykieta w __asm
bloku ma zakres w całej funkcji, w której jest definiowana (nie tylko w bloku). Instrukcje zestawów i goto
instrukcje mogą przechodzić do etykiet wewnątrz lub na zewnątrz __asm
bloku.
Etykiety zdefiniowane w __asm
blokach nie są uwzględniane wielkości liter. Instrukcje i goto
instrukcje zestawu mogą odwoływać się do tych etykiet bez względu na wielkość liter. Etykiety C i C++ są uwzględniane wielkości liter tylko wtedy, gdy są używane przez goto
instrukcje. Instrukcje dotyczące zestawu mogą przejść do etykiety C lub C++ bez względu na wielkość liter.
Poniższy kod przedstawia wszystkie permutacje:
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 języka C jako etykiet w __asm
blokach. Na przykład może być kuszony, aby użyć exit
jako etykiety w następujący sposób:
; BAD TECHNIQUE: using library function name as label
jne exit
.
.
.
exit:
; More __asm code follows
Ponieważ exit jest nazwą funkcji biblioteki języka C, ten kod może spowodować przejście do funkcji exit zamiast do żądanej lokalizacji.
Podobnie jak w programach MASM, symbol dolara ($
) służy jako licznik bieżącej lokalizacji. Jest to etykieta dla aktualnie składanej instrukcji. W __asm
blokach jego głównym zastosowaniem jest wykonanie długich skoków warunkowych:
jne $+5 ; next instruction is 5 bytes long
jmp farlabel ; $+5
.
.
.
farlabel:
END Microsoft Specific