5
#include<stdio.h>
#include<stdlib.h>

int main (void)
{
 int a=10, b;
 asm ("movl %1, %%eax;
       movl %%eax, %0;"
      :"=r"(b)        /* output */
      :"r"(a)         /* input */
      :"%eax"         /* clobbered register */
     );
 printf("%d", b);
 system("pause");
}

私はかなりの初心者で、昨日購入した本のサンプル コードをコピーしますが、最初の asm コードをコンパイルしたときに、以下に示す GCC-mingw32 コンパイラからいくつかの警告とエラーが報告されました。

In function 'main':
line 7 --> warning: missing terminating " character
line 7 --> error: missing terminating " character
line 8 --> error: expected string literal before 'movl'
line 8 --> warning: missing terminating " character
line 8 --> error: missing terminating " character

どうすれば正常にコンパイルできますか? 前もって感謝します :-)

4

2 に答える 2

7

各命令は、次のように二重引用符で囲む必要があります"""movl %1, %%eax;"

于 2013-11-13T12:44:58.070 に答える
2

次のように、asm コードの最初の 2 行に開始引用符と終了引用符が必要です。

#include<stdio.h>
#include<stdlib.h>

int main (void)
{
int a=10, b;
asm ("movl %1, %%eax;"
"movl %%eax, %0;"
:"=r"(b) /* output */
:"r"(a) /* input */
:"%eax" /* clobbered register */
);
printf("%d", b);
system("pause");
}
于 2013-11-13T12:47:14.093 に答える