GCC内联ASM与变量

时间:2014-12-21 17:01:51

标签: c++ gcc

我试图在我的C ++源代码中使用以下ASM内联代码,为Visual Studio提供:

__asm {
mov ecx,target
}

其中target是void *指针。我不知道如何将其转换为与GCC兼容的代码。 我知道GCC使用的是synthax:

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分: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