[Asm] Książka do nauki Asemblera

0

Witajcie!
A więc tak:
Moje aktualne umiejętności: znam C++, wiem co nieco o programowaniu w wxWidgets i nadal nad tym pracuję.
Moje pytanie: Doradźcie mi jakiś dobry tytuł, który wyjaśni mi od początku co to jest Asembler, budowę procesora itd. po prostu poszukuję książki, dla osoby zielonej w Asemblerze.

pozdrawiam i z góry dziękuję za odpowiedzi.

PS. Przeszukałem Helion, ale książki, które tam znalazłem nie mają zbyt dobrych opinii.

0

jesli znasz sie na angielskim to polecam: http://agner.org/optimize/

jest to bardzo praktyczny kurs. nie uczy jak sie robi systemy operacyjne, zmienia tryby procesora itd. zorientowany jest glownie na tryb 32- bitowy (16- bit to i tak archaizm). skupia sie na optymalizacji kodu, przeplywu danych, organizacji struktur, itp itd czyli rzeczy dla ktorych wybiera sie programowanie w asemblerze.

ksiazki papierowe sa glownie przestarzale, tzn opisuja nieuzywane juz metody obslugi sprzetu, skupiaja sie na trybie 16- bitowym, srodowisku dos.

na sam poczatek przygody z asemblerem polecam jednak tutoriale iczeliona: http://win32assembly.online.fr/tutorials.html . opisuja podstawy programowania w windows w asemblerze. tutorial opiera sie na asemblerze masm (microsoftowy standard). dzieki nim mozesz dowiedziec sie jak dzialaja instrukcje sterujace, klasy, metody i inne rzeczy na najnizszym poziomie (a takze dlaczego niektore formy wywolan metod i funkcji sa efektywne a inne nie).

z asemblerow polecam stworzonego przez polskiego doktoranta matematyki ; ) fasma: http://flatassembler.net/

ps. w sumie to pogubilem sie troche z kolejnoscia ;) zacznij od tutoriali iczeliona. kurs agnera jest w sumie dla osob bieglych w asemblerze.

ps2: nie zajmuj sie trybem 16- bitowym (i bezposrednia komunikacja ze sprzetem jak za czasow dosa). to strata czasu ;) od razu ucz sie asemblera 32- bitowego pod windows albo pod linux (albo inne systemy, wazne zeby mialy tryb 32- bit i wlasne sterowniki).

0

(zakładam, że chodzi o asembler na procesory x86)

ps2: nie zajmuj sie trybem 16- bitowym (i bezposrednia komunikacja ze sprzetem jak za czasow dosa). to strata czasu ;) od razu ucz sie asemblera 32- bitowego pod windows albo pod linux (albo inne systemy, wazne zeby mialy tryb 32- bit i wlasne sterowniki).

Trudno jest raczej zacząć naukę asemblera od 32 bitowego trybu chronionego. Tam stosuje się dość skomplikowane mechanizmy zarządzania pamięcią, przerwaniami i stosem. Z tego co widzę to doradzasz raczej stosowanie asemblera w miejscach tam gdzie powszechnie stosuje się języki wysokiego poziomu, a to raczej mija się z celem.

Ja radzę zaczynać naukę asemblera od tego czym jest procesor, rejestr, stos itp. i raczej od trybu rzeczywistego 16 bitowego. Z tego co kiedyś czytałem to sądzę, że najlepsze są do tego książki Stanisława Kruka. To bardzo dobry autor książek o asemblerze.

Co do kompilatorów to polecam NASM, ale jak dobrze pamiętam to w książkach S. Kruka będzie stosowana raczej składnia TASM.

0

