A.D.Danilecki, Poznan, Polska
Politechnika Poznanska, Wydzial Informatyki i Zarzadzania
W tej chwili adanilecki _malpa_ cs.put.poznan.pl
Z wykorzystaniem wielu listow z uwagami od wielu autorow
Krótki wstęp do programowania z wykorzystaniem inline assemblera x86


1. Jak pisać w assemblerze z wykorzystaniem gcc.



Autor poniższego tekstu nie rości sobie pretensji do miana guru. Nawet więcej, ja kiepsko znam assembler i sam się go cały czas uczę. Ale po prostu nigdzie nie mogłem znaleźć żadnych informacji po polsku na temat pisania w assemblerze pod linuxa. W końcu, zrezygnowany pomyślałem, że warto by było kilka z moich doświadczeń i efektów poszukiwań spisać, by innym było łatwiej zaczynać, zwłaszcza że na pl.comp.os.linux już kilka razy pojawiały się prośby o tego rodzaju dokument. I te moje zapiski powoli się rozrosły. Mam nadzieję że uda mi się z nich zrobić coś pomocnego w nauce programowania w asmie pod gcc, lub przynajmniej ktoś lepiej się na tym znający przejmie ode mnie pałeczkę i znajdzie może coś wartego wykorzystania w tym tekście.
Dokument jest rozpowszechaniany na licencji GNU Public License , której pełen tekst znajduje się na końcu tego dokumentu. W skrócie możesz z nim robić co chcesz tak długo, jak długo będziesz pozwalał wszystkim innym na korzystaniu na podobnych zasadach z dokumentów które napiszesz za jego pomocą lub na jego podstawie. Jeżeli kiepsko znasz angielski, przeczytaj jej polskie tłumaczenie. Niestety nie wiem czy to tłumacznenie jest zatwierdzone przez FSF
Jeżeli znajdziesz w poniższym dokumencie błędy, proszę wyślij list na adres adanilecki _malpa_ cs.put.poznan.pl . Być może uznasz że lepiej sam napisałbyś taki krótki wstęp, wtedy proszę skontaktuj się ze mną, byśmy nie powtarzali dwa razy tej samej roboty. Na końcu dokumentu znajduje się kilka pytań na które nie znalazłem odpowiedzi. Jeżeli ty je znasz, proszę skontaktuj się ze mną.

Materiały do poniższego tekstu znalazłem na następujących stronach :

1. DJGPP QuickAsm Programming Guide ( mail: AVLY ) Adres ten był nieaktualny gdy ostatnio go sprawdzałem

2. Brennan's Guide to Inline Assembly (mail: Brennan Underwood)

3. Strona Intela (Znajdujące się tam manuale w formacie pdf, jeżeli nie masz niczego do odczytywania tego formatu, łatwo możesz przerobić na pliki tekstowe programem pdftotext, który powinien standardowo być dostarczany z Twoją dystrybucją Linuxa)


Korzystałem poza tym z następujących materiałów :

4. A.Marciniak "Borland Pascal 7.0 z elementami programowania", część Ic (dodatek poświęcony instrukcjom assemblera).
5. Materiałów zawartych w informacjach standardowo dostarczanych w dystrybucjach Linuxa (info gcc, info gdb, info as, źródła jądra ...)
6. dokumentacji NASM'a www.cryogen.com/Nasm
7. PC Games Programmers Encyclopedia ftp://teeri.oulu.fi/pub/msdos/programming/gpe"
8. Michael K. Johnson, Linux Hacker's Guide
9. Konstantin Boldyshev, Asm-utils lightning.voshod.com/asm
10. Brian Reiter, A Whirlwind tutorial on Creating Really Teensy ELF Executables on Linux www.muppetlabs.com/~breadbox/tiny/teensy.php
11. Assembler Programming Journal asmjournal.freeservers.com
oraz w Assembly-HOWTO autorstwa
12. Francois'a Rideau, rideau@clipper.ens.fr
Skorzystałem także z listów:
Paweł Krawczyk, dziękuję za list na temat używania gdb w programie bez symboli
Adam Wolny , dzieki za list z ogromem informacji, poprawek i opisem wielu polecen. Czesc listu lekko przerobilem i wstawilem jako punkt "Instrukcje uprzywilejowane"
macro _mailto_ ds2.pg.gda.pl M. Różycki jego list wstawiłem jako Dodatek D


Wszystkie te teksty są wykorzystane za zgodą autorów, za wyjątkiem pozycji 5-8. Tekst Assembly-HOWTO jest przetłumaczony na polski przez wegorzg _mailto_ polbox.com Szukaj w przetłumaczonego Assembly-HOWTO na stronach polskiego projektu JTZ (Jak To Zrobić) .
Dziekuje rowniez za listy z wskazaniami literowek, sugestiami zmian i poprawkami: Marcin Wojtczuk, Piter, Robert Litwiniec, Rafal Czlonka.

Zakładam, że mniej więcej wiesz co to jest assembler i gcc. Jeżeli wiesz trochę więcej, nie irytuj się, że niektóre rzeczy będę wykładał jak krowie na miedzy. Powtarzam: jeśli uważasz, że napisałbyś ten tekst lepiej, napisz do mnie, a ja chętnie będę pierwszym czytelnikiem i na swojej stronie postawię odnośnik do Twoich materiałów.

Niniejsze HOWTO opisuje głownie inline assembler pod x86 z wykorzystaniem gcc; możesz jednak wykorzystać informacje w nim zawarte do nauki asma pod inne maszyny. Jeden rozdział opisuje też jak pisać bezpośrednio w assemblerze, bez żadnego C. Tam też dodałem opis odwołań do jądra, czyli wołań systemowych - szybki i prosty sposób na zmniejszenie rozmiaru kodu i zwiększenia jego nieczytelności.