Assembly HOWTO Autor: Franois-Ren Rideau fare@tunes.org v0.4n, 22 Sierpnia 1998 Wersja polska: Zbigniew Micha Kempczyski wegorz@byd- goszcz.pkobp.pl v1.0, 30 Stycznia 1999 r. Dokument ten zosta napisany w standardzie ISO-8859-2. Orygina tego dokumentu znajduje sie pod adresem <http://www.tunes.org/~fare/Assem- bly-HOWTO>. To jest Linux Assembly HOWTO. Ten dokument opisuje metody programowania w assemblerze z uyciem WOLNYCH narzdzi pro- gramistycznych, koncentrujc si na Systemie Operacyjnym Linux na plat- formach i386. Zaczony materia moe, ale nie musi by zgodny, z innym sprztem i/lub oprogramowaniem. Przewodnictwo na tym bdzie mile widziane. Sowa kluczowe: assemblacja, assembler, wolny, makroproce- sor, preprocesor, asm, inline asm, 32-bitowy, x86, i386, gas, as86, nasm ______________________________________________________________________ Spis treci 1. WPROWADZENIE 1.1 Legal Blurp 1.2 Wana Informacja 1.3 Przed sowem 1.3.1 Jak uywa tego dokumentu 1.3.2 Inne zalene dokumenty 1.4 Historia 1.5 Wyrazy Uznania 2. CZY POTRZEBUJESZ ASEMBLACJI? 2.1 Za i Przeciw 2.1.1 Korzyci Assemblacji 2.1.2 Niekorzyci Assemblacji 2.1.3 Ocenianie 2.2 Jak NIE uywa Assemblera 2.2.1 Oglne zasady uzyskania efektywnego kodu 2.2.2 Jzyki ze zoptymalizowanymi kompilatorami 2.2.3 Oglne zasady przypieszania twojego kodu 2.2.4 Sprawdzanie kodu generowanego przez kompilator 3. ASSEMBLERY 3.1 Inline Assemblera GCC 3.1.1 Gdzie znale GCC 3.1.2 Gdzie znale dokumentacje GCC Inline Asm 3.1.3 Jak waciwie wywoywa GCC z kodem inline assemblera. 3.2 GAS 3.2.1 Gdzie go znale 3.2.2 Jaka jest skadnia AT&T 3.2.3 Ograniczony tryb 16-bitowy 3.3 GASP 3.3.1 Gdzie znale GASP 3.3.2 Jak to dziaa 3.4 NASM 3.4.1 Gdzie znale NASM 3.4.2 Co to robi 3.5 AS86 3.5.1 Gdzie dosta AS86 3.5.2 Jak wywoa assembler? 3.5.3 Gdzie znale dokumentacje 3.5.4 Co jeli nie mog ju skompilowa Linux-a z now wersj ? 3.6 INNE ASSEMBLERY 3.6.1 Win32Forth assembler 3.6.2 Terse 3.6.3 Nie-wolne i/lub Nie-32bitowe x86 assemblery. 4. METAPROGRAMOWANIE/MAKROPRZETWARZANIE 4.1 Co jest zintegrowane w powyszym 4.1.1 GCC 4.1.2 GAS 4.1.3 GASP 4.1.4 NASM 4.1.5 AS86 4.1.6 INNE ASSEMBLERY 4.2 Zewntrzne Filtry 4.2.1 CPP 4.2.2 M4 4.2.3 Makroprzetwarzanie z twoim wasnym filtrem 4.2.4 Metaprogramowanie 4.2.4.1 Cz wspomagajca z dostpnych kompilatorw 4.2.4.2 Zestaw narzdzi Machine-Code z New-Jersey 4.2.4.3 Tunes 5. KONWENCJE WYWOA 5.1 Linux 5.1.1 Poczenie z GCC 5.1.2 ELF kontra a.out - problemy 5.1.3 Bezporednie wywoania systemowe Linux-a 5.1.4 I/O pod Linux-em 5.1.5 Dostp do 16-bitowych sterownikw z Linux-a/i386 5.2 DOS 5.3 Winwybuchy i takie 5.4 Twj wasny OS 6. DO ZROBIENIA & WSKAZANIA 7. Od tumacza ______________________________________________________________________ 1. WPROWADZENIE 1.1. Legal Blurp Copyright (C) 1996,1997,1998 by Franois-Ren Rideau. Ten dokument jest wolnym oprogramowaniem, moesz go redystrybuowa i/lub modyfikowa zgodnie z zaoeniami GNU General Public License opublikowanym przez Free Software Foundation; wersja 2 Licencji, lub (w twoim przypadku) inna pniejsza wersja. 1.2. Wana Informacja To jest interaktywnie rozwijany dokument: jeste specjalnie proszony do zadawania pyta, udzielania odpowiedzi na pytania, poprawiania odpowiedzi, dodawania nowych odpowiedzi na FAQ, wskazywania na inne oprogramowanie, wskazywania osobie prowadzcej bdy lub braki na stronach. Jeli jeste zmotywowany, mgby przej prowadzenie tego HOWTO. Sowem, dziaaj ! By przej prowadzenie skontaktuj si z kimkolwiek, kto wydaje si prowadzi Assembly-HOWTO. W trakcie tego pisania to jestem ja, np. Franois-Ren Rideau <mailto:fare@tunes.org>. Jakkolwiek, mino troch czasu od kiedy poszukiwaem mocnego gocia by podmieni mnie jako prowadzcego ten dokument. Niekorzyci jest to, i musisz spdzi troch czasu trzymajc dokument na czasie, poprawiajc go, i uczc si narzdzi publikacyjnych LDP. Korzyci jest to, i zdobdziesz troch sawy i moesz otrzyma wolne kopie kompendiw HOWTO. 1.3. Przed sowem Ten dokument ma na celu udzielenie odpowiedzi na najczciej zadawane pytania przez ludzi, ktrzy programuj lub chc programowa w 32-bitowym assemblerze x86 uywajc wolnych assemblerw, zwaszcza w systemie operacyjnym Linux. Moe on take wskazywa inne dokumenty o nie-wolnych, nie-x86, lub nie-32-bitowych assemblerach, chocia nie jest to jego pierwszorzdnym celem. Poniewa gwnym celem programowania w assemblerze jest budowa wntrznoci systemw operacyjnych, interpretatorw, kompilatorw, i gier, gdzie kompilator C zawodzi nie dostarczajc potrzebnych rodkw wyrazu, (wykonanie jest coraz rzadszym tematem), skoncentrujemy si na rozwoju takiego oprogramowania. 1.3.1. Jak uywa tego dokumentu Ten dokument zawiera odpowiedzi na pewne najczciej zadawane pytania. W wielu miejscach, zostay umiejscowione adresy URL by wskaza na pewne oprogramowanie lub magazyny dokumentacji. Sprawd gdzie s skopiowane najbardziej uyteczne magazyny, i sprbuj dobra si do najbliszej z nich; uchronisz w ten sposb Internet przed niepotrzebym ruchem w sieci, i zaoszczdzisz swj cenny czas. W szczeglnoci pewne wielkie magazyny na caym wiecie, sa kopiami innych popularnych magazynw. Powiniene si nauczy i zapamita miejsca umiejscowione blisko ciebie (roztropno-sieciowa). Czasami, lista takich kopii jest wypisana w pliku, lub we wiadomoci wejciowej. Miej na uwadze te porady. W przeciwnym wypadku zapytaj archie o oprogramowaniu ktrego szukasz... Najwiesze wersje tego dokumentu znajduj si w <http://www.tunes.org/~fare/Assembly-HOWTO> lub <http://www.tunes.org/~fare/Assembly-HOWTO.sgml> ale to co jest w magazynach Linux HOWTO powinno by take na czasie (ale tego nie wiem): <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/> (?) Francuska wersja tego HOWTO moe by znaleziona w <ftp://ftp.lip6.fr/pub/linux/french/HOWTO/> 1.3.2. Inne zalene dokumenty o Jeli nie wiesz czym jest wolne oprogramowanie, prosz przeczytaj ostronie GNU General Public License, ktra jest uywana w wielu wolnych programach, i jest pierwowzorem dla wikszoci takich licencji. Oglnie pojawia si w pliku o nazwie COPYING, z wersj biblioteczn w pliku o nazwie COPYING.LIB. Literatura z FSF <http://www.fsf.org> (fundacja wolnego oprogramowania) moe take ci pomc. o W szczeglnoci, interesujcym rzecz w takim typie wolnego oprogramowania przychodzcego ze rdami jest to, i moesz je sprawdzi, poprawi a take czasami z nich zapoyczy. Przeczytaj ostronie szczegy licencji i skorzystaj. o Jest lista FAQ na comp.lang.asm.x86, ktra odpowie na wiele oglnych pyta o programowaniu w assemblerze x86, i pytaniach o pewnych komercyjnych assemblerach w 16-bitowym rodowisku DOS-a. Pewne z nich zahaczaj o wolnym 32-bitowym programowaniu, wic moesz chcie przeczyta to FAQ... <http://www2.dgsys.com/~raymoon/faq/asmfaq.zip> o FAQ-i i dokumenty istniej o programowaniu na twojej ulubionej platformie, jakakolwiek ona jest, wic powiniene skonsultowa tematy specyficzne dla niej nie bezporednio zwizane z programowaniem w assemblerze. 1.4. Historia Kada wersja zawiera kilka napraw i mniejszych korekt, ktrych nie bdzie trzeba cigle poprawia. Version 0.1 23 Kwiecie 199996 Francois-Rene "Far" Rideau <fare@tunes.org> tworzy i publikuje pierwsze mini-HOWTO, poniewa ``Jestem chory od cigego odpowiadania na te same pytania na comp.lang.asm.x86'' Version 0.2 4 Maj 199996 * Version 0.3c 15 Czerwiec 199996 * Version 0.3f 17 Padziernik 199996 * Version 0.3g 2 Listopad 199996 Utworzenie Historii. Dodanie wskanikw w sekcji o cross- kompilacji. Dodanie sekcji o programowaniu I/O pod Linux-em (w szczeglnoci video). Version 0.3h 6 Listopad 199996 wicej o cross-kompilacji - Zobacz na sunsite: devel/msdos/ Version 0.3i 16 Listopad 199996 NASM atwo przechodzi Version 0.3j 24 Listopad 199996 wskazanie na tumaczenie francuskie Version 0.3k 199 Grudzie 199996 Co ? Zapomniaem wskazac na terse??? Version 0.3l 11 Stycze 199997 * Version 0.4pre1 13 Stycze 199997 tekst mini-HOWTO przeksztaca si w pene linuxdoc-sgml-owe HOWTO, by zobaczy jak wygldaj narzdzia SGML. Version 0.4 20 Stycze 199997 pierwsze jako takie wypuszczenie tego HOWTO. Version 0.4a 20 Stycze 199997 dooono sekcj Wyrazy Uznania Version 0.4b 3 Luty 199997 przesunicie NASM: teraz jest przed AS86 Version 0.4c 99 Luty 199997 Dodano sekcj "CZY POTRZEBUJESZ ASSEMBLACJI ?" Version 0.4d 288 Luty 199997 Vapor oznajmia o nowym przewodnictwie Assembly-HOWTO. Version 0.4e 13 Luty 199997 Wypuszczenie o DrLinux Version 0.4f 20 Marzec 199997 * Version 0.4g 30 Marzec 199997 * Version 0.4h 199 Czerwiec 199997 wci wicej na temat "jak nie uywa assemblacji"; unowoczenienie o NASM, GAS. Version...
Porozmawiajmy.TV