Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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