Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

Inline Assembler