2014-12-21 660 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