2014-12-21 15 views
6

Próbuję użyć następującego kodu inline ASM w moim C++ źródła, podane dla Visual Studio:GCC inline ASM o zmiennej

__asm { 
mov ecx,target 
} 

gdzie celem jest void * wskaźnik. Nie wiem, jak przekonwertować ten kod do kodu zgodnego z GCC. wiem, że użycie GCC synthax lubię:

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

ale oczywiście pojawia się problem ze zmienną w tej sytuacji. Ktoś może mi wyjaśnić, jak używać wskaźnika z wbudowanym ASM przy użyciu GCC dla Windows?

Dzięki za pomoc.

+3

Spróbuj przeczytać, oto kilka przydatnych przykładów: http://www.ibiblio.org/gferg/ldp/GCC -Inline-Assembly-HOWTO.html # s7 – strannik

+0

jest to przydatne: http://asm.sourceforge.net/articles/rmiyagi-inline-asm.txt – gj13

+0

Również [ten link] (http://www.ethernut.de /en/documents/arm-inline-asm.html). GCC inline asembler jest trudny! Ale w twoim prostym przypadku na pewno znajdziesz użyteczny przykład spośród tych trzech linków. – TonyK

Odpowiedz

1

spróbuj tego montażu to może pomóc .... przynajmniej to działa dla mnie.

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

drukuje następujące wartości dla mnie ... Próbowałem to debugowanie drugą wartość jest taka sama jak wartość obecnej w rejestrze ECX.

p $ ecx

polecenie gdb

> retval = 0 
> retval = -72537468