asembler 32- bitowy przydaje sie do robienia wstawek asemblerowych, ewentualnie calych funkcji (niewielkich, ale w ktorych program siedzi przez duza czesc czasu). masm na przyklad wypluwa domyslnie pliki .obj (fasm tez moze ale tam jest troche trudniej, tzn inna skladnia jest wtedy i wg mnie lepiej pisac dll'ki w fasmie), ktore mozna polaczyc z kodem w c++ czy innym (oczywiscie odpadaja tutaj technologie typu java, .net itd).

w xp tryb 16- bit jest mocno ograniczony, w viscie w ogole nieobslugiwany. do pisania w 16- bit nalezaloby uzywac dosboxa albo innych emulatorow, ktore nie emuluja danego srodowiska w 100 %.

16- bit juz sie nigdzie nie uzywa, po prostu wyszedl z uzycia. ja nie namawiam do pisania 32- bitowych extenderow tylko do pisania w srodowisku od poczatku 32- bitowym.

przykladowo w programie do kompresji danych paq: http://cs.fit.edu/~mmahoney/compression/#paq uzyto krotkiej funkcji napisanej w calosci w asemblerze, ktora sluzyla do uczenia sieci neuronowej. napisanie tej funkcji w asm przyspieszylo caly program o kilkadziesiat procent. pliki .cpp i .asm sa kompilowane osobno, a potem linkowane do jednego pliku wykonywalnego.

0

Nevar znalazłem jednego e-booka w necie książki Stanisława Kruka: http://escapemag.escapi.net/fragmenty/asembler-windows.pdf przeczytałem tylko wstęp i zapowiadał się całkiem ciekawie.
A co do tego jaki mam procesor to na razie używam AMD Sempron i mam Windows XP 32-bit, ale już niedługo planuję zakup nowego sprzętu z Intel Core 2 Duo i przejść na system 64-bit(ale to chyba dopiero po premierze Windows 7). I tu pojawia się nowe pytanie: czy jest sens uczenia się Asemblera dla moje aktualnego procesora czy lepiej poczekać do zakupu Intel C2D? - bo czytałem gdzieś, kiedyś że Asembler jest zależny od sprzętu.</b>

0

roznice sa doglebnie opisane na: http://agner.org/optimize/
roznice to miedzy innymi inny schemat dekodowania rozkazow, inne timingi instrukcji, inny zestaw rozszerzen podstawowego zestawu intrukcji x86 (ew x86-64), inny schemat przewidywania rozgalezien, inna wielkosc i struktura pamieci cache (takze inna asocjacyjnosc), etc.

w tutorialach iczeliona jest dobry wstep. http://win32assembly.online.fr/tutorials.html (sekcja Win32 Assembly). wersja polska: http://edu.i-lo.tarnow.pl/inf/prg/002_winasm/index.php .

ja swoja przygode z programowaniem zaczalem wlasnie od asemblera :P 32- bit pod windows z tutoriala iczeliona po angielsku. mialem wtedy chyba 13 lat :D . i jakos poszlo. teraz znam asma bardzo dobrze (zarowno 16- bit jak i 32- bit). zrobilem nawet lamerska stronke o asmie: http://asembler.republika.pl/ (juz stara jest i zaniedbana :P ). teraz kodze w asemblerze (fasm w win32), c++, java.
ps. no i moj sztandarowy :P program w asmie: http://cs.fit.edu/~mmahoney/compression/text.html#2153 (TarsaLZP).

0
brzeszczot napisał(a)

I tu pojawia się nowe pytanie: czy jest sens uczenia się Asemblera dla moje aktualnego procesora czy lepiej poczekać do zakupu Intel C2D?

Najtrudniejsze są pytania o sens więc na to ci nie odpowiem.

brzeszczot napisał(a)

bo czytałem gdzieś, kiedyś że Asembler jest zależny od sprzętu.

Procesory x86 mają kompatybilność z wcześniejszymi wersjami więc jak sobie kupisz nowy sprzęt to będzie on mógł pracować w każdym trybie 16,32 i 64 bitowym.
Jednak nowe systemy MS zaczynając od Vista nie oferują już emulowania kodu 16 bitowego. Więc możesz pozostać przy XP lub używać emulatora DOSBox.

0

donkey7 wielkie dzięki za linki, and Nevar dzięki za objaśnienie.
Dziś szczęśliwym trafem losu odwiedził mnie znajomy, który zaproponował mi zapoznanie się z tymi książkami:
Win32ASM. Asembler w Windows
Profesjonalne programowanie. Część 2. Myśl niskopoziomowo, pisz wysokopoziomowo
Książki wydane przez Helion traktujące na temat Asemblera nie mają zbyt dobrych opinii, ale mogę skorzystać z nich akurat za darmo - co o tym myślicie? Warto chociaż sobie nimi zaprzątać głowę? Może ktoś czytał którąś?
Znajomy nic mi o nich nie mógł powiedzieć bo sam ich nie czytał :P </url>

0

ta pierwsza pewnie omawia podobne sprawy co w tutorialu iczeliona. druga wydaje sie ciekawa propozycja (rzetelny autor), ale raczej jako kolejny etap, juz po poznaniu podstaw asemblera pod win32. zaznaczam ze obu nie czytalem (w ogole zadnej papierowej o asmie).

masm jest tutaj: http://www.masm32.com/

no i najwazniejsze: pisanie w asmie ma sens tylko gdy uzywamy szerokiej gamy trikow dla uzyskania najlepszej wydajnosci. dzisiejsze kompilatory tworza z reguly dobry kod, w szczegolnosci intel c compiler i ciezko jest je znacznie pobic pod wzgledem wydajnosci nie uciekajac sie do zaawansowanych trikow oraz uzywania mmx, sse i innych rozszerzen.

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