-5
#include <stdio.h>

int main ()
{
    int a = 0 ;
    /*How can I write it on gcc*/
    __asm {
         mov a, 2 ;
         add a, 4 ;
    }
    printf ("%d\n",a );
    return 0 ;
}

这是VS2012的一些汇编代码,我如何在gcc上编写它?

4

3 回答 3

0

例如创建另一个文件fun.s并执行以下操作

.global my_fun #to show where program should start
     my_fun:
     push %ebp  #save stack ptr
     #function body
     pop %ebp   #recover stack ptr
 ret

然后只需在您的主函数中调用它

int main(){
my_fun();
}

像这样编译:g++ -o prog fun.s main.cpp

于 2013-11-14T10:49:53.667 回答
0

您可以在 gcc 中将其编写为:

#include <stdio.h>

int main ()
{
  int a = 0 ;
  /*How can I write it on gcc*/
  __asm__ __volatile__ (
    "movl $2, %0\n\t"
    "addl $4, %0\n\t"
    :"=r"(a) /* =r(egister), =m(emory) both fine here */
  );
  printf ("%d\n",a );
  return 0 ;
}
于 2013-11-14T10:52:39.183 回答
0
#include <stdio.h>

int main ()
{
    int a = 0 ;
    /*How can I write it on gcc*/
    asm volatile 
    (
         "mov $2, %0\n"
         "add $4, %0\n"
         : "=r"(a) /* output operand */
         : /* input operand */
         : /* clobbered operands */
    );
    printf ("%d\n",a );
    return 0 ;
}

请阅读GCC 的扩展 asm 语法以获取更多信息。

于 2013-11-14T10:45:59.120 回答