Autor Wątek: C++ && Assembler  (Przeczytany 8063 razy)

Offline Moriturius

  • Użytkownik

# Styczeń 03, 2008, 16:59:54
W tym wątku chciałbym poruszyć 2 tematy.

1) Czy znacie może jakieś ciekawe stronki traktujące o łączeniu C/C++ z assemblerem? Co znalazłem w google to albo nic wartego uwagi albo już dawno nie istniało.
2) Czy nie uważacie że pisanie w Asmie mogłoby pozytywnie wpłynąć na szybkość gier? ;)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Netrick

  • Użytkownik

# Styczeń 03, 2008, 17:09:34
W samym asmie - tak, w cpp nie zaleca sie optymalizacji, gdyz wiekszosc rzeczy kompilator lepiej zoptymalizuje (ale nie wszystkie!). Ale pure asmbez obiektow itp. to zazwyczaj demon szybkosci.

Offline Xion

  • Moderator
    • xion.log

# Styczeń 03, 2008, 17:34:46
1) Polecam książkę "Assembler. Praktyczny kurs" (Helion).
2) Pisanie gier w czystym asmie na pewno tak, ale osobiście bym to chyba odradzał ;-)

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Styczeń 03, 2008, 17:36:25
2) Czy nie uważacie że pisanie w Asmie mogłoby pozytywnie wpłynąć na szybkość gier? ;)

Na szybkość działania pewnie tak, na szybkość tworzenia - niekoniecznie ;).

Offline yarpen

  • Użytkownik

# Styczeń 03, 2008, 17:38:33
Na dzien dzisiejszy w "assemblerze" pisze glownie intrinsics (to taki sredni assembler, stad cudzyslow), najlepsze kompendium tutaj: http://msdn2.microsoft.com/en-us/library/26td21ds.aspx . Generalnie wyciskanie cykli przez wstawki to ostatni etap optymalizacji, do ktorego 99% zespolow nie dochodzi, bo albo nie ma potrzeby po optymalizacjach wyzszego poziomu albo nie ma czasu. Jest jakis rzeznik z id Software, ktory lubi recznie optymalizowac pod MMX/SSE, ale to wyjatek :).

Offline s0d

  • Użytkownik

# Styczeń 03, 2008, 17:49:36
Zgadzam sie z opiniami wyzej. Program napisany wylacznie w asmie bedzie bardzo szybki ale wstawki w kodzie cpp pisane w asmie sa nie oplacalne bo napisanie takiego kodu moze zajac wiecej czasu przy czym wzrost wydajnosci moze byc minimalny lub zaden z tego powodu ze im nowszy kompilator tym lepiej radzi sobie z optymalizacja kodu. Wiec imo szkoda zachodu. Ale to tylko moje zdanie a tutaj zapodam Ci drogi kolego cos co moze sie przydac ;P

http://argon.kul.lublin.pl/~wawryl/zad4/index.php?plik=LEKCJA16.TXT
Pzdr

Offline sobol

  • Użytkownik

# Styczeń 03, 2008, 17:59:42
Tyle, że czasem trzeba się odwołać bezpośrednio do rejestrów stosu or sth. (przynajmniej mi się zdarzyło) - wtedy hybrydka niezastąpiona ;)

RageX

  • Gość
# Styczeń 03, 2008, 18:42:51
Tak w sumie, to niekoniecznie wstawki do kodu C++. Możnaby się pokusić o "wstawki" C++ do Asma :P. Mam na myśli coś takiego (w NASMie):

;plik.asm

[extern Funkcja_Cpp]

main:
   call Funkcja_Cpp

//plik.cpp

#include <iostream>

int main()
{
    std::cout << "Once a BAR was FOOed and now we have computers ;].";
   
    return 0;
}


Potem wystarczy to razem zlinkować i działa ;].

Dzięki temu możemy napisać fundamenty programu - główne pętle, serie warunków, itp. w asmie. A kod trudniejszy... ;].

No tylko, jak już powiedzieli wyżej, na szybkość tworzenia to nie wpłynie pozytywnie ;). Mimo to assembler rządzi ;].

Offline _Flak

  • Użytkownik

# Styczeń 03, 2008, 19:32:26
no wstawki w asmie, to nie taka głupota - zwłaszcza, kiedy animacja postaci liczona jest na CPU  (jak np. w silniku id Software). czytałem pewiena prezentację/artukuł id SOftware, gdzie pokazano cala ścieżkę przekształceń podczas liczenia animacji - kolejne etapy typu przekształceń typu zamiana kwaterniona na macierz, czy przemnożenie dwóch macierzy, itp - zyski na wydajności przy użyciu sam-SSE wahały się tutaj od x1.7 do x7 względem wersji C z FPU.

Sam kompilator niewiele wskóra, nawet jeśli udostepnisz mu SSE/SSE2 (w msvc8.0 ograniczało się to do tego, że wiekszośc operacji z FPU zostało przerzuconych na SSE, ale jako operacje SKALARNE, wiec korzyść jedynie w łatwiejszej optymalizacji dla kompilatora, zamiast kiepskiego stos FPU jest możliwość wykorzystania w pełni 8 rejestrów.

Wiec albo mozna samemu pisać takie rzeczy w C++ i zyjąc ze świadomością, że jednak mozna kod przyśpieszyć np. 5x ,albo jeśli brak chęci/czasu od razu sięgnąc do bibliotek matematycznych udostępnianych na stronie Intela, czy AMD.

a co do intrinsics - 'w zasadzie' to opakowanie gołych instrukcji MMX/SSEn w funkcje plus kilka usprawnień - funkcje zwracają wartości, intrukcje nie ale połapanie się w nich jest tak samo łatwe/trudne jak z gołymi instrukcjami SSE
kod:
__m128 xm0, xm1;
xm1 = _mm_add_ss(xm0 , xm1 );
jest równowazny:
addss  xm1,xm0wiec prawie jeden pies to.



Offline Steel_Eagle

  • Użytkownik

# Styczeń 03, 2008, 20:22:03
Do źródeł Panowie :)

