![]() |
|
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.
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.
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.
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/
COPYING
,
z wersj� biblioteczn� w pliku o nazwie COPYING.LIB
.
Literatura z
FSF
(fundacja wolnego oprogramowania) mo�e tak�e ci pom�c.
Ka�da wersja zawiera kilka napraw i mniejszych korekt, kt�rych nie b�dzie trzeba ci�gle poprawia�.
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''
*
*
*
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).
wi�cej o cross-kompilacji - Zobacz na sunsite: devel/msdos/
NASM �atwo przechodzi
wskazanie na t�umaczenie francuskie
Co ? Zapomnia�em wskazac na terse???
*
tekst mini-HOWTO przekszta�ca si� w pe�ne linuxdoc-sgml-owe HOWTO, by zobaczy� jak wygl�daj� narz�dzia SGML.
pierwsze jako takie wypuszczenie tego HOWTO.
do�o�ono sekcj� Wyrazy Uznania
przesuni�cie NASM: teraz jest przed AS86
Dodano sekcj� "CZY POTRZEBUJESZ ASSEMBLACJI ?"
Vapor oznajmia o nowym przewodnictwie Assembly-HOWTO.
Wypuszczenie o DrLinux
*
*
wci�� wi�cej na temat "jak nie u�ywa� assemblacji"; unowocze�nienie o NASM, GAS.
info o 16-bitowym trybie dost�pu z Linux-a.
*
*
wypuszczenie o sz�stej edycji LSL.
poprawki o wywo�aniu gcc
To jest jeszcze inne ostatnie-wydanie-przez-Far�-przed-przej�ciem-przez-nowego prowadz�cego (?)
Chacia�bym podzi�kowa� nast�puj�cym osobom, w kolejno�ci wyst�powania:
No, nie chcia�bym przeszkadza� w tym co robisz, ale tu jest kilka porad ci�ko zarobionego do�wiadczenia.
Assemblacja mo�e wyrazi� mocno niskopoziomowe rzeczy:
Assemblacja jest bardzo nisko-poziomowym j�zykiem (najni�szym jest r�czne-kodowanie w kodach binarnych instrukcji).
To znaczy
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.
Jak rzek� Charles Fiterman na comp.compilers o 'cz�owieku kontra kod assemblera wygenerowany przez komputer',
``Cz�owiek powinien zawsze wygra� i oto przyczyna.
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.
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�.
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!
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.
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:
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/
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.
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
.
GAS jest GNU Assemblerem, na kt�rym opiera si� GCC.
Znajdziesz go w tym samym miejscu gdzie GCC, w paczce o nazwie binutils.
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:
%
, wi�c
wygl�d rejestr�w %eax
, %dl
itd
zamiast tylko eax
, dl
, itd.
Dzi�ki temu mo�liwe jest w��czanie zewn�trznych symboli w C bezpo�rednio
w kodzie assemblera, bez zamieszania i konieczno�ci
stosowania okropnych podkre�le� jako przedrostk�w.
mov ax,dx
(wstaw rejestr
dx
w rejestr ax
w sk�adni att b�dzie wygl�da�o nast�puj�co:
mov %dx, %ax
.b
dla (8-bit�w) bajtu,
w
dla (16-bit�w) s�owa,
i l
dla (32-bit�w) podw�jnego s�owa.
Na przyk�ad, w�a�ciw� sk�adni� powy�szej instrukcji
b�dzie movw %dx,%ax
.
Jakkolwiek, gas nie wymaga �cis�ej sk�adni att,
wi�c przyrostek jest opcjonalny, kiedy d�ugo�� operandu mo�e by� wywnioskowana z
rejestr�w, w przeciwnym przypadku, domy�lnie zostanie wstawiony 32-bitowy operand (z ostrze�eniem).
$
,
tak jak w addl $5,%eax
(dodaj wymuszaj�ce long dla warto�� 5 do rejestru %eax
).
movl $foo,%eax
wstawia zawarto�� adresu zmiennej foo
w rejestr %eax
,
ale movl foo,%eax
wstawia zawarto�� zmiennej foo
w rejestr %eax
.
testb $0x80,17(%ebp)
(sprawdza najstarszy bit bajtu o offsecie 17
z kom�rki wskazanej przez %ebp
). 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?.
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.
GASP jest Preprocesorem GAS. Dodaje makra i troch� milsz� sk�adni� do GAS.
GASP jest zawarty razem z GAS w archiwum GNU binutils.
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.
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.
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.
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...
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.
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�...
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.
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...
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.
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 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 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.
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.
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.
Tak, wiem �e ta sekcja nie zawiera u�ytecznych informacji. Masz swobod� do prowadzenia jej, je�li odkryjesz co� ciekawego...
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 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.
Dodaje wszelkie u�yteczne dodatki makroassemblacji do GAS. Obejrzyj jego dokumentacj� texinfo.
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.
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).
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 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 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?).
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�.
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
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.
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/
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.
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::
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);
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.
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.
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.
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
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.
(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...
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
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 ##
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