Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
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:
Koniec specyfiki Microsoftu