Assembly HOWTO

Autor: Fran�ois-Ren� Rideau fare@tunes.org
v0.4n, 22 Sierpnia 1998
Wersja polska: Zbigniew Micha� Kempczy�ski wegorz@bydgoszcz.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/Assembly-HOWTO. To jest Linux Assembly HOWTO. Ten dokument opisuje metody programowania w assemblerze z u�yciem WOLNYCH narz�dzi programistycznych, koncentruj�c si� na Systemie Operacyjnym Linux na platformach i386. Za��czony materia� mo�e, ale nie musi by� zgodny, z innym sprz�tem i/lub oprogramowaniem. Przewodnictwo na tym b�dzie mile widziane. S�owa kluczowe: assemblacja, assembler, wolny, makroprocesor, preprocesor, asm, inline asm, 32-bitowy, x86, i386, gas, as86, nasm

1. WPROWADZENIE

1.1 Legal Blurp

Copyright © 1996,1997,1998 by Fran�ois-Ren� Rideau.

Ten dokument jest wolnym oprogramowaniem, mo�esz go redystrybuowa� i/lub modyfikowa� zgodnie z za�o�eniami GNU General Public License opublikowanym przez Free Software Foundation; wersja 2 Licencji, lub (w twoim przypadku) inna p�niejsza wersja.

1.2 Wa�na 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 prowadz�cej b��dy lub braki na stronach. Je�li jeste� zmotywowany, m�g�by� przej�� prowadzenie tego HOWTO. S�owem, dzia�aj !

By przej�� prowadzenie skontaktuj si� z kimkolwiek, kto wydaje si� prowadzi� Assembly-HOWTO. W trakcie tego pisania to jestem ja, np. Fran�ois-Ren� Rideau. Jakkolwiek, min�o troch� czasu od kiedy poszukiwa�em mocnego go�cia by podmieni� mnie jako prowadz�cego ten dokument. Niekorzy�ci� jest to, i� musisz sp�dzi� troch� czasu trzymaj�c dokument na czasie, poprawiaj�c go, i ucz�c si� narz�dzi publikacyjnych LDP. Korzy�ci� jest to, i� zdob�dziesz troch� s�awy i mo�esz otrzyma� wolne kopie kompendi�w HOWTO.

1.3 Przed s�owem

Ten dokument ma na celu udzielenie odpowiedzi na najcz�ciej zadawane pytania przez ludzi, kt�rzy programuj� lub chc� programowa� w 32-bitowym assemblerze x86 u�ywaj�c wolnych assembler�w, zw�aszcza w systemie operacyjnym Linux. Mo�e on tak�e wskazywa� inne dokumenty o nie-wolnych, nie-x86, lub nie-32-bitowych assemblerach, chocia� nie jest to jego pierwszorz�dnym celem.

Poniewa� g��wnym celem programowania w assemblerze jest budowa wn�trzno�ci system�w operacyjnych, interpretator�w, kompilator�w, i gier, gdzie kompilator C zawodzi nie dostarczaj�c potrzebnych �rodk�w wyrazu, (wykonanie jest coraz rzadszym tematem), skoncentrujemy si� na rozwoju takiego oprogramowania.

Jak u�ywa� tego dokumentu

Ten dokument zawiera odpowiedzi na pewne najcz�ciej zadawane pytania. W wielu miejscach, zosta�y umiejscowione adresy URL by wskaza� na pewne oprogramowanie lub magazyny dokumentacji.

Sprawd� gdzie s� skopiowane najbardziej u�yteczne magazyny, i spr�buj dobra� si� do najbli�szej z nich; uchronisz w ten spos�b Internet przed niepotrzebym ruchem w sieci, i zaoszcz�dzisz sw�j cenny czas.

W szczeg�lno�ci pewne wielkie magazyny na ca�ym �wiecie, sa kopiami innych popularnych magazyn�w. Powiniene� si� nauczy� i zapami�ta� miejsca umiejscowione blisko ciebie (roztropno��-sieciowa). Czasami, lista takich kopii jest wypisana w pliku, lub we wiadomo�ci wej�ciowej. Miej na uwadze te porady. W przeciwnym wypadku zapytaj archie o oprogramowaniu kt�rego szukasz...

Naj�wie�sze 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� tak�e na czasie (ale tego nie wiem):

ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/ (?)

Francuska wersja tego HOWTO mo�e by� znaleziona w

ftp://ftp.lip6.fr/pub/linux/french/HOWTO/

Inne zale�ne dokumenty

1.4 Historia

Ka�da wersja zawiera kilka napraw i mniejszych korekt, kt�rych nie b�dzie trzeba ci�gle poprawia�.

Version 0.1 23 Kwiecie� 1996

Francois-Rene "Far�" Rideau <fare@tunes.org> tworzy i publikuje pierwsze mini-HOWTO, poniewa� ``Jestem chory od ci�g�ego odpowiadania na te same pytania na comp.lang.asm.x86''

Version 0.2 4 Maj 1996

*

Version 0.3c 15 Czerwiec 1996

*

Version 0.3f 17 Pa�dziernik 1996

*

Version 0.3g 2 Listopad 1996

Utworzenie Historii. Dodanie wska�nik�w w sekcji o cross-kompilacji. Dodanie sekcji o programowaniu I/O pod Linux-em (w szczeg�lno�ci video).

Version 0.3h 6 Listopad 1996

wi�cej o cross-kompilacji - Zobacz na sunsite: devel/msdos/

Version 0.3i 16 Listopad 1996

NASM �atwo przechodzi

Version 0.3j 24 Listopad 1996

wskazanie na t�umaczenie francuskie

Version 0.3k 19 Grudzie� 1996

Co ? Zapomnia�em wskazac na terse???

Version 0.3l 11 Stycze� 1997

*

Version 0.4pre1 13 Stycze� 1997

tekst mini-HOWTO przekszta�ca si� w pe�ne linuxdoc-sgml-owe HOWTO, by zobaczy� jak wygl�daj� narz�dzia SGML.

Version 0.4 20 Stycze� 1997

pierwsze jako takie wypuszczenie tego HOWTO.

Version 0.4a 20 Stycze� 1997

do�o�ono sekcj� Wyrazy Uznania

Version 0.4b 3 Luty 1997

przesuni�cie NASM: teraz jest przed AS86

Version 0.4c 9 Luty 1997

Dodano sekcj� "CZY POTRZEBUJESZ ASSEMBLACJI ?"

Version 0.4d 28 Luty 1997

Vapor oznajmia o nowym przewodnictwie Assembly-HOWTO.

Version 0.4e 13 Luty 1997

Wypuszczenie o DrLinux

Version 0.4f 20 Marzec 1997

*

Version 0.4g 30 Marzec 1997

*

Version 0.4h 19 Czerwiec 1997

wci�� wi�cej na temat "jak nie u�ywa� assemblacji"; unowocze�nienie o NASM, GAS.

Version 0.4i 17 Lipiec 1997

info o 16-bitowym trybie dost�pu z Linux-a.

Version 0.4j 7 Sierpie� 1997

*

Version 0.4k 19 Pa�dziernik 1997

*

Version 0.4l 16 Listopad 1997

wypuszczenie o sz�stej edycji LSL.

Version 0.4m 23 Marzec 1998

poprawki o wywo�aniu gcc

