6

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

__asm {
mov ecx,target
}

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

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

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

谢谢你的帮助。

4

1 回答 1

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
于 2015-01-01T11:56:48.260 回答