2.1 Przygotowanie środowiska

Pierwsze programy będą pisane w trybie rzeczywistym procesorów x86. Jako, że najnowsze systemy operacyjne pracują w zacznie bardziej zaawansowanych trybach i często nie wspomagają emulowania trybu rzeczywistego to będzie potrzeba zaopatrzenia się w odpowiedni program. Najlepszym rozwiązaniem będzie emulator komputera PC z zainstalowanym systemem klasy DOS. Programem którym będę się posługiwał będzie DOSBox. Opiszę krok po kroku jak utworzyć odpowiednie środowisko do uruchamiania i debugowania napisanych przeze mnie programów.

Na początek trzeba ściągnąć i zainstalować najnowszą wersje programu DOSBox. Ten program emulujący system DOS został napisany z myślą o uruchamianiu na nim starych gier, które obecnie nie dadzą się uruchomić na systemach Windows. Stare gry mimo kiepskiej grafiki bardzo często wciągają swoją grywalnością i z powodu pewnych sentymentów do starych tytułów powstał ten emulator. Nam posłuży on do cofnięcia się w czasie do możliwości swobody programistycznej jaką dawał DOS.

Po zainstalowaniu programu należy utworzyć na dysku katalog w którym będziemy trzymać wszystkie asemblerowe projekty. Dla przykładu będę używał do tego ścieżki d:\asm\. będzie to katalog w którym będę umieszczał wszystkie potrzebne programy. Aby ten katalog był widziany w programie DOSBox należy go w nim zamontować jako dysk. W tym celu należy otworzyć plik konfiguracyjny. Najprościej zrobić to z menu start po przez wybranie DOSBox-0.74 -> Options -> DOSBox 0.74 Options. Lub bezpośrednio uruchomić plik "DOSBox 0.74 Options.bat" znajdujący się w katalogu gdzie został zainstalowany DOSBox. Na samym końcu pliku konfiguracyjnego w oddzielnej linii należy dopisać następujące polecenia:

mount c: d:\asm\ c:

Oznaczać one będą iż zawartość katalogu d:\asm\ będzie widziana w programie jako oddzielny dysk o literze C. Następna linia przełącza nas na dysk C ustawiając go jako aktywny. Samo środowisko systemu operacyjnego powinno już być gotowe. Teraz właściwie najważniejsza rzecz czyli kompilator. Będę się posługiwał we wszystkich programach kompilatorem NASM. Można go pobrać tutaj. Pliki należy wypakować i przekopiować do katalogu d:\asm\.

Dla pełniejszego zrozumienia działania programów przyda się jeszcze bardzo prosty debuger pod system DOS. Można go pobrać tutaj i również przekopiować do katalogu wirtualnego dysku d:\asm\ czyli tam gdzie wszystkie dotychczasowe pliki.

Większość programistów w dzisiejszych czasach jest przyzwyczajona do tego, że wraz z kompilatorem dostarcza im się ładny i świecący składnią edytor. W przypadku języka asembler możemy w większości znaleźć zwykły kompilator oferujący jedynie kompilację z linii komend. Jeżeli ktoś chcę dodatkowo prosty i praktyczny program do edytowania tekstu z podświetlaniem składni to proponuje program Notepad2. Jest to jak sama nazwa wskazuje program podobny do tego który standardowo znajduje się w systemie Windows jednak posiada dużo więcej funkcji.

W przypadku systemu Windows XP nie istnieje konieczność posługiwania się emulatorem DOSBox W tej wersji systemu operacyjnego znajduje się wbudowany emulator i można dokonywać kompilacji i uruchamiania przykładowych programów w dowolnym katalogu bezpośrednio przez eksplorator Windowsa

Pierwszy program

Czas przyszedł na pokazanie w jaki sposób tworzyć i kompilować programy. Na początek musimy utworzyć w katalogu d:\asm\ plik z pierwszym programem. Przyjmijmy, że będzie się on nazywał prog00.asm. Na początek wystarczy, że za pomocą edytora stworzymy pusty plik o takiej nazwie. Format do którego będziemy kompilować programy nie wymaga wpisania do tego pliku żadnej instrukcji aby był przekompilowany.
Następnie należy uruchomić program DOSBox. Jeżeli jego konfiguracja przebiegła pomyślnie to powinniśmy otrzymać zgłoszenie linii komend w postaci:

C:\>

