Aracılığıyla paylaş


__asm Bloklarında C veya C++ Verilerine Erişme

Microsoft'a Özgü

Satır içi derlemenin en iyi kolaylıklarından biri, C veya C++ değişkenlerine ada göre başvurabilmektir. Blok __asm , bloğun göründüğü kapsamdaki değişken adları da dahil olmak üzere tüm simgelere başvurabilir. Örneğin, C değişkeni var kapsam dahilindeyse yönergesi

__asm mov eax, var

değerini EAX içinde depolar var .

Bir sınıf, yapı veya birleşim üyesi benzersiz bir ada sahipse, bir __asm blok, nokta (typedef) işlecinden önce değişkeni veya adı belirtmeden yalnızca üye adını kullanarak buna başvurabilir. Ancak üye adı benzersiz değilse, nokta işlecinden hemen önce bir değişken veya typedef ad yerleştirmeniz gerekir. Örneğin, aşağıdaki örnek paylaşımdaki yapı türleri üye adı olarak kullanılır same_name :.

Değişkenleri türleriyle bildirirseniz

struct first_type hal;
struct second_type oat;

üyeye same_name yapılan tüm başvurular benzersiz olmadığından değişken adını same_name kullanmalıdır. Ancak üyenin weasel benzersiz bir adı olduğundan, yalnızca üye adını kullanarak üyeye başvurabilirsiniz:

// 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;
}

Değişken adının atlanması yalnızca bir kodlama kolaylığıdır. Değişken adının mevcut olup olmadığına bakılmaksızın aynı derleme yönergeleri oluşturulur.

Erişim kısıtlamalarına bakılmaksızın C++ dilindeki veri üyelerine erişebilirsiniz. Ancak, üye işlevlerini çağıramazsınız.

END Microsoft'a Özgü

Ayrıca bkz.

__asm Bloklarında C veya C++ Kullanma