인라인 어셈블리에서 레이블 이동
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 특정 끝