다음을 통해 공유


__asm

Microsoft 전용

__asm 키워드 인라인 어셈블러 호출 하 고 C 또는 C++ 문 잘못 된 위치에 나타날 수 있습니다.단독으로 사용할 수 없습니다.어셈블리 명령을 중괄호 또는, 적어도, 사이 있는 명령 그룹와 야 빈 중괄호의 쌍입니다.용어는 "__asm 블록" 여기 모든 명령이 나 명령의 중괄호에 여부 또는 그룹을 참조 합니다.

[!참고]

표준 C++에 대 한 visual C++ 지원 asm 키워드 컴파일러 오류 키워드를 생성 하지 않습니다 때문에 제한 됩니다.그러나는 asm 블록 하는 의미 있는 코드를 생성 하지 것입니다.Use __asminstead of asm.

구문:

__asm 어셈블리 명령 [; ]

__asm { 어셈블리 명령 목록 은 } [; ]

문법

  • __asm assembly-instruction ;수신 동의

    __asm { assembly-instruction-list };수신 동의

  • 어셈블리 명령 목록은:
    assembly-instruction;수신 동의

    assembly-instruction;assembly-instruction-list;수신 동의

괄호 없이 사용 하는 경우는 __asm 키워드 즉, 해당 줄의 나머지는 어셈블리 언어 문인.중괄호를 사용 하는 경우 중괄호 사이 각 줄에서 어셈블리 언어 문의 임을 의미 합니다.이전 버전과 호환성에 대 한 _asm 는 동일 __asm.

때문에 __asm 키워드는 문을 구분, 같은 줄에 어셈블리 명령을 배치할 수 있습니다.

Visual C++ 2005 이전 버전에서는 명령

__asm int 3

네이티브 코드를 사용 하 여 컴파일할 때 생성 하는 시 키 지 않는 /clr. 컴파일러 명령을 CLR 중단 명령으로 변환 합니다.

__asm int 3이제 함수에 대 한 네이티브 코드가 생성 됩니다.코드에 중단점을 발생할 경우 MSIL로 컴파일된 함수를 사용 하는 함수를 사용할 경우 __debugbreak.

예제

다음 코드 단편은 간단 __asm 블록 중괄호로 묶습니다.

__asm {
   mov al, 2
   mov dx, 0xD007
   out dx, al
}

또는 배치할 수 있는 __asm 각 어셈블리 명령 앞에:

__asm mov al, 2   __asm mov dx, 0xD007   __asm out dx, al

때문에 __asm 키워드는 문을 구분, 어셈블리 지침을 같은 줄에도 넣을 수 있습니다.

__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al

세 가지 예 모두의 첫 번째 스타일 이지만 동일한 코드를 생성 (바깥쪽의 __asm 중괄호 블록) 몇 가지 장점이 있습니다.중괄호 명확 하 게 C 또는 C++ 코드에서 어셈블리 코드를 분리 하 고 불필요 한 반복을 피하기를 __asm 키워드입니다.중괄호도 모호성을 방지할 수 있습니다.C 또는 C++ 문 같은 줄에 넣을 경우는 __asm 블록 블록 중괄호로 묶어야 합니다.중괄호 없이 컴파일러 C 또는 C++ 어셈블리 코드가 중지 및 시작 하는 위치를 확인할 수 없습니다.마지막으로 보통 MASM 텍스트로 같은 서식을 중괄호를 포함 하기 때문에 쉽게 잘라 고 있습니다 기존 MASM 소스 파일에서 텍스트를 붙여 넣습니다.

C 및 C++에서 중괄호를 묶는 중괄호와 달리는 __asm 블록은 변수 범위에 영향을 하지 않습니다.중첩 될 수 있습니다 __asm 차단 됩니다. 중첩 범위 변수는 영향을 주지 않습니다.

Microsoft 특정 끝

참고 항목

참조

C + + 키워드

인라인 어셈블러