Code::Blocks i asembler

0

Witam. Chciałbym prosić was o pomoc bo męcze się już z tym problemem kilka dni i nic. Otóż muszę zrobić projekt ( program pisany w c++ /c ) a jego głowna funkcja napisana w asemblerze x86 intel. I nie wiem jak mam to połączyć. Zależy mi na tym żeby wszystko odbywało się w code::blocks bo tutaj udało mi się już uruchomić inną potrzebną biblioteka graficzną , zostało tylko połączenie z asemblerem. Wiem, że jest funkcja

Kopiuj
asm()

, ale nie zadowala mnie do końca ( lub nie umiem z niej dobrze skorzystać ), tzn chodzi mi o to, że gdy piszę funkcje w czystym asemblerze to muszę zadbać o wskaźniki:

Kopiuj
push ebp
	"mov esp , ebp 

a korzystając z asm() w c++ kompilator robi to za mnie ( co jest zrozumiałe zresztą ), bo mój kod wyglądał mniej więcej tak :

Kopiuj
int funkcja ( int a , int b  )
{
asm("komendy asemblera" ) 
} 

Mi jednak zależy na tym żeby zrobić to samemu. Najlepiej jakbym mógł napisać wszystko w pliku .s a potem dołączyć to jakoś do projektu. Wie ktoś jak moge coś takiego osiągnąć?

hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:14 dni
0

Tak. Tylko musisz wiedzieć jak przebiega proces kompilacji:

  1. translacja kodu do ASM (.c -> .S)
  2. asemblacja (.S -> .o)
  3. linkowanie (.o -> plik wynikowy)

Z reguły pierwsze 2 nazywa się kompilacją. I to one cię interesują. Po asemblacji też możesz otrzymać plik .o, który podajesz linkerowi. W taki sposób wszystko zepniesz. Jak to zrobić w C::B? Nie mam zielonego pojęcia. Poszukaj w Google lub napisz własny Makefile.


0

No własnie. Na linuxie mi sie to udalo( zrobilem makefila odpowiedniego ) ale znowu nie moglem poradzic sobie z biblioteka allegro dlatego powrocilem do codeblocks.I odnosnie tego co napisales to mnie interesuje w sumie tylko 2 przejscie bo plik .s chcialem wlasnie wlasnorecznie napisac. No nic .Czekam na dalsze wypowiedzi. Moze ktos mial podobny problem.

hauleth
A co ma Linux do C::B?
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:14 dni
0

No to co w tym ciężkiego? Napisz sobie samemu plik .s zasembluj go, a następnie zlinkuj wszystko tak jak chcesz.


0

Hmm no a jak taki plik .o zlinkowac do projektu w C::B ?

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0

Recznie.
Albo olej C::B i uzyj jakiegos IDE co wspiera make/cmake: QtCreator, KDevelop.

0

Skompilowałem swój plik(. asm ) z funkcja za pomocą kompilatora nasm. Plik wynikowy .o wrzuciłem do projektu CodeBlocks , dodałem do linkera plik ( tak mi się wydaje ) i wywala błąd, że nie może znaleŹć tej funkcji ... Już nie wiem co mam robić. Tak jak mówiłem trochę się nameczyłem żeby biblioteka allegro zaczeła mi tu działać więc nie chciałbym zmieniać CodeBlocks. Ma ktoś jakieś pomysły ?

hauleth
Asemblera się nie kompiluje. Asemblera się asembluje. I nie ma kompilatora asemblera są tylko różne asemblery.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.