C 또는 C++ 데이터 __asm 블록 액세스
Microsoft 전용
훌륭한 편의 인라인 어셈블리 C 또는 C++ 변수를 이름으로 참조할 수 있습니다.__asm 블록 블록이 표시 될 위치 범위에 있는 변수 이름을 포함 하 여 모든 기호를 참조할 수 있습니다.예를 들어, 경우 C 변수에 var 는 명령 범위에
__asm mov eax, var
값을 저장 합니다 var EAX에.
클래스, 구조체 또는 공용 구조체 멤버는 고유한 이름이 있는 경우는 __asm 블록에 변수를 지정 하지 않고 멤버 이름을 사용 하 여 참조할 수 있습니다 또는 typedef 이름 앞에 마침표 (.) 운영자입니다.그러나 멤버 이름이 고유 하지 않은 경우 변수를 배치 해야 또는 typedef 이름 바로 앞에 마침표 연산자입니다.예를 들어, 구조체 형식 샘플 공유에 same_name 멤버 이름으로:.
형식으로 변수를 선언 하는 경우
struct first_type hal;
struct second_type oat;
멤버에 대 한 모든 참조 same_name 때문에 변수 이름을 사용 해야 same_name 고유 하지 않습니다.하지만 멤버 weasel 고유한 이름을 해당 멤버 이름을 사용 하 여 참조할 수 있도록 했습니다.
// InlineAssembler_Accessing_C_asm_Blocks.cpp
// processor: x86
#include <stdio.h>
struct first_type
{
char *weasel;
int same_name;
};
struct second_type
{
int wonton;
long same_name;
};
int main()
{
struct first_type hal;
struct second_type oat;
__asm
{
lea ebx, hal
mov ecx, [ebx]hal.same_name ; Must use 'hal'
mov esi, [ebx].weasel ; Can omit 'hal'
}
return 0;
}
변수 이름을 생략 하면 코드 작성의 편의 뿐입니다 노트.변수 이름이 있는지 여부에 상관 없이 동일한 어셈블리 명령은 생성 됩니다.
액세스 제한에 관계 없이 C++의 데이터 멤버에 액세스할 수 있습니다.그러나 멤버 함수 호출할 수 없습니다.
Microsoft 특정 끝