2014-12-21 469 views
6

我尝试使用下面的ASM内嵌代码在我的C++源代码,适用于Visual Studio给出:GCC内联汇编可变

__asm { 
mov ecx,target 
} 

,其中目标是一个void *指针。我不知道如何将其转换为兼容GCC的代码。 我知道,GCC使用synthax喜欢:

asm (".intel_syntax noprefix");  
asm ("mov ecx,target");  

但显然有一个与在这种情况下该变量的一个问题。所以,任何人都可以解释我如何使用GCC for Windows使用内联ASM的指针?

感谢您的帮助。

+3

尝试读取这个,这里有一些有用的例子:http://www.ibiblio.org/gferg/ldp/GCC -Inline-Assembly-HOWTO.html#s7 – strannik

+0

这是有用的:http://asm.sourceforge.net/articles/rmiyagi-inline-asm.txt – gj13

+0

也[此链接](http://www.ethernut.de /en/documents/arm-inline-asm.html)。 GCC内联汇编器很难!但对于你的简单情况,我相信你会在这三个链接中找到一个有用的例子。 – TonyK

回答

1

尝试这个大会这可能会帮助....至少它是为我工作。

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

int main(int argc, char *arg[]) 
{ 
    int retval; 
    printf (" retval = %d \n", retval); 
    asm volatile(
      "movl %%ecx , %0\n\t" 
      :"=r" (retval));  
    printf ("retval = %d \n", retval); 
    return 0; 
} 

为我打印下面的值...我已经试过调试第二个值与ecx寄存器中的值相同。

P $ ECX

在gdb命令

> retval = 0 
> retval = -72537468