To jest jeszcze inne ostatnie-wydanie-przez-Far�-przed-przej�ciem-przez-nowego prowadz�cego (?)

1.5 Wyrazy Uznania

Chacia�bym podzi�kowa� nast�puj�cym osobom, w kolejno�ci wyst�powania:

2. CZY POTRZEBUJESZ ASEMBLACJI?

No, nie chcia�bym przeszkadza� w tym co robisz, ale tu jest kilka porad ci�ko zarobionego do�wiadczenia.

2.1 Za i Przeciw

Korzy�ci Assemblacji

Assemblacja mo�e wyrazi� mocno niskopoziomowe rzeczy:

Niekorzy�ci Assemblacji

Assemblacja jest bardzo nisko-poziomowym j�zykiem (najni�szym jest r�czne-kodowanie w kodach binarnych instrukcji).

To znaczy

Ocenianie

Podsumowuj�c, chocia� mo�esz uzna� �e u�ycie assemblacji jest czasami konieczne, a nawet po�yteczne w kilku przypadkach gdzie nie jest konieczne, b�dziesz chcia�:

Nawet w przypadkach kiedy Assemblacja jest konieczna (np. rozw�j OS) mo�esz uzna�, �e nie a� do tego stopnia i trzyma� si� w/w zasad.

Obejrzyj �rod�a j�dra Linux-a zwracaj�c uwag�: jak ma�o assemblacji jest konieczne, by uzyska� szybki, niezawodny, przeno�ny, utrzymywalny OS. Tak�e udana gra taka jak DOOM zosta�a prawie ca�kowicie napisana w C, z ma�a cz�ci� napisan� w assemblerze tylko do przy�pieszenia jej dzia�ania.

2.2 Jak NIE u�ywa� Assemblera

Og�lne zasady uzyskania efektywnego kodu

Jak rzek� Charles Fiterman na comp.compilers o 'cz�owieku kontra kod assemblera wygenerowany przez komputer',

``Cz�owiek powinien zawsze wygra� i oto przyczyna.

Cz�owiek wygrywa poniewaz umie u�ywa� maszyny.''

J�zyki ze zoptymalizowanymi kompilatorami

J�zyki takie jak ObjectiveCAML, SML, CommonLISP, Scheme, ADA, Pascal, C, C++, wsr�d innych, wszystkie maj� wolne zoptymalizowane kompilatory, kt�re zoptymalizuj� mas� twoich program�w, i cz�sto b�d� lepsze ni� r�czny kod assemblera nawet dla szczelnych p�tli, umo�liwiaj�c ci skoncentrowanie si� na wysokopoziomowych szczeg�ach, i bez zakazywania ci z�apania kilku procent wykonania w wy�ej wymieniony spos�b w momencie gdy osi�gniesz stabilny rozw�j. Oczywi�cie, s� tak�e komercyjne zoptymalizowane kompilatory dla wi�kszo�ci z tych j�zyk�w.

Pewne j�zyki maj� kompilatory produkuj�ce kod w C, kt�ry mo�e by� dalej zoptymalizowany przez dany kompilator C. Takimi s� LIST, Scheme, Perl i wiele innych. Pr�dko�� jest ca�kiem dobra.

Og�lne zasady przy�pieszania twojego kodu

W celu przyspieszenia kodu powiniene� robi� zrobi� to tylko dla fragment�w programu kt�re narz�dzie profiluj�ce konsekwentnie okre�la jako w�skie gard�o wykonania.

St�d, je�li okre�lisz fragmenty kodu jako zbyt wolne, powiniene�

Na ko�cu, przed zej�ciem do pisania w assemblerze, powiniene� prze�ledzi� wygenerowany kod, sprawdzaj�c czy problem nie le�y faktycznie w z�ej generacji kodu, co jest mo�liwe ale nie w wypadkach: kod wygenerowany przez kompilator mo�e by� lepszy ni� m�g�by� napisa�, w szczeg�lno�ci na nowoczesnych architekturach! Wolne cz�ci programu mog� by� r�wnie zagmatwane. Najwi�kszym problemem nowoczesnych architektur z szybkimi procesorami s� pewne op�nienia dost�pu do pami�ci, nietrafiony dost�p do cache, i TLB oraz b��dy stronnicowania; optymalizacja z u�yciem rejestr�w staje si� wtedy mniej u�yteczna, i zyska�by� wi�cej po przemy�leniu struktury danych oraz wykorzystuj�c w�tkowanie gdy� uzyska�by� lepsze umiejscowienie w dost�pie do pami�ci. By� mo�e po�niej dopiero ca�kowicie odmienne spojrzenie na problem, pomo�e go rozwi�za�.

Sprawdzanie kodu generowanego przez kompilator

Jest wiele powod�w do sprawdzenia kodu generowanego przez kompilator. Tu jest zawarte co robi� z takim kodem:

Standardow� metod� uzyskania kodu assemblera jest wywo�anie twojego kompilatora z flag� -S. Dzia�a to dla wi�kszo�ci Unix-owych kompilator�w, w��czaj�c w to GNU C Compiler (GCC), ale YMMV. Dla GCC, bardziej zrozumia�y kod assemblera b�dzie wyprodukowany po u�yciu opcji -fverbose-asm. Oczywi�cie, je�li chcesz dosta� dobry kod assemblera, nie zapomnij u�y� opcji optymalizacji i wskaz�wek!

3. ASSEMBLERY

3.1 Inline Assemblera GCC

Dobrze znany kompilator GNU C/C++ (GCC), zoptymalizowany 32-bitowy kompilator b�d�cy sercem projektu GNU, wspiera ca�kiem dobrze architektur� x86, w��czaj�c w to zdolno�� wstawiania kodu assemblera w programach w C, w spos�b gdzie zarz�dzanie rejestrami mo�e by� wyspecyfikowane lub pozostawione GCC. GCC dzia�a na wi�kszo�ci dost�pnych platform, dla godnych uwagi Linux-a, *BSD, VST, OS/2, *DOS-a, WIN*, itd.

Gdzie znale�� GCC

Orginalny adres GCC jest adresem FTP GNU ftp://prep.ai.mit.edu/pub/gnu/ razem ze wszystkimi wersjami aplikacji z projektu GNU. Przekompilowane i skonfigurowane dla Linux-a wersje s� w ftp://sunsite.unc.edu/pub/Linux/GCC/ Istnieje wiele kopii FTP obu adres�w, na ca�ym �wiecie a tak�e na no�nikach CD.

Rozw�j GCC zosta� podzielony niedawno na dwie cz�ci. Wi�cej na temat eksperymentalnej wersji egcs mozna znale�� na http://www.cygnus.com/egcs/

�r�d�a przystosowane do twojej ulubionego OS, oraz przekompilowane binaria mo�na znale�� na zwyk�ych adresach FTP.

Najbardziej popularny port GCC dla DOS-a nosi nazw� DJGPP i mo�e by� znaleziony w katalogach o takiej nazwie na adresach FTP. Zobacz:

http://www.delorie.com/djgpp/

Jest tak�e port GCC na OS/2 nazwany EMX, dzia�aj�cy tak�e pod DOS-em, zawieraj�cy wiele bibliotek emuluj�cych wywo�ania funkcji unix-a. Zobacz:

http://www.leo.org/pub/comp/os/os2/gnu/emx+gcc/

