다음을 통해 공유


인라인 어셈블리에서 레이블 이동

Microsoft 전용

마음에 일반 C 또는 C++ 레이블이 레이블에 __asm 블록 (블록에 없습니다만) 정의 되는 함수 전체 범위에 있습니다.두 어셈블리 지침 및 goto 수 있는 점프 문 레이블은 내부 또는 외부에 __asm 블록.

정의 된 레이블은 __asm 블록 수 없습니다 대 / 소문자를 구분 합니다. 둘 다 goto 수 문 및 어셈블리 명령을 참조 하십시오 해당 레이블에 대/소문자에 관계 없이.C 및 C++ 레이블은 대만 사용할 때는 소문자 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 프로그램에 달러 기호에서와 ($) 현재 위치 카운터의 역할을 수행 합니다.현재 조합 되 고 명령에 대 한 레이블을 것입니다.__asm 블록의 주 사용 되 긴 조건부 점프 합니다.

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

Microsoft 특정 끝

참고 항목

참조

인라인 어셈블러