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
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.