Intel® 64 and IA-32 Architectures Software Developer's Manual:
Volume 1: Basic Architecture
Volume 2A: Instruction Set Reference, A-M
Volume 2B: Instruction Set Reference, N-Z

Inne ważne:
Application Binary Interface x86

Jeżeli chodzi o naukę asm, to żeby to miało ręce i nogi najpierw trzeba poczytać trochę o architekturze komputera. O tym co tam naprawdę siedzi w procesorze i jak wykonywane są instrukcje. Bez znajomości architektury nie ma sensu pisać w nim kodu, bo będzie tylko wolniejszy. A nawet jeśli człowiek już pozna architekturę to trzeba nie lada umiejętności żeby pisać optymalnie w CISCowej bestii jaką jest x86.

Poza tym polecam zacząć naukę asm z kompilatorem nasm w środowisku linuksowym, jest to chyba najprostszy assembler na początek :) ( masm ma bardzo dużo funkcjonalności, która przy pisaniu wstawek nigdy się nie przyda i o ile ktoś nie wiąże swojej przyszłości z klepaniem w asmie to będzie mu to niepotrzebne)

Offline mINA87

  • Użytkownik

# Styczeń 03, 2008, 21:02:01
Jeśli chodzi o C++ i ASM'a to polecam dokumenty dotyczące modelu obiektu w C++ czyli Lippmana o ogólnikach i "C++ Unde the Hood" opisujące dokładnie model obiektu C++ w Visual'u, bo moim zdaniem to jest podstawa embedowania kodu ASM w C++ i tylko wtedy jest tego jakiś sens :) Można wiele ciekawych niskopoziomowych rzeczy robić i bawić się w różne hocki klocki bez obawy i zdziwienia że coś nie działa :)
Jeśi chodzi o jakieś pierdołowate wstawki to albo polecam za yarpenem używanie inctrinctów do SSE/MMX, albo odradzam pisanie takich wstawek bo nie ma to sensu jak już zauważyli przedmówcy :)

RageX

  • Gość
# Styczeń 03, 2008, 23:08:38
2) Czy nie uważacie że pisanie w Asmie mogłoby pozytywnie wpłynąć na szybkość gier? ;)

Na szybkość działania pewnie tak, na szybkość tworzenia - niekoniecznie ;).
wielokrotnie powielana bzdura ;).

Offline Moriturius

  • Użytkownik

# Styczeń 03, 2008, 23:10:41
2) Czy nie uważacie że pisanie w Asmie mogłoby pozytywnie wpłynąć na szybkość gier? ;)

Na szybkość działania pewnie tak, na szybkość tworzenia - niekoniecznie ;).
wielokrotnie powielana bzdura ;).

Co masz na myśli?

RageX

  • Gość
# Styczeń 03, 2008, 23:50:07
Nie jest prawdą to, iż kod w assemblerze będzie się pisało wolniej. Czy też to, iż sam asm jest trudniejszy, w ogóle.
Jest tylko inny, zawsze gdy przerzucamy się na coś nowego, to wydaje nam sie to trudniejsze...
np. sam kod asm'u nie zna za bardzo pojęcia OOP-u np. wszystko sami rozwijamy na metody. Sami tworzymy jakieś takie hybrydy, które możemy nazwać sobie "obiektami".
W c++ nieraz napiszemy więcej "znaków", nasz kod napsiany w asm'ie z powodu braku obiektowości, może być dużo czytelniejszy (niektórzy mogą się tu obruszyć).
Czytelność kodu w obu przypadkach jest kwestią indywidualną. Pewnie dla kogoś, kto nie próbował kodować niżej niźli c++ może sie kod asm'a wydawać nieczytelny, ale zapewniam że jest to tylko powierzchowne wrażenie. Po kilku krokach się okazuje, że znowu wszystkie instrukcje gdzieś są rozpisane. Że da się jak już ktoś wyżej zauważył, wywoływać c funkcje (jest tylko problem z odtworzeniem nagłówków czasami), że da się używać w ten sposób WinApi, że wszystko ma jakiś swój porządek. W końcu tego nie tworzyli idioci.

Polecam asm i pozdrawiam.

W ogóle mam wrażenie jakby większość tych kodujących od lat c++'owców traktowała asm'a jak wilka złego.
 
« Ostatnia zmiana: Styczeń 03, 2008, 23:52:58 wysłana przez RageX »

Offline vashpan

  • Użytkownik
    • Strona

# Styczeń 03, 2008, 23:59:41
Steel_Eagle: nie wiem czy dobrze zrozumialem, ale nasm jest dostepny takze pod Windowsa...

Sam sie niedlugo (oczywiscie jak starczy czasu) zabieram za architekture x86 i assembler, ale nie do gier, ostatnio temat osdev mnie zainteresowal ;p A tam na poczatku bez asm'a ani rusz.