Доступ к 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;
}
Обратите внимание, что опустив имя переменной просто удобство guidelines.Те же инструкции по монтажу создаются присутствует ли имя переменной.
Можно получать доступ к элементам данных в C++ не учитывая ограничения доступа.Однако нельзя вызвать функции-члены.
ЭЛЕМЕНТ, относящийся Майкрософт