Переход к маркерам встроенной сборкой

Только для систем Microsoft

Как обычная метка c или C++, метку в __asm блок есть область в рамках функции, в которой он определен (не только в блоке).обе инструкции по монтажу и goto выписки могут поскакать к маркерам внутри или снаружи __asm блок.

Метки, определенные внутри __asm блоки без учета регистра; оба goto выписки и инструкции по монтажу могут ссылаться на эти метки без учета регистра.Метки c и C++ регистр учитывается только при использовании by goto выписки.Инструкции по монтажу могут поскакать к метке на языке c или C++ без учета регистра.

Следующий Код отображает все пермутирования:

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()
{
}

Не используйте имена функций библиотеки в качестве меток в c# __asm блоки.Например, может быть уговорены для использования exit в качестве метки следующим образом:

; BAD TECHNIQUE: using library function name as label
jne exit
   .
   .
   .
exit:
   ; More __asm code follows

Поскольку Выход имя функции библиотеки c, этот Код может привести к гиперссылку Выход функция вместо к требуемого расположения.

Как в программах MASM, символ доллара ("$) используется как счетчик текущего расположения.Метка в настоящий момент, собранные инструкции.IN __asm блоки его основной использование сделать длинные условные переходы.

jne $+5 ; next instruction is 5 bytes long
jmp farlabel
; $+5
   .
   .
   .
farlabel:

ЭЛЕМЕНТ, относящийся Майкрософт

См. также

Ссылки

Встроенный ассемблер