Доступ к 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++ не учитывая ограничения доступа.Однако нельзя вызвать функции-члены.

ЭЛЕМЕНТ, относящийся Майкрософт

См. также

Ссылки

Использование c или C++ в блоках __asm