http://warp.eecs.berkeley.edu/os2/software/shareware/emx.html

ftp://ftp-os2.cdrom.com/pub/os2/emx09c/

Gdzie znale�� dokumentacje GCC Inline Asm

Dokumentacja GCC zawiera pliki w formacie texinfo. Mo�esz przekompilowa� je TeX-em i wydrukowa� rezultat, lub przekonwertowa� je do .info i ogl�da� emacs-em, lub przekonwertowa� je do .html. Mo�esz przekonwertowa� je (w�a�ciwymi narz�dziami) do tego co lubisz najbardziej, lub czyta� takie jakie s�. Pliki .info s� og�lnie dostarczane z ka�d� dobr� instalacj� GCC.

W�a�ciw� sekcj� do sprawdzenia jest: C Extensions::Extended Asm::

Sekcja Invoking GCC::Submodel Options::i386 Options:: mo�e by� ci tak�e pomocna. W szczeg�lno�ci, podaje ci specyficzne ograniczenia nazw rejestr�w: abcdSDB koresponduj� do %eax, %ebx, %ecx, %edx, %esi, %edi, %ebp wy��czaj�c (nie ma litery dla %esp).

Zasoby gier dla DJGPP (nie tylko dla hacker�w gier) maj� swoj� stron� specjalnie o assemblerze:

http://www.rt66.com/~brennan/djgpp/djgpp_asm.html

Jest jeszcze strona www nazwana ``DJGPP Quick ASM Programming Guide'', zawieraj�ca od URL-i do FAQ, AT&T Sk�adnia ASM x86 , Pewne informacje o inline ASM, i konwertowanie plik�w .obj/.lib:

http://remus.rutgers.edu/~avly/djasm.html

GCC zale�y od GAS podczas assemblacji, i �ledzi jego sk�adni� (patrz poni�ej); pami�taj�c �e inline asm wymaga znak�w procent podczas cytowania by mog�y przej�� do GAS. Zobacz poni�sz� sekcj� o GAS.

Znajdziesz pe�no u�ytecznych przyk�ad�w w podkatalogu linux/include/asm-i386/ �r�de� j�dra Linux-a.

Jak w�a�ciwie wywo�ywa� GCC z kodem inline assemblera.

Poniewa� funkcje assemblera w �r�d�ach j�dra (i bardzo prawdopodobnie twoje w�asne nag��wki, je�li spr�bujesz stworzy� twoje oprogramowanie w assemblerze tak czyste jak to jest w j�drze linuxa) s� osadzone w funkcjach extern inline, GCC musi zosta� wywo��ny z -O flag (or -O2, -O3, itd), by te funkcje by�y dost�pne. Je�li nie, tw�j kod mo�e si� skompiluje, ale nie zostanie w�a�ciwie zlinkowany, gdy� b�dzie szuka� funkcji extern kt�re nie s� inline w bibliotekach z kt�rymi tw�j program b�dzie linkowany !!!. Innym sposobem jest zlinkowanie z bibliotekimi zawieraj�cymi wycofane wersje tych funkcji.

Assemblacja inline mo�e zosta� wy��czona opcj� -fno-asm, kt�ra ka�e zaprzesta� kompilatorowi dzia�ania gdy zostanie u�yte rozszerzenie sk�adni o inline asm, w przeciwnym wypadku wygeneruje wywo�anie funkcji zewn�trznej o nazwie asm(), kt�ra nie zostanie w�a�ciwie rozwi�zana przez linker. Opcja -fasm przywraca dzia�anie s�owa kluczowego asm.

Bardziej og�lnie, dobrymi opcjami dla GCC na platformie x86 s�


        gcc -O2 -fomit-frame-pointer -W -Wallpp

-O2 jest dobrym poziomem optymalizacji w wi�kszo�ci przypadk�w.

Optymalizacja ponadto zajmuje wi�cej czasu, otrzymuj�c kod kt�ry jest mocno d�u�szy, ale tylko troch� szybszy; taka optymalizacja mo�e by� u�yteczna tylko dla ciasnych p�tli (je�li takie s�), kt�r� mo�esz jakkolwiek zrealizowa� w assemblerze. W przypadkach gdy koniecznie potrzebujesz silnej optymalizacji ze strony kompilatora dla kilku plik�w, rozwa� u�ycie -O6.

-fomit-frame-pointer pozwala generowa� kod omijaj�cy g�upie zarz�dzanie ramk� wska�nik�w, co daje mniejszy i szybszy kod, i zwalnia rejestry do dalszych optymalizacji. Wyklucza to �atwe u�ycie narz�dzi odpluskwiaj�cych (gdb), ale kiedy chcesz ich u�y�, nie martw si� o rozmiar i pr�dko�� kodu.

-W -Wall w��cza generowanie wszytkich ostrze�e� i pomaga wychwyci� g�upie b��dy.

Mo�esz doda� specyficzne dla danego procecora -m486 lub inne flagi tak, �e GCC wyprodukuje kod bardziej zaadaptowany dla danego komputera. Zauwa�, �e EGCS (i chyba GCC 2.8) maj� -mpentium i tego typu flagi, podczas gdy GCC 2.7.x i starsze wersje nie. Niez�y wyb�r flag specyfikuj�cych procesor powinien by� w j�drze Linux-a. Sprawd� dokumentacj� texinfo o zainstalowanej u ciebie wersji GCC.

-m386 pomo�e zoptymalizowa� wielko��, a tak�e pr�dko�� na komputerach gdzie pami�� jest w pe�ni wykorzystana, odk�d wielkie programy s� przyczyn� wymiany pami�ci, jakakolwiek "optymalizacja" jest sensowna dla wi�kszego kodu. Przy takich ustawieniach, mo�e by� pomocne przestanie korzystania z C, i w zamian skorzystanie z j�zyka u�atwiaj�cego kod faktoryzuj�cy (przyp.t�um.) taki jak funkcjonalny j�zyk i/lub FORTH; i u�ywa� implementacji bazuj�cej na wykorzystaniu bajt�w i s��w.

Zapami�taj, �e mo�esz u�ywa� ro�nych flag dla r�nych plik�w, wi�c u�ywaj maksymalnej optymalizacji tam, gdzie program wykonuje si� najd�u�ej, podczas gdy pozosta�e pliki optymalizuj pod wzgl�dem rozmiaru.

Do optymalizacji mo�e by� pomocna opcja -mregparm=2 i/lub koresponduj�ce atrybuty funkcji, ale mog� stwarza� wiele problem�w podczas linkowania obcego kodu, w��czaj�� w to libc. S� sposoby by w�a�ciwie zadeklarowa� u�ycie obcych funkcji, tak, �e zostan� wygenerowane w�a�ciwe wywo�ania, lecz mo�esz by� zmuszony rekompilowa� obce biblioteki tak, by u�ywa�y takich samych konwencji wywo�a� opartych na rejestrach...

Zapami�taj, �e mo�esz ustawi� te flagi jako domy�lne edytuj�c plik /usr/lib/gcc-lib/i486-linux/2.7.2.3/specs lub gdziekolwiek on jest w twoim systemie (lepiej nie dodawaj tam -Wall). Dok�adn� lokalizacj� plik�w specyfikator�w GCC w twoim systemie mo�esz uzyska� wo�aj�� gcc -v.

