A.D.Danilecki , 66-200 Świebodzin, Polska
W tej chwili szopen@aurora.put.poznan.pl
lub szopen@arrakis.cs.put.poznan.pl
Poznań, 61-142 Ul.Św Rocha 11b
Adres powyższy aktualny na pewno do wakacji 2000 roku
Krótki wstęp do programowania z wykorzystaniem inline assemblera x86

TO JEST WERSJA 0.6 TEGO TEKSTU - CZYLI WCIĄŻ BETA PROSZE O KOMENTARZE, TYCZĄCE STYLU, EWENTUALNYCH BŁEDOW ITD JEŻELI SAM DAŁBYŚ RADE LEPIEJ NAPISAĆ NINIEJSZY DOKUMENT, PROSZE O KONTAKT A PRZEKAŻE WSZYSTKIE MATERIAŁY W MOIM POSIADANIU
18 października 1999 . Wszystkie linki zamieszczone w tekście do tego dnia istniały (were valid) o ile nie jest podane inaczej w tekście avly@castle.net - adres nieaktualny, nie znam nowego adresu

1. Jak pisać w assemblerze z wykorzystaniem gcc.


NEXT - Punkt1 : Dlaczego nie używać assemblera?
PREV - Co nowego w tym dokumencie ?

do spisu treści

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 szopen@aurora.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.html
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"
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@polbox.com Szukaj w przetłumaczonego Assembly-HOWTO na stronach polskiego projektu JTZ (Jak To Zrobić) .

Do nauki assemblera możesz wykorzystać frontend do objdump --disassemble, programik autorstwa Andrzeja Radeckiego ktory konwertuje wyjscie objdumpa na html. Programik ten znajduje sie na stronie http://www.wpk.p.lodz.pl/~radecki/disasm.tar.gz

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.




NEXT - Punkt1 : Dlaczego nie używać assemblera?
PREV - Co nowego w tym dokumencie ?