Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Microsoft-specifik
Precis som en vanlig C- eller C++-etikett har en etikett i ett __asm block omfång i hela funktionen där den definieras (inte bara i blocket). Både sammansättningsinstruktioner och goto satser kan hoppa till etiketter i eller utanför __asm blocket.
Etiketter som definieras i __asm block är inte skiftlägeskänsliga. Både goto instruktioner och sammansättningsinstruktioner kan referera till dessa etiketter utan hänsyn till skiftläge. C- och C++-etiketter är skiftlägeskänsliga endast när de används av goto -instruktioner. Monteringsinstruktioner kan hoppa till en C- eller C++-etikett utan hänsyn till skiftläge.
Följande kod visar alla permutationer:
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()
{
}
Använd inte C-biblioteksfunktionsnamn som etiketter i __asm block. Du kan till exempel vara frestad att använda exit som en etikett på följande sätt:
; BAD TECHNIQUE: using library function name as label
jne exit
.
.
.
exit:
; More __asm code follows
Eftersom exit är namnet på en C-biblioteksfunktion kan den här koden orsaka ett hopp till exit-funktionen i stället för till önskad plats.
Precis som i MASM-program fungerar dollarsymbolen ($) som den aktuella platsräknaren. Det är en etikett för instruktionen som just nu monteras. I __asm blocken används den framför allt för att göra långa villkorliga hopp:
jne $+5 ; next instruction is 5 bytes long
jmp farlabel ; $+5
.
.
.
farlabel:
Avsluta Microsoft Specifik