3.2 GAS

GAS jest GNU Assemblerem, na kt�rym opiera si� GCC.

Gdzie go znale��

Znajdziesz go w tym samym miejscu gdzie GCC, w paczce o nazwie binutils.

Jaka jest sk�adnia AT&T

W zwi�zku z tym, �e GAS zosta� pomy�lany by wspiera� 32-bitowe kompilatory unixowe u�ywa on standardowej sk�adni ``AT&T'', kt�ra sk�adni� mocno przypomina standardowe assemblery m68k, i jest standardem w �wiecie UNIX-a. Sk�adnia nie jest ani gorsza, ani lepsza ni� sk�adnia ``Intel-owska''. Jest po prostu inna. Kiedy b�dziesz zamierza� u�ywa� jej, zauwa�ysz bardziej regularna sk�adni� ni� w Intel-u, chocia� troch� nudniejsz�.

Oto najwa�niejsze ostrze�enia odno�nie sk�adni GAS:

Istnieje program pomagaj�cy w konwersji program�w ze sk�adni TASM do sk�adni AT&T. Zobacz

ftp://x2ftp.oulu.fi/pub/msdos/programming/convert/ta2asv08.zip

GAS ma obszern� dokumentacj� w formacie TeXinfo, kt�r� mo�na znale�� co najmniej w dystrybucji �r�d�owej. Przegl�d wyci�gni�tych stron .info z Emacs-a lub innych program�w. Zdarza�y si� pliki o nazwach gas.doc lub as.doc gdzie� w pakietach �r�d�owych GAS, ale zosta�y w��czone w dokumentacje TeXinfo. Oczywi�cie, w razie w�tpliwo�ci, alternatywn� dokumentacj� s� same �r�d�a! Sekcj�, kt�ra szczeg�lnie ci� zainteresuje to Machine Dependencies::i386-Dependent::

