[DevC++ ASM] Biblioteka dll z kodem assemblera - how to ?

0

Witam,
staram sie napisac biblioteke.dll w ktorej beda funkcje pisane w assemblerze - problem z Dev-C++ jest taki ze za bradzo nierozumie kodu asm - moze ktos sie tym zajmowal i wie jak poprawnie zadeklarowac w bibliotece dll funkcje wykorzystujaca kod asm ?

0

DEVC++ uzywa GCC wiec assembler jest tam co najmniej dziwny.
Radze uzyc VisualC++ jesli chcesz normalny assembler.
Jesli chcesz zostac przy DEVC++ to polecam lekture GCC.

0

dzieki - znalazlem nawet troche tego jak asm jest interpretowany w gcc. Fajnie jest opisane to przykladem:

#include <stdio.h> 

//Przykład autorstwa Tomasza Kanik [yetiicom(małpa)wp.pl] 
static int iLiczba, iWynik; // Niektóre wersje potrzebują globalnych zmiennych 

int main(int argc, char* argv[]) 
{ 
iLiczba = 27; 
iWynik = 0; 
printf("\nWartosci poczatkowe\tLiczba: %d\tWynik: %d",iLiczba,iWynik); 

#ifdef __GNUC__ // ta część zadziała jedynie dla Dev-C++ (gcc) 

asm(".intel_syntax noprefix \n" // Zmiana z AT&T na Intel składnie 

"mov eax,_iLiczba \n" // iLiczba -> EAX 
"inc eax \n" // EAX ++ 
"mov _iWynik,eax \n" // EAX -> iWynik 

".att_syntax \n"); // Wszystko wraca po staremu ;) 

#elif _MSC_VER // ta część zadziała dla MS Visual C++ 

__asm { // początek bloku asm 
MOV EAX, iLiczba // do EAX włóż wartość iLiczba (z pamięci) 
INC EAX // dodaj 1 
MOV iWynik,EAX // do zmiennej iWynik włóż wartość z rejestru EAX 
} // koniec bloku asm 

#endif 

printf("\nWartosci koncowe \tLiczba: %d\tWynik: %d",iLiczba,iWynik); 

printf("\n\nWcisnij ENTER to skonczymy..."); 
scanf("?"); 
return(0); 
}

Teraz takie male pytanie: czy Dev aby widzial funkcje asm z pliku dll wystarczy to zrobic :

#if defined(__cplusplus) 
extern "C" 
{ 
#endif 
. 
. 
. 
Prototypy funkcji w C
. 
. 
. 
#if defined(__cplusplus) 
} /* extern "C" */ 
#endif

tylko dac extern ASM ?

EDIT:
no wszystko smiga - jedynym bolem jest ten ASM w konwencji AT&T.

1 użytkowników online, w tym zalogowanych: 0, gości: 1