Przydał by się jeszcze szybki kurs podstaw jeżeli chodzi o komendy systemu DOS jednak myślę, że każdy już we własnym zakresie sprawdzi te kilka komend jeżeli jakieś się trafią w przyszłości na mojej stronie. Nie ma jednak zbytnio co się tym przejmować w końcu chodzi tutaj o naukę asemblera, a nie DOSa.

Aby przekompilować program trzeba się posłużyć konsolą programu DOSBox. Wystarczy w nim wpisać następującą komendę:

nasm -f bin -o prog00.com prog00.asm

W wyniku nie powinniśmy otrzymać żadnej dodatkowej informacji poza ponownym zgłoszeniem się kursora do wpisania kolejnej komendy. To będzie oznaczało iż program przekompilował się bezbłędnie. Co oznaczają kolejne parametry przekazane do kompilatora w komendzie kompilacji ? Oczywiście od razu odsyłam do dokumentacji znajdującej się na stronie kompilatora lub do poczytania składni wywołania pliku dostępnej po wpisaniu komendy:

nasm -h

W skrócie mogę powiedzieć parametr "-f obj" definiuje typ pliku wykonywalnego na jaki ma być przekompilowany program. Można wybierać pomiędzy różnymi formatami rozpoznawalnymi w różnych systemach operacyjnych. Ja wybrałem format, który tak naprawdę jest najprostszą formą plików wykonywalnych. Jest to format używany kiedyś przez pliki z rozszerzeniem .com. Pliki w tym formacie nie zawierają żadnego nagłówka i są czystą formą kodu powstałą z przekompilowania instrukcji zawartych w pliku źródłowym. Jako, że w pliku źródłowym nie wpisaliśmy żadnego kodu to w wyniku powinniśmy otrzymać pusty plik.

"-o prog00.com" definiuje nam pełną nazwę pliku wynikowego w którym zostanie umieszczony przekompilowany kod.

Na samym końcu podajemy nazwę pliku który chcemy przekompilować. Jak wspomniałem w wyniku kompilacji pustego pliku powinniśmy otrzymać pusty plik wynikowy prog00.com. Aby się o tym przekonać możemy przejrzeć zawartość katalogu d:\asm\ jakimś standardowym eksploratorem lub po prostu wpisać w konsoli DOSBoxa komendę "dir".

C:\>dir Directory of C:\. . <DIR> 01-04-2011 0:44 .. <DIR> 31-03-2011 21:51 A TXT 0 01-04-2011 0:49 CWSDPMI EXE 21,325 28-02-2011 7:30 DEBUG EXE 20,698 31-03-2011 22:22 NASM EXE 631,296 28-02-2011 7:30 PROG00 ASM 0 01-04-2011 0:43 PROG00 COM 0 01-04-2011 0:44 6 File(s) 673,319 Bytes. 2 Dir(s) 262,111,744 Bytes free.

Jak widać powyżej plik wynikowy prog00.com jest plikiem o zerowej długości. Nie polecam jednak uruchamiania tego programu ponieważ nie zdefiniowaliśmy w nim końca. Określenie końca programu jest bardzo ważne ponieważ program podczas uruchamiania jest ładowany do pamięci w miejsce w którym znajdowały się kiedyś jakieś inne dane lub programy. W przypadku gdy nie określimy końca programu to procesor po zakończeniu wykonywania jego kodu zacznie wykonywać kolejne instrukcje, które nie koniecznie muszą być kodem maszynowym. W wyniku możemy otrzymać bliżej nie określone zachowanie komputera. Jednak w obecnym przypadku pracujemy tylko na emulatorze więc możemy bezpiecznie uruchomić program prog00.com z linii poleceń programu DOSBox.

W przypadku osób które używają Windowsa XP lub starszego nie ma konieczności instalowania programu DOSBox. Programy można kompilować normalnie w systemie za pomocą kompilatora NASM pobranego ze strony [LINK] przeznaczonego na naszą wersję systemu Windows. Tak samo programy kompilowane do plików .com lub .exe można normalnie uruchamiać w systemie bez potrzeby posiadania dodatkowego emulatora.

Przy tworzeniu i testowaniu programów ograniczę się do emulatora DOSBox ponieważ zadziała równie dobrze dla wszystkich wersji systemu Windows. Jednak jeżeli ktoś zdecyduje się na pracę z emulatorem wbudowanym w Windows XP to wszystkie programy powinny kompilować się i działać poprawnie. Jeżeli nie to proszę to zgłaszać.