4

私のasmの知識は非常に限られているため、次のコードを知る必要があります:

movl %%esp %0

%0レジスタ、メモリアドレス、またはその他を表しますか? とは%0どういう意味ですか?

4

1 に答える 1

9

何らかの入出力オペランドを表します。これにより、アセンブリ コードで C 変数を使用できるようになります。このページにはいくつかの素晴らしい例があります。

%0コードで定義された最初の入出力オペランドです。実際には、これは、コンパイラによってアセンブリ コードがどのように生成されるかに応じて、スタック変数、ヒープ変数、またはレジスタになる可能性があります。

例えば:

int a=10, b;
asm ("movl %1, %%eax; 
      movl %%eax, %0;"
     :"=r"(b)        /* output */
     :"r"(a)         /* input */
     :"%eax"         /* clobbered register */
     );

%0bこの場合はで%1ですa

于 2012-05-05T12:27:34.500 に答える