2014-12-21 13 views
6

Sto cercando di utilizzare il seguente codice inline nel mio C++ fonte, dato per Visual Studio:GCC inline con la variabile

__asm { 
mov ecx,target 
} 

cui target è un void * puntatore. Non so come convertire questo in codice compatibile GCC. So che l'uso GCC synthax piace:

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

ma ovviamente c'è un problema con la variabile in questa situazione. Quindi, chiunque potrebbe spiegarmi come usare un puntatore con ASM in linea usando GCC per Windows?

Grazie per il vostro aiuto.

+3

cercare di leggere questo, ecco alcuni esempi utili: http://www.ibiblio.org/gferg/ldp/GCC -Inline-Assembly-HOWTO.html # s7 – strannik

+0

questo è utile: http://asm.sourceforge.net/articles/rmiyagi-inline-asm.txt – gj13

+0

Anche [questo link] (http://www.ethernut.de /en/documents/arm-inline-asm.html). L'assemblatore in linea GCC è difficile! Ma per il tuo caso semplice, sono sicuro che troverai un esempio utilizzabile tra questi tre link. – TonyK

risposta

1

provare questo assembly questo potrebbe aiutare .... almeno funziona per me.

#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; 
} 

stampa il seguente valore per me ... ho provato il debug del secondo valore è uguale al valore attuale nel registro ECX.

p $ ecx

comando gdb

> retval = 0 
> retval = -72537468 
Problemi correlati