Přechod na popisky ve vložených sestavení
Konkrétní společnosti Microsoft
Podobně jako běžné c nebo C++ jmenovky, popisek v __asm blok má obor v rámci funkce, ve které je definována (pouze v bloku).Oba pokyny pro sestavení a goto příkazy můžete přejít na štítky nebo mimo __asm bloku.
Popisky, které jsou definovány v __asm bloky nerozlišují; i goto příkazy a pokyny pro sestavení mohou odkazovat na tyto popisky bez ohledu na případu.C a C++ popisky se rozlišují pouze v případě, že používaný goto příkazy.Pokyny pro sestavení můžete přejít k popisku c nebo C++ bez ohledu na případu.
Následující kód ukazuje všechny Permutace:
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()
{
}
Nepoužívejte názvy funkcí c knihovny jako popisky v __asm bloky.Například může být pokušení použít exit jako popisek takto:
; BAD TECHNIQUE: using library function name as label
jne exit
.
.
.
exit:
; More __asm code follows
Protože ukončení je název funkce knihovny C, tento kód může způsobit přechod do ukončení funkci namísto do požadovaného umístění.
Jako v aplikacích jazyk MASM symbol dolaru ($) slouží jako aktuální umístění čítače.Je popisek instrukce aktuálně smontovány.V __asm bloky, jeho hlavní použití je dlouhý podmíněné přeskakování:
jne $+5 ; next instruction is 5 bytes long
jmp farlabel
; $+5
.
.
.
farlabel:
Konec konkrétní společnosti Microsoft