Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c/c++] c vs asm, czyli jak używać "Inline Assembly" (w GCC, a dokładniej MinGW)

Ostatnio zmodyfikowano 2013-11-26 21:22
Autor Wiadomość
f651144
Temat założony przez niniejszego użytkownika
[c/c++] c vs asm, czyli jak używać "Inline Assembly" (w GCC, a dokładniej MinGW)
» 2013-11-18 14:43:19
Problem, jak w temacie. By nie tracić wszego czasu:
  • Problem ogólny - Kurs / Poradnik - Czyli, czy zna ktoś (i mógłby się podzielić wiedzą) DOBRY poradnik dotyczący wykorzystywania wstawek asemberowych w c / c++. Szukałem, googlowałem, czytałem dokumentację i nie za bardzo rozumiem koncepcję twórców GCC. Wydaje mi się ona być... wieloznaczna.
  • A takie lokalne pytanie, co do tematu, to: Wiem, że można przełączać się pomiędzy składnią intela, a at&t, tylko nie pamiętam (i nie mogę znaleźć) jak. Czy ktoś pomoże? Na składnie intela przełączało się bodajże tak: ".intel_syntax noprefix", ale jak to odkręcić i przejść do domyślnej (at&t)?
  • I jeśli ktoś nie zna żadnego kursu, ani poradnika (lub chciałby po prostu pomoc), to może wiedziałby jak przerzucić adres funkcji (z "czystego" c, jak np. printf) do jakiegoś rejestru i użyć go w wstawce (najlepiej najprościej - bez tworzenia dodatkowych zmiennych)?
Z góry dziękuję za wszelką pomoc i pozdrawiam.
P-96544
mactec
» 2013-11-18 21:54:31
Link: http://gynvael.coldwind.pl/​?id=14

I jeśli ktoś nie zna żadnego kursu, ani poradnika (lub chciałby po prostu pomoc), to może wiedziałby jak przerzucić adres funkcji (z "czystego" c, jak np. printf) do jakiegoś rejestru i użyć go w wstawce (najlepiej najprościej - bez tworzenia dodatkowych zmiennych)?
 
Co do tego wystarczy zwykły call np:
C/C++
asm( "push 'C'\n\
      call putchar\n\
      add esp, 4" );
Kompilacja:
gcc main.c -masm=intel -m32

Tylko ja to kompilowałem na linuxie, na windowsie będziesz musiał dodać '_' przed putcharem.
P-96634
RazzorFlame
» 2013-11-18 23:16:36
Edit: Ale palnąłem głupote ;) Sorki
P-96644
f651144
Temat założony przez niniejszego użytkownika
» 2013-11-25 21:22:07
@mactec:

1. Myślisz, że nie znam kursów tego pana?! ;) Chodziło mi nie o to ja wstawić coś z napisanego w asemblerze do kody w c/c++, tylko jak "dogadać" się z kompilatorem w sprawie lokalnych zmiennych. Wiem, że jakoś się da, tylko jak? :P
2. Ale mi nie o call chodzi. Chodzi o to, że zmienna lokalna jest wskaźnikiem na jakąś funkcję, a je chciałbym skoczyć do tej funkcji w wstawce.
3. Nie mogę użyć "-masm=intel". Takie coś zadziała tylko przy założeniu, że wszystkie wstawki używają składni intela. Ja muszę przełączyć się dynamicznie (wewnątrz mojej wstawki) na składnię intela i wrócić do at&t na koniec (na koniec mojej wstawki).

--------------------
Teraz ja czytam mój pierwszy post, to zauważam, że faktycznie można nie zrozumieć. Może tu się poprawie i otwarci zaznaczę, że chodzi o "synchronizację" własnych wstawek z kodem GCC (MinGW). Czyli by np. GCC podał adresy wybranych zmiennych lokalnych.
P-97497
mactec
» 2013-11-25 21:59:01
http://wiki.osdev.org​/Inline_Assembly
Poczytaj, tu masz dużo informacji.
P-97507
f651144
Temat założony przez niniejszego użytkownika
» 2013-11-26 21:22:40
Wieeeeelkie dzięki mactec! Właśnie czegoś takiego szukałem.
P-97621
« 1 »
  Strona 1 z 1