Znowu, �r�d�a Linux-a (j�dra systemu), s� dobrymi przyk�adami; zobacz w linux/arch/i386, nast�puj�ce pliki: kernel/*.S, boot/compressed/*.S, mathemu/*.S

Je�li piszesz jaki� j�zyk, pakiet obs�ugi w�tk�w, itd. mo�esz obejrze� jak inne j�zyki (OCaml, gforth, itd.), lub pakiety obs�ugi w�tk�w (QuickThreads, MIT pthreads, LinuxThreads, itd), lub cokolwiek, zr�b to.

Na ko�cu, po prostu skompiluj program w C do assemblera dzi�ki czemu zobaczysz interesuj�c� ci� sk�adni�. Zobacz sekcj� Czy potrzebuj� Assemblacji?.

Ograniczony tryb 16-bitowy

GAS jest 32-bitowym assemblerem, zadaniem kt�rego jest wspom�c 32-bitowy kompilator. Aktualnie ma on jedno ograniczenie 16-bitowego trybu, kt�ry zawiera niedoko�czone u�ycie 32-bitowych przedrostk�w do instrukcji, tak wi�c piszesz 32-bitowy kod, kt�ry chodzi w 16-bitowym trybie na 32 bitowym procesorze. W obu trybach, wspiera on 16-bitowe u�ywanie rejestr�w, ale nie wspiera 16-bitowego adresowania. U�ycie dyrektywy .code16 and .code32 prze��cza pomi�dzy trybami. Zapami�taj, �e dyrektywa inline assembly asm(".code16\n") pozwoli GCC wygenerowa� 32-bitowy kod, kt�ry uruchomi si� w trybie rzeczywistym!

Stwierdzi�em ju�, �e wi�ksza cz�� kodu potrzebnego do pe�nego wspomagania 16-bitowego trybu programowania zosta�a dodana do GAS przez Bryan'a Ford'a (prosz� o potwierdzenie?), ale ostatecznie, nie pojawi�a si� w �adnej dystrybucji kt�r� sprawdzi�em, a� do binutils-2.8.1.x ... wi�cej informacji na ten temat b�dzie mile widziane.

Cienkim rozwi�zaniem jest definiowanie makr (patrz poni�ej), kt�re produkuja kod binarny (z .byte) kt�ry potrzebujesz tylko dla 16-bitowych instrukcji (prawie �adnych je�li u�yjesz code16 jak powy�ej, i mo�esz spokojnie za�o�y�, �e kod b�dzie dzia�a� na zgodnych 32-bitowych procesorach x86). By znale�� w�a�ciwe kodowanie, mo�esz zainspirowa� si� �r�d�ami 16-bitowych assemblerami.

3.3 GASP

GASP jest Preprocesorem GAS. Dodaje makra i troch� milsz� sk�adni� do GAS.

Gdzie znale�� GASP

GASP jest zawarty razem z GAS w archiwum GNU binutils.

Jak to dzia�a

Dzia�a jako filtr, w stylu cpp i jemu podobnym. Nie pami�tam szczeg��w, ale przychodzi on z w�asn� dokumentacj� w texinfo, wi�c przejrzyj j� (w .info), wydrukuj, prze�led� (?). GAS z GASP-em wed�ug mnie jest typowym makro-assemblerem.

3.4 NASM

Projekt Netwide Assembler wypuszcza jeszcze jeden assembler, napisany w C, kt�ry powinien by� do�� modelowy do ewentualnego wsparcia znanych sk�adni i format�w obiekt�w.

Gdzie znale�� NASM

http://www.cryogen.com/Nasm

Wersja binarna jest na kopii sunsite w devel/lang/asm/ Powinna by� tak�e dost�pna jako .rpm lub .deb w dystrybucjach RedHat/Debian w dystrybucyjnym contrib.

Co to robi

W momencie pisania tego HOWTO, wersja NASM to 0.97.

Sk�adnia jest w stylu Intel-a. Cz�� makroprocesora jest zintegrowana.

Wspierane formaty plik�w obiektowych to bin, aout, coff, elf, as86, (DOS) obj, win32, (ich w�asny format) rdf.

NASM mo�e by� u�ywany jako wspomaganie dla wolnego kompilatora LCC (pliki wspieraj�ce s� zawarte).

NASM rozwija si� zbyt szybko by to HOWTO by�o aktualne. Je�eli nie u�ywasz BCC jako 16-bitowego kompilatora (kt�ry wykracza poza to 32-bitowe HOWTO), powiniene� u�ywa� NASM zamiast powiedzmy AS86 lub MASM, poniewa� jest mocno wspierany online i chodzi na wszystkich platformach.

Uwaga: NASM przychodzi tak�e z disassemblerem, NDISASM.

Jego r�cznie napisany parser powoduje, �e pracuje szybciej ni� GAS, chocia� oczywi�cie nie wspiera trzech bilion�w r�nych architektur. Do x86, on powienien by� assemblerem wyboru...

3.5 AS86

AS86 jest 80x86 16- i 32-bitowym assemblerem i jest cz�ci� kompilatora j�zyka C (BCC) Bruce'a Evans'a. Ma on g��wnie sk�adni� Intel-owsk�, chocia� r�ni si� nieznacznie np w trybach adresowania.

Gdzie dosta� AS86

Ca�kowicie przestarza�a wersja AS86 jest dystrybuowana przez HJLu tylko do kompilacji j�dra Linux-a, w pakiecie o nazwie bin86 (aktualna wersja 0.4), dost�pnej w dowolnym magazynie oprogramowania GCC dla Linux-a.

Ale nie radz� nikomu u�ywania go do czegokolwiek innego ni� przekompilowania Linux-a. Ta wersja wspiera tylko plik obiektowy hacked minix, kt�ry nie jest wspierany przez GNU binutils ani nic innego, i ma par� b��d�w w trybie 32-bitowym, wi�c powieniene� lepiej trzyma� go tylko do kompilacji Linux-a.

Ostatnie wersje Bruce'a Evans'a (bde@zeta.org.au) s� publikowane wraz z dystrybucj� FreeBSD. No, by�y: Nie mog� znale�� �r�de� z dystrybucji 2.1 na :( Odt�d, wk�adam �r�d�a w moim miejscu:

http:///www.tunes.org/~fare/files/bcc-95.3.12.src.tgz

Projekt Linux/8086 (aka ELKS) jest w pewnym stopniu pozosta�o�ci� bcc (chocia� nie s�dze by zawiera� 32-bitowe �aty). Obejrzyj http://www.linux.org.uk/Linux8086.html ftp://linux.mit.edu/.

Mi�dzy innymi, ostatnie wersje, w przeciwie�stwie do HJLu's, wspieraj� Linux-owy format GNU a.out, wi�c mo�esz linkowa� tw�j kod z programami Linux-owymi, i/lub u�ywa� zwyk�ych narz�dzi z pakietu GNU binutil do manipulacji danymi. Ta wersja mo�e ko-egzystowa� bez szkody z poprzedni� wersj� (zobacz poni�sze pytanie).

BCC z 12 marca 1995 roku i wcze�niejsze jego wersje maj� brak sk�adnika jakim jest odk�adanie/pobieranie ze stosu rejestr�w segmentowych jako 16-bitowych, co jest uci��liwe gdy programujesz w trybie 32-bitowym. �ata jest opublikowana w projekcie Tunes http://www.tunes.org/ podstrona files/tgz/tunes.0.0.0.25.src.tgz w rozpakowanym katalogu LLL/i386/ �ata powinna by� tak�e dost�pna bezpo�rednio z http://www.tunes.org/~fare/files/as86.bcc.patch.gz Bruce Evans zaakceptowa� t� �at�, wi�c je�li kt�rego� dnia pojawi si� nowa wersja bcc, powinna zawiera� t� �at�...

Jak wywo�a� assembler?

Oto wpis GNU Makefile do u�ywania bcc do transformacji .s asm w oba GNU a.out .o obiekt i .l listing:


%.o %.l:        %.s
        bcc -3 -G -c -A-d -A-l -A$*.l -o $*.o $<

Usu� %.l, -A-l, and -A$*.l, je�li nie chcesz listingu. Je�li chcesz czego� wi�cej ni� GNU a.out, mo�esz przejrze� dokumentacj� bcc o wspieranych formatach, i/lub u�y� objcopy z pakietu GNU binutils.

Gdzie znale�� dokumentacje

Dokumentacje kt�re s�, zawieraj� si� w pakiecie bcc. Podr�czniki s� tak�e dost�pne gdzie� pod adresem FreeBSD. Kiedy masz w�tpliwo�ci, �r�d�a same w sobie s� cz�sto dobr� dokumentacj�: to nie jest zbyt dobrze komentowane, ale styl programowania jest zrozumia�y. Mo�esz spr�bowa� obejrze� jak as86 jest u�ywany w Tunes 0.0.0.25...

Co je�li nie mog� ju� skompilowa� Linux-a z now� wersj� ?

Linus jest zasypywany listami i moja �ata kompiluj�ca Linux-a z Linuxowym a.out as86 chyba do niego nie dotar�a (!) (od t�um. trudno to przet�umaczy� - prosz� o poprawki). Teraz, nie powinno to mie� znaczenia: trzymaj tylko as86 z pakietu bin86 w /usr/bin i daj zainstalowa� bcc dobry as86 w /usr/local/libexec/i386/bcc/as gdzie powinien by�. Nie b�dziesz nigdy wo�a� wprost tego ``dobrego'' as86, poniewa� bcc robi wszystko w�a�ciwie, w��czaj�c konwersj� to Linux-owego a.out, gdy jest wywo�any z w�a�ciwymi opcjami; wi�c assembluj pliki wy��cznie z bcc jako g�ownym assemblerem, nie bezpo�rednio z as86.

3.6 INNE ASSEMBLERY

To s� inne, nieregularne, opcje, w przypadku, gdy powy�sze ci� niesatysfakcjonowa�y (dlaczego?), kt�rych nie zalecam w przypadku u�ytkowania (?), ale mog� udowodni� u�yteczno�� je�li assembler musi by� zintegrowany w oprogramowaniu kt�re rozwijasz (np. OS lub aplikacje rozwojowe).

Win32Forth assembler

Win32Forth jest wolnym 32-bitowym systemem ANS FORTH kt�ry dzia�a pod Win32s, Win95, Win/NT. Zawiera wolny 32-bitowy assembler (zawiera przed/przyrostkow� sk�adni�) zintegrowany w j�zyku FORTH. Przetwarzanie makr jest przez pe�n� moc j�zyka FORTH; jakkolwiek, jedynym wspieranym wej�cia i wyj�cia jest Win32For (�adnego zrzutu do plik�w .obj -- mo�esz oczywi�cie doda� to samemu). Znajdziesz to na ftp://ftp.forth.org/pub/Forth/win32for/

Terse

Terse jest narz�dziem programowania dostarczaj�cym NAJBARDZIEJ zwart� sk�adnie assemblera dla rodziny x86! Zobacz http://www.terse.com. M�wiono, �e jest gdzie� jaki� wolny klon kt�ry zosta� porzucony po pustych pretensjach, �e sk�adnia powinna by� w�asno�ci� autora; i zapraszam ci� do przej�cia tego, je�li taka sk�adnia ci� interesuje.

Nie-wolne i/lub Nie-32bitowe x86 assemblery.

Mo�esz znale�� wi�cej o nich, wraz z podstawami programowania w assemblerze x86 w FAQ Raymond'a Moon'a dla comp.lang.asm.x86 http://www2.dgsys.com/~raymoon/faq/asmfaq.zip

Zapami�taj, �e wszystkie bazujace na DOS-ie assemblery powinny pracowa� w Linuxowym emulatorze DOS-u tak dobrze jak inne podobne emulatory, wi�c je�li ju� masz jaki� mo�esz go nadal u�ywa� w prawdziwym OS. Ostatnie assemblery bazuj�ce na DOS-ie tak�e wspieraj� COFF i/lub inne formaty plik�w obiektowych, kt�re s� wspierane przez bibliotek� GNU BFD, wi�c mo�esz u�ywa� ich razem z wolnymi 32-bitowymi wolnymi narz�dziami, by� mo�e u�ywaj�� GNU objcopy (cz�� binutils) jako filtr konwertuj�cy.

4. METAPROGRAMOWANIE/MAKROPRZETWARZANIE

Assemblacja program�w jest nudna, ale do krytycznych cz�ci program�w.

Powiniene� u�ywa� w�a�ciwego narz�dzia do w�a�ciwego zadania, wi�c nie wybieraj assemblacji kiedy nie jest stosowna; C, OCAML, perl, Scheme, mog� by� lepszym wyborem dla wi�kszo�ci twojego programowania.

Jakkolwiek, s� wypadki gdy te narz�dzia nie daj� ci wystarczaj�cej kontroli nad maszyn�, i assemblacja jest wtedy u�yteczna i konieczna. W takich wypadkach, docenisz system makroprzetwarzania i metaprogramowania kt�re pozwol� ci wraca� do raz przygotowanych wzorc�w z kt�rych ka�dy z nich jest przygotowany jako wielokrotna definicja, co pozwala bezpiecznie programowa� i automatycznie przechodzi� modyfikacj� takich wzorc�w itd. "Go�y" assembler jest cz�sto niewystarczaj�cy, nawet je�li chcesz robi� tylko ma�e operacje w po��czeniu z C.

4.1 Co jest zintegrowane w powy�szym

Tak, wiem �e ta sekcja nie zawiera u�ytecznych informacji. Masz swobod� do prowadzenia jej, je�li odkryjesz co� ciekawego...

GCC

GCC pozwala (i wymaga) wyspecyfikowa� ograniczenia rejestr�w w twoim kodzie ``inline assembly'', wi�c optymalizer zawsze wie o tym. W ten spos�b, assemblacja kodu inline jest tak naprawd� realizowana przez wzorce, a nie wymuszana.

P�niej mo�esz umie�ci� tw�j kod assemblera w makrach CPP, i funkcjach inline w C, wi�c ka�dy mo�e u�y� go jako funkcje w C lub makro.

Funcje inline s� bardzo podobne do makr, ale s� czasami czystsze w u�yciu. Strze� si� tych wypadk�w, kod b�dzie zduplikowany, tak wi�c tylko lokalne etykiety (w stylu 1:) powinny by� definiowane w kodzie assemblera. Jakkolwiek, makro powinno pozwoli� nazwie dla nie lokalnej etykiety by� przekazan� jako parametr (lub inaczej, powinienes u�ywa� dodatkowych meta-programowych metod). Zapami�taj tak�e, �e rozej�cie si� kodu jako inline assemblera b�dzie potencjalnie rozprowadza� nim b��dy, wi�c uwa�aj dok�adnie w kwestii ogranicze� rejestu w kodzie inline asm.

Ostatecznie, j�zyk C w sobie mo�e by� rozwa�any jako dobra abstrakcja programowania w assemblerze, co przyniesie ci ulg� z wi�kszo�ci� k�opot�w z assemblacj�.

Strze� si� pewnych optymalizacji kt�re zawile przekazuj� argumenty do funkcji; przez rejestry mog� powodowa� niedopasowanie tych funkcji do wywo�a� z zewn�trznych (w szczeg�lno�ci r�cznie napisanego kodu assemblera) funkcji w standardowy spos�b; atrybut "asmlinkage" mo�e chroni� funkcj� przed k�opotami z tak� flag� optymalizacyjn�; obejrzyj �r�d�a j�dra linux-a dla przyk�ad�w.

GAS

GAS ma mo�liwo�� w��czania pewnych makr, jak opisano w dokumentacji texinfo. Opr�cz tego, podczas gdy GCC rozpoznaje pliki .s jako surowy assembler do wys�ania do GAS, tak�e rozpoznaje pliki .S jako pliki do przepuszczenia przez CPP przed wpuszczeniem ich do GAS. Znowu, znowu, zobacz �r�d�a Linux-a dla przyk�ad�w.

GASP

Dodaje wszelkie u�yteczne dodatki makroassemblacji do GAS. Obejrzyj jego dokumentacj� texinfo.

NASM

NASM tak�e zawiera pewne wsparcie makr. Zobacz dokumentacj�. Je�li masz jakie� dobre pomys�y, mo�esz chcie� skontaktowa� si� z autorami, jako, �e oni aktywnie go rozwijaj�. W mi�dzyczasie, zobacz poni�ej zewn�trzne filtry.

AS86

On tak�e ma troch� prostego wsparcia makrami, ale nie mog�em nigdzie znale�� dokumentacji. Teraz �r�d�a s� bardzo przejrzyste, wi�c je�li jeste� zainteresowany, �atwo powieniene� je zrozumie�. Je�li potrzebujesz wi�cej ni� tylko baz�, powiniene� u�y� zewn�trznego filtra (zobacz poni�ej).

INNE ASSEMBLERY

4.2 Zewn�trzne Filtry

Jakiekolwiek jest wsparcie makr twojego assemblera, lub jakikolwiek j�zyk u�ywasz (nawet C !), je�li j�zyk nie jest dla ciebie wystarczaj�co wyrazisty, mo�esz chcie� przepu�ci� pliki przez zewn�trzny filtr z regu�ami w Makefile takimi jak te:


%.s:    %.S other_dependencies
        $(FILTER) $(FILTER_OPTIONS) < $< > $@

CPP

CPP nie jest bardzo wyrazisty, ale wystarczaj�cy do wielu �atwych rzeczy, jest standardem, i jest przezroczy�cie wywo�ywany przez GCC.

Dla przyk�adu jego ogranicze�, nie mo�esz deklarowa� obiekt�w, takich �e destruktory wywo�ywane automatycznie na ko�cu deklarowanego bloku; nie mo�esz wi�c zmienia� kierunki widoczno�ci, itd.

CPP przychodzi wraz z kompilatorem C. Je�li m�g�by� robi� to bez niego, nie zawracaj sobie g�owy przynoszeniem CPP (chocia� my�l� jakby� m�g�).

M4

M4 daje ci pe�n� moc makroprzetwarzania, z j�zykiem r�wnym Turingowi, rekursj�, wyra�eniami regularnymi, itd. Mo�esz robi� wszystko czego CPP nie.

Zobacz macro4th/This4th z ftp://ftp.forth.org/pub/Forth/ in Reviewed/ ANS/ (?), lub �r�d�a Tunes 0.0.0.25 jako przyk�ady zaawansowanego makroprogramowania z u�yciem m4.

Jakkolwiek, jego niefunkcjonalna semantyka cytowania i odcytowywania zmusza ci� do u�ywania jawnego ogonkowo-kontynuacyjno-przej�ciowego (przyp. t�um.) stylu makr je�li chcesz robi� zaawansowane makro programowanie (czego przypomnieniem jest TeX -- BTW, czy kto� pr�bowa� u�ywa� TeX-a jako makroprocesora do czego� innego ni� typesetting ?) To NIE jest gorsze ni� CPP, kt�ry nie pozwala na cytowanie i rekursj�.

W�a�ciw� wersj� m4 jest GNU m4 1.4 (lub p�niejsza je�li istnieje) kt�ra zawiera wi�kszo�� sk�adnik�w i mniej b��d�w lub ogranicze�. m4 zosta� pomy�lany jakko wolny do czegokolwiek ale prosty w u�yciu, mo�e by� wi�c nadal dobry dla wi�kszo�ci program�w w assemblerze (chyba nie piszesz program�w z milionami linii w assemblerze?).

Makroprzetwarzanie z twoim w�asnym filtrem

Mo�esz pisa� tw�j w�asny prosty filtr rozszerzaj�cy makra z u�yciem zwyk�ych narz�dzi: perl, awk, sed, itd. To jest szybki spos�b i mo�esz wszystko kontrolowa�. Ale oczywi�cie, moc makroprzetwarzania musi co� kosztowa�.

Metaprogramowanie

Zamiast u�ywania zewn�trznych filtr�w kt�re rozszerzaj� makra, jedn� z dr�g jest pisanie program�w, kt�re pisz� cz�� lub ca�o�� innych program�w.

Dla przyk�adu, m�g�by� u�y� programu produkuj�cego kod �r�d�owy

Pomy�l o tym!

Cz�� wspomagaj�ca z dost�pnych kompilator�w

Kompilatory takie jak SML/NJ, Objective CAML, MIT-Scheme, itd, maj� w�asn� cz�� wspomagaj�c� assembler, kt�r� mo�esz ale nie musisz wykorzystywa�, je�li zamierzasz generowa� kod p�automatycznie z wymienionych j�zyk�w.

Zestaw narz�dzi Machine-Code z New-Jersey

Jest projekt, u�ywaj�cy j�zyka programowania Icon, do budowy podstawowych rzeczy do produkcji manipulacji na kodzie assemblera. Zobacz http://www.cs.virginia.edu/~nr/toolkit/

Tunes

Projekt Tunes OS rozwija sw�j w�asny assembler jako rozszerzenie j�zyka Scheme i jako cz�� procesu rozwojowego. Nie dzia�a to jeszcze, ale pomoc jest widziana.

Assembler manipuluje symbolicznymi drzewami sk�adni, wi�c mo�esz prawie mie� podstaw� do translacji sk�adni assemblera, disassembler, wsp�ln� cz�� wspomagaj�c� assembler/kompilator, itd. Tak�e, pe�na moc j�zyka Scheme czyni go nie do pokonania z makroprzetwarzaniem/metaprogramowaniem.

http://www.tunes.org/

5. KONWENCJE WYWO�A�

5.1 Linux

Po��czenie z GCC

To jest preferowany spos�b. Sprawd� dokumentacj� i przyk�ady GCC z plik�w .S j�dra Linux-a kt�re s� przepuszczane przez gas (nie takie, kt�re s� przepuszczane przez as86).

32-bitowe argumenty s� odk�adane na stos w odwrotnej kolejno�ci wyst�powania (st�d dost�p / pobieranie jest we w�a�ciwej kolejno�ci), zwracaj�c bliski 32-bitowy adres. %ebp, %esi, %edi, %ebx s� zapami�tywane, inne rejestry te� s� zapami�tywane podczas wywo�ania; %eax jest u�ywany do przechowywania wyniku, a %edx:%eax do przechowywania wynik�w 64-bitowych.

FP stack: Nie jestem pewien, ale my�l� �e wynik jest w st(0), ca�y stos jest zapami�tany.

Pami�taj, �e GCC ma opcje modyfikuj�ce konwencje wywo�a� przez rezerwowanie rejestr�w, przekazywanie argument�w w rejestrach, nie u�ywanie FPU, itd. Sprawd� strony .info i386.

Pami�taj, �e musisz zadeklarowa� atrybut cdecl dla funkcji u�ywaj�cych standardowej konwencji wywo�a� GCC (nie wiem co daje u�ycie zmodyfikowanej konwencji wywo�a�). Zobacz w stronach info GCC sekcj�: C Extensions::Extended Asm::

ELF kontra a.out - problemy

Pewne kompilatory poprzedaj� podkre�leniem ka�dy symbol, podczas gdy inne nie.

W szczeg�lno�ci, Linux-owy GCC a.out ma takie poprzedniki, podczas gdy Linux-owy ELF GCC nie.

Je�li musisz poradzi� sobie z wykorzystaniem obu format�w zobacz jak robi� to istniej�ce pakiety. Dla przyk�adu, we� stare drzewo �r�d�owe Linux-a z pakietami Elk, qthreads lub OCAML...

Mo�esz tak�e nadpisa� niejawnie C->asm zmieniaj�c nazw� przez wstawienie wyra�e� takich jak to


        void foo asm("bar") (void);

by upewni� si�, �e wywo�anie funkcji C foo b�dzie zabronione w assemblerze.

Zapami�taj, �e program objcopy, z pakietu binutils, powinien pozwoli� ci przekonwertowa� obiekty a.out w obiekty ELF, i by� mo�e w przeciwn� stron� tak�e, w pewnych wypadkach. Bardziej og�lnie, program ten realizuje konwersj� format�w wielu plik�w.

Bezpo�rednie wywo�ania systemowe Linux-a

To NIE jest rekomendowane, poniewa� konwencje zmieniaj� si� od czasu do czasu od j�dra do j�dra (cf L4Linux), dodatkowo to nie jest przeno�ne, i niezyskowne w pisaniu bior�c pod uwag� libc, I wy��cza poprawki i rozszerzenia kt�re pojawiaj� si� w libc, takie, jak np. biblioteka zlibc, kt�ra w locie przezroczy�cie dekompresuje spakowane gzip-em pliki. Standardem i rekomendowan� drog� wywo�a� systemowych us�ug Linux-a jest i tak zostanie, przej�cie przez libc.

Obiekty dzielone powinny trzyma� twoje programy ma�ymi. I je�li naprawd� chcesz mniejszych binari�w, u�ywaj #! , z interpretera maj�cego nad sob� wszystko czego nie chcesz w swoich binariach.

Teraz, je�li z pewnych powod�w nie chcesz linkowa� program�w z libc we� si� za ni� i zrozum jak dzia�a! Po tym wszystkim, nadal zamierzasz zamieni� j� ?

Mo�esz zerkn�� tak�e jak m�j eforth 1.0c robi to.

�r�d�a Linux-a s� tak�e u�yteczne, szczeg�lnie plik nag��wkowy asm/unistd.h kt�ry opisuje jak wywo�ywa� funkcje systemowe... Podstawowo, wywo�ujesz int $0x80 z __NR_numerem funkcji systemowej (z asm/unistd.h) w %eax, i parametrami (do pi�ciu) w %ebx, %ecx, %edx, %esi, %edi. Rezultat jest zwracany w %eax z warto�ci� ujemn� w przypadku b��du kt�rej przeciwn� warto�� libc umieszcza w errno. Stos u�ytkownika jest nietkni�ty wi�c nie musisz mie� go w�a�ciwego podczas wywo�ania systemowego.

I/O pod Linux-em

Je�li chcesz korzysta� bezpo�rednio z I/O pod Linux-em jest co� prostego co nie uzale�nia od OS, i powiniene� obejrze� IO-Port-Programming mini-HOWTO; lub potrzebuje to sterownik urz�dzenia, powiniene� spr�bowa� nauczy� si� o �amaniu j�dra, rozwijaniu sterownik�w urz�dze�, modu��w j�dra itd, dla kt�rych s� inne wspania�e HOWTO i dokumenty z LDP.

W szczeg�lno�ci, je�li chcesz zaj�� si� programowaniem Grafiki przy��cz si� do projektu GGI: http://www.ggi-projectorg/

Jakkolwiek, we wszystkich przypadkach, zrobisz lepiej u�ywaj�c GCC inline assembly z makrami z linux/asm/*.h, ni� pisz�c pliki �r�d�owe w samym assemblerze.

Dost�p do 16-bitowych sterownik�w z Linux-a/i386

Taka rzecz jest teoretycznie mo�liwa (dow�d: zobacz jak DOSEMU mo�e selektywnie dawa� dost�p port�w do urz�dze� programom), i s�ysza�em pog�osk� �e kto� gdzie� ju� to zrobi� (w sterowniku PCI? W dost�pie do VESA ? ISA PnP ? nie wiem). Je�li masz wi�cej precyzyjnych informacji na ten temat b�da mile widziane. Jakkolwiek, by uzyska� wi�cej informacji dobrymi miejscami s� �r�d�a j�dra Linuxa, �r�d�a DOSEMU (i innych program�w w DOSEMU repository), oraz �r�d�a r�nych niskopoziomowych program�w dzia�aj�cych pod Linux-em... (by� mo�e GGI je�li wspiera standard VESA).

Zasadniczo, musisz u�ywa� 16-bitowego trybu chronionego lub trybu vm86.

Na pocz�tku jest w miar� prosto to ustawi�, ale b�dzie to dzia�a� tylko z dobrze-zrobionym kodem The first is simpler to setup, but only works with well-behaved code nie wykorzystuj�cym jakiejkolwiek arytmetyki segmentowej that won't do any kind of segment arithmetics lub bezwzgl�dnego adresowania segmentu (w szczeg�lno�ci adresowania segmentu 0), or absolute segment addressing (particularly addressing segment 0), do czasu zmian �e wszystkie u�ywane segmenty mog� by� ustawione w zaawansowany spos�b w LDT.

P�niej pozwala si� na wi�ksz� zgodno�� z vanilla 16-bitowym otoczeniem (? przyp.t�um.), ale wymaga to bardziej skomplikowanej manipulacji.

W obu przypadkach, przed wykonaniem skoku do 16-bitowego kodu musisz

I znowu, ostro�nie czytaj �r�d�a do rzeczy zawartych w powy�szych informacjach o magazynie DOSEMU, w szczeg�lno�ci te mini-emulatory do uruchomiania ELKS i/lub prostych program�w .COM pod Linux-em/i386.

5.2 DOS

Wi�kszo�� DOS-owych extender�w zawiera interfejs do us�ug DOS-a. Poczytaj dokumentacje na ich temat, ale cz�sto, symuluj� one tylko int $0x21 i inne, wi�c robisz ``jakby�'' by� w trybie rzeczywistym (mam w�tpliwo�ci czy nie s� tylko ��cznikami i rozszerzaj� rzeczy by pracowa�y z 32-bitowymi operandami; najcz�ciej s� tylko przej�ciem w przerwanie do trybu rzeczywistego lub przez uchwyt vm86).

Dokumentacja na temat DPMI i inne (oraz znacznie wi�cej) mo�esz znale�� na ftp://x2ftp.oulu.fi/pub/msdos/programming/

DJGPP przychodzi z w�asn� (ograniczon�) glibc pochodn�/podzestawem/wymienion�, tak�e.

Jest mo�liwa cross-kompilacja z Linux-a do DOS-a, zobacz katalog devel/msdos/ najbli�szej kopii FTP serwera sunsite.unc.edu Zobacz tak�e ekstender-dosa MOSS z projektu Flux w utah.

Inne dokumenty i FAQ s� bardziej skoncentrowane na DOS-ie. Nie zalecamy rozwoju pod DOS.

5.3 Winwybuchy i takie

(od t�um. Autor tego dokumentu nie przepada za Windows, s�usznie zreszt�, i dlatego cz�� tej podsekcji nie b�dzie mile widziana przez zwolennik�w tego systemu :). Hej, ten dokument zawiera tylko wolne oprogramowanie. Zadzwo� kiedy Winwybuchy stan� si� wolne, lub gdzie b�d� dost�pne wolne narz�dzia do tego!

No, po tym wszystkim, jest : Cygnus Solutions rozwijaj�cy bibliotek� cygwin32.dll, dla program�w GNU to uruchomienia pod platformami MakroG�wna.

Jakkolwiek, mo�esz u�ywa� GCC, GAS, wszytkich narz�dzi GNU, i wielu innych Unix-owych aplikacji. Zerknij na ich stron� domow�. Ja (Far�) nie zamierzam rozszerza� Losedoze (od t�um. Windows -> Windoze -> Losedoze (Lose) - przegrywa�) programowania. ale jestem pewny �e wsz�dzie mo�esz znale�� pe�no dokument�w na tem temat...

5.4 Tw�j w�asny OS

Kontrola jest tym co przyci�ga wielu programist�w do assemblacji, chc�cych najcz�ciej rozwija� OS co prowadzi lub pochodzi od �amania w assemblerze. Zapami�taj, �e ka�dy system pozwalaj�cy na samorozw�j mo�e by� okre�lony jako "OS" nawet mimo tego, �e mo�e chodzi� "nad" pracuj�cym systemem z wielozadaniowo�ci� lub I/O (takim jak Linux na Mach lub OpenGenera na Unix-ie), itd. St�d, dla �atwiejszego usuwania b��d�w, mo�esz rozwija� tw�j ``OS'' najpierw jako proces chodz�cy pod Linux-em (pomimo powolnego dzia�ania), a potem u�y� Flux OS kit (co daje mo�liwo�� u�ycia sterownik�w Linux-a i BSD w twoim w�asnym OS) by zrobi� go niezale�nym. Gdy tw�j OS jest stabilny, jest jeszcze czas by napisa� sterowniki je�li naprawd� to lubisz.

To HOWTO nie zawiera wewn�trz temat�w takich jak kod Boot loadera & wchodzenie w tryb 32-bitowy, Zarz�dzanie Przerwaniami, Podstawy o intelowskim ``trybie chronionym'' lub ``V86/R86'', definiowania twoich format�w obiekt�w i konwencji wywo�a�. G��wnym miejscem gdzie mo�esz znale�� pochodne informacje o tym wszystkim to kody �r�d�owe istniej�cych OS i bootloader�w. Masa wska�nik�w jest na poni�szej stronie WWW: http://www.tunes.org/~tunes/doc/Review/OSes.html

6. DO ZROBIENIA & WSKAZANIA

Author's .sig:

## Far� | VN: Уng-V� B�n   | Join the TUNES project!  http://www.tunes.org/ ##
## FR: Fran�ois-Ren� Rideau |    TUNES is a Useful, Not Expedient System     ##
## Reflection&Cybernethics  | Project for a Free Reflective Computing System ##

7. Od t�umacza

To jest pierwsze t�umaczenie tego HOWTO. Z pewno�ci� zawiera ono mas� b��d�w i niekt�re sentencje mog� mie� inne znaczenie ni� ja im nada�em. Dlatego prosz� o email je�li znajdziesz jakie� b��dy (merytoryczne, gramatyczne i inne). Postaram si� poprawi� dokument w jak najkr�tszym czasie i opublikowa�. Uwagi i komentarze �lij na Zbigniew Micha� Kempczy�ski. Szczeg�lne podzi�kowania sk�adam mojej kole�ance Annie Dzieniszewskiej za pomoc w trudnych gramatycznych kawa�kach tego tekstu. Je�li kto� wie jak przet�umaczy� Legal Blurp to prosz� o email.

#

Hosting by: Hurra Communications Sp. z o.o.
Generated: 2007-01-26 18:02:24