6606
Szczegóły | |
---|---|
Tytuł | 6606 |
Rozszerzenie: |
6606 PDF Ebook podgląd online:
Pobierz PDF
Zobacz podgląd 6606 pdf poniżej lub pobierz na swoje urządzenie za darmo bez rejestracji. 6606 Ebook podgląd za darmo w formacie PDF tylko na PDF-X.PL. Niektóre ebooki są ściśle chronione prawem autorskim i rozpowszechnianie ich jest zabronione, więc w takich wypadkach zamiast podglądu możesz jedynie przeczytać informacje, detale, opinie oraz sprawdzić okładkę.
6606 Ebook transkrypt - 20 pierwszych stron:
JAK PISA� WIRUSY
Andrzej DUDEK
Pierwsze zuydanie: VCS Press Jelenia G�ra
Drugie zvydanie i Copyright O by
Oficyna Wydawnicza READ ME
Warszawa 1994
All rights reserved.
�adna cz�� tej pracy nie mo�e by� powielana i rozpowszechniana, w jakiejkolwiek formie i w jakikolwiek spos�b
(elektroniczny, mechaniczny) w��cznie z fotokopiowaniem, nagrywaniem na ta�my lub przy u�yciu innych system�w,
bez pisemnej zgody wydawcy.
Printed in Poland.
X�
Wszystkie nazwy wyst�puj�ce w niniejszej publikacji s� znakami zastrze�onymi odpowiednich firm; u�ycie tych znak�w
w tej ksi��ce nie powinno by� uwa�ane za naruszenie praw ich wfa�cicieli. '
ISBN 83-85769-46-3
Projekty: Anna Jab�o�ska
Druk: AZ-Druk Raszyn, ul. Lotnicza 5 tel: 56-06-55
Wydanie II poprawione
Spis tre�ci
czʜ� �
Wst�p . . . . . . .1
Stawianie domk�w z klock�w LEGO . . . . . 2
Powt�rka z podstaw�wki . . .
Procesor .
Przerwania
Pierwszyprogram . . , , , , , 7
Stos . . . . . . 10
Operacjearytmetyczne . . . . 12
Przesuni�cia, obroty i rozkazy logiczne . . . . . 14
Instrukcje steruj�ce programem . . . . . 18
Przenoszenie instrukcji, por�wnywanie danych i skoki do innego segmentu . . . . . . 21
Przechwytywanieprzerwari . . . . . . . 23
czʜ� ii
Podr� do wn�trza systemu . . . . . . 31
Start systemu . . . . . 31
Pami��CMOS . . . . 32
Mapapami�ci . . . . . 35
Organizacjadysku . . . . . . 37
Tablica partycji dysku twardego . . . . . 37
Blok �aduj�cy. . . . . 38
Tablica FAT , , 3g
G��wnykatalog . . . . . . . 41
Pliki . . . . . . 42
AtrybutyPliku . . . . . 42
Budowa pliku typu COM . . . . 43
Budowa pliku typu EXE . . . . 43
Budowa pliku typu SYS - �adowalne programy obs�ugi urz�dzeri. . . . . . 44
Procesy . . . . . 47
czʜ� ���
Czary - mary czyli nie taki diabe� straszny 49
Kopiowanie wirusa do tablicy partycji lub bloku �aduj�cego . . . . . . . 49
Doklejanie si� do pliku . . . . 51
Instalowanie si� w systemie . . . 54
Przechwytywanie programu �aduj�cego system operacyjny . . . . . . 58
Uruchamianie si� na pocz�tku pracy program�w . . . . 59
Maskowanie obecno�ci wirusa w systemie . . . . . . . 60
czʜ� �v
Profilaktyka . . . . . 62
A
�� �;s ;
czʜ� v
W 80 �wiat�w dooko�a dnia . . . . . . 65
Listarozkaz�w . . . 65
Rozkazy 8087, 80287, 80387, 80486 . . . .101
Zmienne systemowe . . . . .112
Obszar danych karty EGA(VGA): . . . .117 �
Definiowanie matrycy znak�w . . . . .119
Mapa port�w komputera PC/XT/AT . . . .120 �
PortyDMA. . . . .124 �
DMA w komputerach AT . . . .126 i
Opis klawiatury AT . . . . . .127 '
Porty Dysku Twardego XT . . .129
Porty Dysku Twardego AT . . .129
PortyJoysticka . . .130 =;�
PortyDrukarki . . .131
PortyCGA . . . .132
PortyEGA . . . .133
PortyVGA . . . .137
PortySzeregowe . . . .137
PortyFDC . . . .139 :�`
Przerwania . . . .140
Przerwanie 21 H . . . .185
KodyB��d�w . . .233
ZnakiASCll . . . . . .237
� r
Ramki, linie, rysunki . . . . . . . 239
Kody znak�w kontrolnych ASCII . . . 239
Rozszerzone Kody ASCII . . . . 240
Kody Polskich Liter . . . . . . . 242
Kody Klawiatury . . . 242
Klawiatura PCIXT . . 242
sr
Klawiatura PCIAT 84 klawisze . . 243
Klawiatural0l-klawiszowa . . . .243
Kody kontrolne dla drukarek IBMIEpson i kompatybilnych . . 244 ;;;4
Lista wirus�w z�apanych do korica 1991 r. . . . 246 . "
czʜ� v�
Wirus VCS�(AND) . . . . . .254
czʜ� v��
Literatura . . . 263
czʜ� v��i
Szczepionka . . . .264 :�
Skorowidz . . . . .271
1
1. Wst�p
W pocz�tkach 1985 dw�ch W�och�w Roberto Cerrutti i Marco Marocutti wys�a�o do pisma "Scientific American" list
informuj�cy o swoich pr�bach napisania na komputerze Apple programu, kt�ry do��cza�by si� do systemu operacyjnego
i przy ka�dej pr�bie zapisu na dysk kopiowa�by siebie samego w odpowiednie miejsce tego dysku. Ca�a sprawa bylawta�ciwie
tylko w stadium plan�w ale i tak list odni�s� skutek. Zainspirowani artyku�em o "wojnach rdzeniowych" W�osi nie zdawali
sobie zapewne sprawy ile zamieszania wywota on w komputerowym �wiatku. Uznaje si� go bowiem za pocz�tek wirus�w -
jednego z najdziwniejszych, a ju� na pewno wywo�uj�cych najwi�cej plotek, nieporozumieri i niejasno�ci, zjawisk we
wsp�czesnej informatyce.
Wok�l �adnego tematu zwi�zanego z komputerami nie naros�o tyle mit�w co wok� wirus�w. �wie�ym tego przyk�adem
byta wrzawa wok�l Micha�a Anio�a, jednego z szeregu zwyk�ych wirus�w, kt�remu przypisywano mo�liwo�ci sparali�owania
wielu system�w informatycznych czy wr�cz fizycznego niszczenia dysk�w twardych, monitor�w, myszek itd. 0 takich
rodzynkach jak doniesienia o cz�owieku, kt�ry zarazi� si� chorob� od swojego komputera, lepiej nie wspomina�. Zreszt�
nawet w�r�d programist�w i ludzi maj�cych sta�y kontakt z komputerem do�� rozpowszechniony jest pogl�d, i� pisanie
wirus�w to wy�szy stopieri wtajemniczenia dost�pny tylko dla wybranych. Na tym stanie �wiadomo�ci �eruj� firmy
produkuj�ce szczepionki, umiej�tnie podsycaj�ce panik� i zarabiaj�ce grube pieni�dze.
Wychodz�c z za�o�enia, �e najlepsz� obron� jest atak, chcia�bym w mojej ksi��ce przedstawi� wi�kszo�� praktycznych
zagadnieri zwi�zanych z tworzeniem wirus�w. Chcia�bym, aby� poznaj�c krok po kroku budow� typowego wirusa i prakty-
czne problemy zwi�zane z jego dzia�aniem przekona� si�, i� jest to taki sam program jak ka�dy inny oraz posiad�odpowiedni
warsztat do jego zwalczania. Oczywi�cie b�dziesz tak�e w stanie tworzy� swoje w�asne wirusy, ale mam nadziej�, i� po
w�o�eniu pewnego wysi�ku w poznanie tego wszystkiego nie b�dziesz miat ju� na to ani sily, ani ochoty. Wirus�w na �wiecie
jest ju� w tej chwili do�� bez tego Twojego, a je�li koniecznie chcesz sprawdzi� si� jako programista to lepiej napisz program
graj�cy w Go, albo t�umacz�cy z j�zyka angielskiego na polski.
Je�li mimo tego wszystkiego jeste� zdecydowany na dalsze brni�cie przez t� ksi��k�, to witaj na Pok�adzie. Jedyne, czego
b�d� od Ciebie wymaga�, to do�� dobrej znajomo�ci systemu operacyjnego MS-DOS i terminologii zwi�zanej z komputerami,
podstaw jakiego� j�zyka programowania, najlepiej Paseala lub C oraz matematyki w zakresie podstaw�wki. My�l�, i� nie s�
to zbyt wyg�rowane ��dania.
Po nazwach rozdzia��w mo�esz nie mie� jeszcze wyrobionego zdania o ich zawarto�ci. Powinienem wi�cj� przedstawi�:
Pierwszy to kr�tki kurs programowania w j�zyku assemblera. Nie mam aspiracji przekazania Ci wszystkich wiadomo�ci
zwi�zanych z assemblerem. Postaram si� dok�adnie przedstawi� tylko te instrukcje, dyrektywy i symbole, kt�re p�niej b�d�
wykorzystywane. B�dzie to wi�c raczej uzupe�nienie istniej�cych podr�cznik�w, zawieraj�ce wiadomo�ci pod k�tem
praktycznego programowania, bez zbytniego wdawania si� w teori�. Je�li temat Ci� zainteresuje i b�dziesz chcia� go rozwija�
to b�dziesz mia� solidne podstawy do si�gni�cia po literatur�.
Drugi to opis wn�trza komputera takjak widzi go programista. S� w nim zawarte informacje o organizacji pami�ci,strukturze
program�w, organizacji danych na dyskietkach i dyskach twardych, budowie plik�w itp.
W trzecim poznasz zasady dzia�ania wirus�w, ich cz�ci sk�adowe, procedury powielaj�ce wirusy, metody maskowania
si� w pami�ci operacyjnej i na dysku oraz efekty ich dzia�ania. Wi�kszo�� temat�w b�dzie ilustrowna przyk�adami.
Czwarty rozdzia� to zasady profilaktyki antywirusowej. Zasady te powinny by� Ci ju� chyba znane, wi�c b�dzie to raczej
' przypomnienie ni� odkrywanie nowych wiadomo�ci.
Cz�� pi�ta zawiera wszelkiego rodzaju zestawienia, tabele, kody itp. Ma to by� w po��czeniu z cz�ci� drug� pewna
zamkni�ta ca�o�� zawieraj�ca wi�kszo�� informacji potrzebnych Ci przy pracy z komputerem, tak aby� nie musia� szuka�
ich po r�nych ksi��kach. W cz�ci tej s� pozbierane wiadomo�ci dotychczas porozrzucane po wielu publikacjach.
Do�wiadczeni programi�ci mog� j� traktowa� jako co� w rodzaju ma�ego leksykonu komputera klasy IBM i wykorzystywa�
niezale�nie od pozostatych rozdzia��w.
W rozdziale sz�stym znajduje si� listing przyk�adowego wirusa. Cz�� si�dma i �sma to odpowiednio wykaz literatury
i skorowidz.
Pozosta�a jeszcze do wyja�nienia kwestia dlaczego koncentruj� si� tylko na komputerze klasy IBM nie wspominaj�c
o wirusach na inne komputery. Odpowied�jest prosta. Sam posiadam taki komputer i mam dost�p do materia��w �r�dtowych.
Je�li wi�c jeste� u�y�kownikiem Amigi, Atari ST,czy Apple'a i interesowa�aby Ci� podobna ksi��ka po�wi�cona Twojej
2
maszynie, to napisz do mnie przesy�aj�c wszelkiego rodzaju informacje zwi�zane z wirusami i organizacj� Twojego
komputera, lub po prostu wyra�aj�c ch�� zakupu takiej pozycji.
Pisz na adres:
Wydawnictwo � VCS Press "
58-505 Je/enia G�ra
skr. poczt. 413
No to zaczynamy.
2. Stawianie domk�w z klock�w LEGO
Pewnie zdarzy�o Ci si� kilka razy ogl�da� program napisany wj�zyku assemblera. Prawdopodobnie pierwsz�twoj� reakcj�
by�a my�l, �e jest to tak nieczytelne i skomplikowane, �e nigdy w �yciu nie b�dziesz potrafi� si� pos�ugiwa� tym j�zykiem.
Nie przejmuj si�, chyba wi�kszo�� programist�w odczuwa�a na pocz�tku takie same obawy. Na szcz�cie wszystko jest dla
ludzi i assembler po przekroczeniu pierwszego progu okazuje si� do�� wygodnym i w miar� prostym j�zykiem programowa-
nia. Nad innymi j�zykami ma t� zalet�, �e jest zdecydowanie szybszy, poza tym mo�na w nim wykonywa� w prosty spos�b
operacje, kt�re w innych j�zykach s� albo niedost�pne albo bardzo skomplikowane. Jest on idealnym narz�dziem do pisania
kr�tkich, szybkich i zwi�z�ych program�w systemowych takieh jak proste programy rezydentne, czy wirusy.
W tym rozdziale chcia�bym zapozna� Ci� z podstawami programowania w assemblerze. B�d� to tylko najprostsze
instrukcje i dyrektywy. Zapoznanie si� z nimi pozwoli Ci jednak na zrozumienie dalszej cz�ci ksi��ki oraz da Ci dostateczny
aparat do pisania prostych program�w. We wszystkich przyk�adach korzystam tylko z instrukcji procesor�w Intel 8088/86
wi�c mog� by� one uruchamiane zar�wno na komputerach �ypu XT jak i na 486. Dodatkowe instrukcje dla procesor�w Intel
80286, 80386, i486 i koprocesor�w s� opisane w rozdziale pi�tym. Zar�wno przy pisaniu przyk�ad�w w tym rozdziale, jak
i przy procedurach z rozdzia�u trzeciego korzysta�em z Turbo Assemblera firmy Borland. W przyk�adach nie korzysta�em
z �adnych dodatkowych mo�liwo�ci tego systemu, wi�c r�wnie dobrze mo�esz je uruchamia� korzystaj�c z ka�dego innego
assemblera, kt�rym aktualnie dysponujesz.
3. Powt�rka z podstaw�wki
Na pewno obi�o Ci si� ju� kiedy� o uszy poj�cie systemu dw�jkowego (ewentualnie binarnec,,o). Jest ono w �cis�y spos�b
zwi�zane z architektur� komputer�w. Dla przypomnienia system dw�jkowy jest to taki system, w kt�rym na poszczeg�lnych
pozycjach liczby mog� wyst�powa� tylko dwie warto�ci 1 lub 0, albo inaczej m�wi�c sygna� lub brak sygna�u. Dok�adnie tak
samo jest zbudowana pami�� komputera. Abstrahuj�c od szczeg�l�w technicznych mo�esz j� sobie wyobra�a� jako bardzo
d�ugi ci�g p�l, z kt�rych w ka�dym mo�e by� albo warto�� 1 (sygna�) albo 0 (brak sygna�u). Jedno takie pole nazywamy
bitem. Abyje jako� uporz�dkowa� wprowadzono r�ne jednostki podzia�u. Najbardziej znan�jest bajt. Jest on r�wny o�miu
bitom. Najcz�ciej pami�� traktuje si� jako ponumerowany ci�g bajt�w.
Wjednym bajcie mo�na zapisa� liczby od 0 do 255. Masz prawo nie uwierzy� mi na s�owo, wi�c w ramach �wiczeri mo�emy
to wsp�lnie przeliczy�.
Pewnie pami�tasz zasady przeliczania z systemu dw�jkowego na dzies��tny. Je�li nie to mo�emy je sobie szybko
przypomnie�:
Aby przeliczy� liczb� dw�jkow� na dziesi�tn� nale�y doda� do siebie warto�ci na odpowiednich pozycjach pomno�one
przez pot�gi dw�jki odpowiadaj�ce pozycji.
5
Na przyk�ad:
3
11010101(2)= 1*2�+1*26+0*25+1"24+0*2�+1*22+0*2�+1*2o =
=1*128+1'64+0*32+1'16+0*8+1*4+0*2+1*1=213(10)
10010010(2)= 1*2�+0'26+0'25+1*24+0*23+0'22+1*2�+0*2o =
=1*128+0*64+0*32+1'16+0"8+0'4+1*2+0'1=146(10)
Najmniejsz� liczb�, kt�r� mo�na zapisa� na o�miu bitach jest
00000000(2)=0*2�+0*26+0*25+0'24+0*23+0"22+0*21+0*2o =
=0*128+0*64+0"32+0*16+0*8+0"4+0'2+0*1=0(10)
Za� najwi�ksz�
11111111(2)=1*2�+1'26+1*25+1'24+1*23+1*22+1*2�+1'2a =
=1'128+1"64+1"32+1'16+1*8+1'4+1"2+1'1=255(10)
Skoro sprawdzili�my, �e w bajcie da si� rzeczywiscie zapisa� liczby z przedzia�u 0 - 255, zastan�wmy si� jeszcze jakie
warto�ci mo�na zapisywa� na 16 bitach. Nieprzypadkowo wybra�em tak� liczb� bajt�w. Ot� procesory rodziny Intel 8086,
kt�re znajduj� si� w IBM-ach, s� procesorami 16 bitowymi i z tym zwi�zane s� do�� istotne ograniczenia (patrz nast�pny
paragraf). Analogicznie jak poprzednio obliczamy, �e s� to liczby z przedzia�u 0-1111111111111111 (2) czyli 0 - 65535(10)
(Sprawd� jak nie wierzysz). Ta warto�� jest do�� wa�na i b�dzie jeszcze kilkakrotnie u�ywana.
Zostaty jeszcze dwie sprawy. Pierwsza to jednostki, w kt�rych podaje si� rozmiar pami�ci. Opr�cz 1 bajta s� jeszcze
przynajmniej trzy jednostki:
1 KB (kilobajt) =1024 bajty
1 MB (megabajt) =1024 KB =1048576 bajt�w
1 GB (gigabajt) =1024 MB =1048576 KB =1073741824 bajty
Ostatnie zagadnienie w tym paragrafie to system szestnastkowy (hexadecymalny). To w�a�nie w nim, a nie w systemie
binarnym podaje si� najcz�ciej adresy w pamieci, czy warto�ci zmiennych. Jest to zwi�zane z bardzo prost� metod�
zamiany jednego systemu na drugi oraz z tym, �e zapis liczby w systemie szestnastkowym jest zdecydowanie kr�tszy ni�
w dw�jkowym. Aby zamieni� liczb� binarn� na hexadecymaln� wystarczy podzieli� j� na grupy po cztery cyfry zaczynajac
od prawej strony, nast�pnie ka�d� z tych grup zmieni� wed�ug zasad
0000 (2)= 0(10)= 0(16)
0001 (2) = 1 (10)=1 (16)
0010(2) = 2(10)= 2(16)
0011 (2) = 3(10)= 3(16)
0100(2) = 4(10)= 4(16)
01 O1 (2) = 5(10)= 5(16)
0110(2) = 6(10)= 6(16)
0111 (2) = 7(10)= 7(16)
; 1000(2) = 8(10)= 8(16)
; 1001(2) = 9(10)= 9(16)
1010(2) =10(10)= A(16)
1011 (2) =11 (10)= B(16)
1100(2) =12(10)= C(16)
1101(2) =13(10)= D(16)
1110(2) =14(10)= E(16)
1111 (2) =15(10)= F(16)
Symbole A-F s� to cyfry szestnastkowe odpowiadaj�ce liczbom 10(10) -15(10).
Przyk�adowo:
1010100101011101 O1101010010(2) =101 O10010101110101101010010(2) = S4AE852(16)
10101101101011101001001110101(2)=10101101101011101001001110101(2)=1585D275(16)
4
Sam widzisz, �e liczby po prawych stronach r�wno�ci s� o wiele bardziej zwi�z�e i czytelne. Dlatego �atwiej si� nimi
pos�ugiwa�.
Z liczbami szestnastkowymi jest zwi�zana pewna konwencja zapisu. Ot� dla ich zaznaczenia na kor5cu liczby dadaje si�
liter� H, a je�li liczba zaczyna si� od kt�rej� z cyfr A-F, to na pocz�tku liczby dopisuje si� zero. I tak:
255(10) zapisujemy jako OFFH
124(10) zapisujemy jako 7CH
5555(10) zapisujemy jako 1 SB3H
24578(10) zapisujemy jako 6002H
4. Procesor
Sercem ka�dego komputera jest procesor. To on pobiera z pami�ci i wykonuje rozkazy steruj�ce prac� komputera.
W zale�no�ci od tego na ilu bitach operuje procesor, z takim typem mamy do czynienia. I tak komputery typu Spectrum, czy _
Commodore by�y posiada�y procesory 8-bitowe. Natomiast IBM Apple czy Atari STto komputery 16-bitowe. Komputery typu
XT posiadaj� procesor Intel 8088I86. AT-eki maj� procesor 80286, a komputery klasy 386 i 486, jak sama nazwa wskazuje
procesory 80386 i 80486. Te dwa ostatnie procesory s� w zasadzie 32-bitowe, ale mog� pracowa� w trybie 16-bitowym.
Wszystkie procesory rodziny 8086 s� kompatybilne w g�r�, tzn. ka�dy z nich potrali robi� to co jego poprzednik plus � � :;*"!
dodatkowe czynno�ci. Dzi�ki temu zachowana jest przeno�no�� oprogramowania i ka�dy program, kt�ry chodzif na XT
b�dzie r�wnie� dzia�a� na najnowszym PS/2. �eby jeszcze zrobi� Ci troch� zamieszania w g�owie wspomn� o podziale �
procesora 80386 na dwa typy. Pierwszy z nich jest oznaczony SX, drugi DX. Z punktu widzenia programisty nie ma to �adnej
r�nicy, natomiast jest r�nica w szybko�ci dzialania, a co za tym idzie i w cenie. Po prostu pierwszy z nich ma 16-bitow� . "
szyn� do przesyfania danych z i do pami�ci, natomiast drugi 32-bitow� i dlatego pewne operacje mo�e wykonywa� szybciej. "
Praca procesora polega na pobieraniu z pami�ci rozkaz�w wraz z danymi i wykonywaniu ich. Mi�dzy danymi a rozkazami
nie ma w pami�ci r�nicy i ta sama liczba mo�e by� traktowana razjako kod instrukcji, a drugi raz jako warto�� przekazywana
do instrukcji. Opr�cz operowania na pami�ci procesor steruje prac� urz�dzeri zewn�trznych. Urz�dzeniami zewn�trznymi
s� na przyk�ad klawiatura, czy karta graficzna. Do wsp�fpracy z nimi s�u�� porty wej�cialwyj�cia. Sterowanie urz�dzeniem :
polega na przes�aniu odpowiedniej warto�ci do portu i ewentualnie odczylaniu danych z portu. W celu szybszego operowania
danymi ka�dy procesor jest wyposa�ony w kilka rejestr�w, czyli bajt�w szybkiej wewn�trznej pami�ci. Wykonanie jakiej� :
operacji na kom�rce pami�ci odbywa si� najcz�ciej poprzez przes�anie warto�ci kom�rki do rejestru, wykonanie operacji
na rejestrze i odes�anie wyniku do pami�ci.
Procesor Intel 8086 (i inne z tej rodziny) posiada 14 rejestr�w 16-bitowych. Osiem pierwszych z nich to tzn. rejestry og�lnego
przeznaczenia. Pierwsze cztery mo�natraktowa� zar�wnojako rejestry 16-bitowe,jak i z�o�enie dw�ch rejestr�w 8-bitowych.
Nosz� one nazwy:
AX (ang Accumulator) Wykorzystywany gt�wnie do operacji arytmetycznych i logicznych.
Mo�na go traktowa� jako z�o�enie 8-bitowych rejestr�w AH i AL. Pnyk-
�adowo je�eli w rejestrze AH jest warto�� 56H, a w rejestrze AL 4BH,to
w ea�ym rejestrze AX jest warto�� 5648H.
BX (ang Base Register) Rejestr bazowy, g��wnie wykorzystywany przy adresowaniu pami�ci.
Dzieli si� na BH i BL
CX (ang Counter Register) W wielu instrukcjach wykorzystywany jako licznik. Dzieli si� na CH i CL.
DX (ang Data Register) Rejestr danych, wykorzystywany przy operacjach mno�enia i dzielenia,
a tak�e do wysy�ania i odbierania danych z port�w. Dzieli si� na DH
i DL.
5
Nast�pne cztery rejestry og�lnego przeznaczenia to:
� SI (ang Source Index) Rejestr indeksuj�cy pami�� oraz wskazuj�cy obszar z kt�rego przesyla
si� dane.
� DI (ang Destination Index) Rejestr indeksuj�cy pami�� oraz wskazuj�cy obszar, do kt�rego prze-
sy�amy dane.
SP (ang Stack Pointer) Wska�nik stosu.
� BP (ang Base Pointer) Rejestr u�ywany do adresowania pami�ci.
6
Kolejny rejestr nie jest bezpo�rednio osi�galny przez programist�. Jest to IP (ang Instruction Pointer). Zawiera on adres
� (numer w pami�ci) aktualnie wykonywanej instrukeji i mo�e by� modyfikowany tylko poprzez rozkazy steruj�ce prac�
� programu.
� Je�li uwa�nie czyta�e� ten rozdz;a� i wiesz co nieco o swoim komputerze, to w tym momencie powinny Ci si� pojawi� pewne
; niejasno�ci. Je�eli rejestr 16 bitowy zawiera adres pami�ci, to maksymalny adres nie mo�e by� wy�szy ni� 65535, czyli
� pami�� mo�e liczy� 64K8. A przecie� dobrze wiesz, �e w Twojej maszynie jest na pewno du�o wi�cej pami�ci. Jak to si�
� dzieje ?
� Ot� rzeczywi�cie jeden rejestr 16-bitowy mo�e adresowa� 64K8 pami�ci. Dlatego ca�a pami�� IBM jest podzielona na
! segmenty maj�ce rozmiar 64K8. Ten podzia� nie jest roz��czny, to znaczy jedna kom�rka pami�ci mo�e le�e� wewn�trz
� kilkudziesi�ciu, a nawet kilkuset r�nych segment�w. Segmenty zaczynaj� si� od adres�w podzielnych przez 16 i r�nica
[ mi�dzy pocz�tkami dw�ch kolejnych segment�w wynosi 16 bajt�w. Dla podania peinego adresu kom�rki pami�ci nale�y
; poda�jego segment i offset (adres w stosunku do pocz�tku segmentu). Przyk�adowe adresy to 0000:1285, A000:0000. Przy
zapisie adres�w stosuje si� zapis hexadecymalny, w tym wypadku wyj�tkowo bez literki H. W zwi�zku z tym, �e segmenty
! nie s� roz��czne, jedna kom�rka mo�e by� adresowana na wiele r�nych sposob�w np zapisy 0000:7C00, 0700:0C000
! i 07C0:0000 oznaczaj� t� sam� kom�rk�. Na podstawie zapisu Segment:Offset mo�na odtworzy� adres fizyczny korzystaj�c
ze wzoru adre s =16 * s egmen t + o f f s e t . Poniewa� adresy s� zapisywane szestnastkowo korzystanie z tego wzoru
; jest bardzo proste. Wystarczy dopisa� do numeru segmentu 0 i doda� go do offsetu.
Przyk�adowo:
7400:1234 = 74000 - segment
+1234 - offset
75234 - adres fizyczny
7B4C:88B2 = 7C4B0 - segment
+88B2 - offset
84D62 - adres fizyczny
Jak wida� z tych przyk�ad�w adresy fizyczne s� dwudziestobitowe (5 cyfr szestnastkowych - 20 dw�jkowych). Oznacza
to, �e maksymalny adres, kt�ry da si� osi�gn�� w tym trybie adresowania to 11111111111111111111 (2) czyli 220-1.
I rzeczywi�cie lylko pami�� do 1 MB mo�e by� wykorzystywana w standardowych trybach pracy procesor�w rodziny Intel
8086. M�wimy o tym fakcie, �e przestrzeri adresowa procesora 8086 wynosi 1 MB.
Podczas wykonywania operacji korzystaj�cych z pami�ci rejestry og�lnego przeznaczenia zawieraj� tylko offsety adres�w
wykorzystywanych przy operacji. Segmenty tych adres�w znajduj� si� w rejestrach segmentowych. S� to nast�puj�ce
rejestry:
CS (ang Code Segment) Rejestr zawieraj�cy segment aktualnie wykonywanego rozkazu.
DS (ang Data Segment) Rejestr zawieraj�cy segment z danymi.
ES (ang Extra Segment) Rejestr zawieraj�cy segment na przyk�ad przy operacjach przesy�ania
�aricuch�w.
SS (ang Stack Segment) Rejestr zawieraj�cy segment stosu.
Rejestry te s� u�ywane niejawnie w zale�no�ci od kontekstu, to znaczy je�li procesor wykonuje rozkaz skoku do kom�rki
o adresie 0, to tak naprawd� wykona skok do kom�rki CS:0 , natomiast je�li czyta dane z kom�rki o adresie 0, to
w rzeczywisto�ci czyta dane z kom�rki DS:0. W niekt�rych przypadkach adresy s� podawane jawnie od razu w postaci
segment : o f fs et , jest tak jednak wtedy, gdy wymaga tego dana operacja.
6
Ostatnim rejeslrem, do kt�rego r�wnie� nie mo�na odwo�ywa� si� w sposob bezpo�redni jest rejestr znacznik�w. Jest to
w�a�ciwie 9 pojedynczych bit�w informuj�cych o stanie procesora. Cz�� z nich mo�na ustawia�, cz�� tylko odczylywa�. =
Instrukcje steruj�ce programem mog� si� r�nie zachowywa� w zale�no�ci od stanu poszczeg�lnych znacznik�w. Polo�enie ;
i znaczenie znacznik�w jest nastepuj�ce:
Rejestr znacznik�w
0 D I T S Z A P C
0 (ang Overflow flag) Znacznik nadmiaru, ustawiany przy wyst�pieniu nadmiaru w operac-
jach arytmetycznych.
D (ang Direction Flag) Znacznik kierunku, okre�la czy dane b�d� przesy�ane w kolejno�ci
adres�w rosn�cych, czy malej�cych.
I (ang Interrupt Flag) Znacznikzezwolenianaprzerwanie,okre�la,czyprzerwaniesprz�towe
ma by� wykonane natychmiast po zg�oszeniu , czy dopiero po skoricze-
niu wykonywanego programu.
T (ang Trap Flag) Znacznik pracy krokowej. Okre�la, czy po ka�dej wykonanej instrukcji - '
procesora wywolywane jest przerwanie pracy krokowej.
S (ang Sign Flag) Znacznik znaku. Zawiera znak wyniku ostatnio wykonywanej operacji
arytmetycznej.
Z (ang Zero Flag) Znacznik zera. Ustawiany je�li wynikiem ostatniej operacji arytmetycz-
nej by�o zero.
A (ang Auxiliary Carry Flag) Znacznik przeniesienia po��wkowego.
P (ang Parity Flag) Znacznik parzysto�ci.
C (ang Carry Flag) Znacznik przeniesienia.
W niekt�rych publikacjach do nazw znacznik�w dodaje si� jeszcze liter� F (ang Flag - znacznik). Tak wi�c znacznik C
mo�e by� oznaczany jako CF, Z - ZF itd.
W ten spos�b zapoznale� si� z wszystkimi rejestrami procesora 8086. Procesory 80286,386,486 posiadaj� dodatkowe
rejestry, jednak nie b�d� w dalszej cz�ci korzysta� z instrukcji, kt�re je wykorzystuj�.
5. Przerwania
, r :
Przed chwil� napisa�em, �e procesor wykonuje instrukcje pobieraj�c je kolejno z pami�ci. Nie zawsze jest to prawda.
Czasami zachodzi sytuacja, gdy jakie� urz�dzenie zewn�lrzne zg�asza fakt zaistnienia syluacji krytycznej (np. klawiatura,
gdy naci�ni�to klawisze [Ctrl+Break] czy pami��, gdy wyst�puje b��d parzysto�ci). W takim wypadku przerywane jest
wykonywanie aktualnego programu, zapami�tywana warto�� rejestru znacznik�w. Nast�pnie s� wykonywane instrukcje
obs�uguj�ce to urz�dzenie i przywracana jest warto�� rejestru znacznik�w. Taka sytuacja nosi nazw� przerwania sprz�to-
wego. Poniewa� kilka r�nych urz�dzeri mo�e zg�osi� r�wnocze�nie przerwanie sprz�towe, ka�demu z nich jest przyporz�d-
kowany pewien poziom ( priorytet ), okre�laj�cy, w kt�rej kolejno�ci ma by� wykonywane. Im przerwanie ma mniejszy poziom
tym wcze�niej jest wykonywane. Je�li znacznik I procesora jest wyzerowany, to przerwania sprz�towe nie s� przyjmowane. �
W zasadzie przerwania sprz�towe mo�na wywo�ywa� wewn�lrz programu, jednak nie ma to specjalnego sensu. Lepszym �
zastosowaniem jest pisanie w�asnych procedur obs�ugi. Umo�liwiaj� one kontrol� reakcji komputera w sytuacjach specjal-
nych. Na przyk�ad w�asna procedura obs�ugi przerwania klawiatury pozwala na wprowadzanie polskich znak�w, a obs�uga
przerwania zegarowego mo�e wywo�ywa� co jaki� czas w�asne procedury (Na przyk�ad, o petnych godzinach, przez sekund�
wzbudzany jest g�o�nik)
Innego rodzaju przerwania to przerwania programowe S� one wywolywane tylko z wn�trza programu. Przerwania te
stanowi� istn� skarbnic� uzytecznych procedur i funkcli. W�a�ciwie ca�e programowanie w assemblerze to umiej�tne
korzystanie z gotowych podprogram�w zawartych w przerwaniach. I tak, o ile w BA S I Cu wypisanie na ekranie monitora ci�gu
znak�w wykonuje instrukcja Print, w Pascalu - Write, w C - Scanf, to w assemblerze do tej czynno�ci wywolywane jest
przerwanie 21 H, z warto�ci� 09H przekazan� w rejestrze AH. Inny spos�b wy�wietlenia �aricucha jest praktycznie niedo-
st�pny. Wymaga on korzystania z port�w karty graficznej i tylko bardzo do�wiadczeni programi�ci mog� z niego korzysta�.
Lepiej wi�c na pocz�tku korzysta� z gotowych procedur zawartych w przerwaniach programowych.
R�wnie� i przerwania programowe mo�na przechwytywa� (Pisa� w�asne procedury ich obs�ugi). Np. przechwycenie
przerwania podaj�cego rozmiar pami�ci operacyjnej pozwala nam na ukrycie cz�ci pami�ci przed systemem operacyjnym.
r �
6. Pierwszy program
Po tym wst�pie mo�emy ju� zacz�� pisa� proste programy. Poniewa� wiekszo�� assembler�w nie posiada w�asnych
edytor�w, pliki z programami trzeba przygotowywa� w innych edylorach. Ja do tego celu wykorzystuj� edytor znajduj�cy si�
w pakiecie Norton Commander. Schemat pisania i uruchamiania programu w assemblerze jest nast�puj�cy:
Za��my, �e chcemy napisa� program o nazwie Przyklad.
� Tworzymy przy pomocy edytora zewn�trznego zbi�r Przykfad.asm zawieraj�cy tre�� programu.
� Kompilujemy program poleceniem Tasm Przyklad.asm. 0 ile nie wyst�pi� bl�dy kompilacji, to w jej wyniku otrzy-
mujemy program Przyklad.obj.
� Konsolidujemy program poleceniem Tlink Przyklad.obj. 0 ile nie nast�pi� bl�dy konsolidacji, to wjej wyniku
otrzymujemy program Przyklad.exe.
� Wykonujemy program przez podanie jego nazwy Przykfad.exe. Mo�emy r�wnie� uruchamia� program pod kon-
trol� debuggera poleceniem Td Przyklad.exe.
_ Szczeg�iy zwiazane z kompilacj�, konsolidacj� i uruchamianiem debuggera zawarte s� w dokumentacji Turbo Assemblera
i Turbo Debuggera ([4), [5j).
Tradycyjnie pierwszy program w podr�cznikach programowania to wy�wietlenie jakiego� komunikatu. W assemblerze
b�dzie to wyglada� mniej wi�cej tak:
.MODEL tiny
.STACK l00h
.DATA
Komunikat db 'Dzien dobry',13,10,'$'
.CODE
mov ax,seg komunikat
mov ds , ax
mov ah , 9
mov dx, offset komunikat
int 21H
mov ah,4CH
int 21H
END
Pierwsza linijka programu zawiera dyrektyw� .MODEL (Dyrektywa to takie polecenie, kt�re nie jest instrukcj� wykonywan�
przez procesor, ale stanowi wskaz�wk� dla kompilatora lub konsolidatora). Dyrektywa ta okre�la, na jakim modelu pami�ci
wykonywanyjest program. Okre�lanie modelu pami�ci jest zwi�zane zjej podzia�em. Ot� operacje, kt�re wykonywane s�
w tym samym segmencie nazywamy bliskimi, a operacje, kt�re odbywaj� si� w r�nych segmentach (np. skok do innego
segmentu czy odczyt danych z innego segmentu ) dalekimi. W zwi�zku z tym mo�liwe s� nast�puj�ce modele pami�ci:
Tiny (drobny) Kod programu i dane musz� si� zmie�ci� w jednym segmencie 64K8.
Zar�wno kod jak i dane s� bliskie.
Small (ma�y) Program musi si� zmie�ci� w segmencie i dane musz� si� zmie�ci�
w innym segmencie. Zar�wno kod jak i dane s� bliskie.
Medium (�redni) Program mo�e nie zmie�ci� si� w jednym segmencie, natomiast dane
musz� si� zmie�ci� w segmencie. Kod jest daleki, dane bliskie.
e I 9
Compact (g�sty) Program musi zmie�ci� si� w pojedynczym segmencie, natomiast dane
mog� by� w kilku segmentach. Pojedyncza dana nie mo�e przekracza�
64K8. Kod jest bliski, dane dalekie.
Large (du�y) Zar�wno program jak i dane mog� by� wi�ksze ni� 64K8, ale pojedyn- �
cza dana nie mo�e byE wi�ksza ni� 64K8. I kod i dane s� dalekie.
Huge(olbnymi) Program, dane oraz pojedyncza dana mog� przekracza� �
64K8. Kod i dane s� dalekie. Wska�niki do element�w tablic t
s� r�wnie� dalekie.
Poniewa� przyk�ady w niniejszej ksi��ce b�d� zajmowa�y maksymalnie kilka KB, wi�c b�d� one zawsze wykonywane na
modelu Tiny.
Nast�pna dyrektywa to .STACK. Okre�la ona rozmiar pami�ci, przydzielonej poczatkowo na stos. Opis stosu i operacji
na nim wykonywanych znajduje si� w nast�pnym paragrafie.
Dyrektywa .DATA rozpa;zyna cz�� danych programu. Deklaraqa danej ma posta� Nazwa Z�>p Wartosc . W
ksi��ce b�d� wykorzystywa� nast�puj�ce typy danych:
DB - zmienna sk�adaj�ca si� z jednego/wielu bajt�w
DW - zmienna sk�adaj�ca si� z jednego/wielu s��w (16 bajt�w)
DD - zmienna sk�adaj�ca si� z jednegolwielu s��w podw�jnych (32 bajty)
Przyk�adowe deklaracje zmiennyeh:
Bajtl DB 25H
Ba�t2 DB 'A
Napis DB 'Ala ma Asa'
Lancuch DB 'ALA ma Asa',13,10,'$'
Slowo DW 25C4H
Ciag� Slow DW 25C4H,7624H,5436H,l CDSH !
Slowo�podwojne DD 12346785H '�`t ,
Nieznana DD (?) ;wartosc zmiennej nie
;jest znana przy deklaracji "
Nieznany�ciag DB l00 H DUP (?);zmienna sklada sie z
;100H nieznanych bajt�w l
Adres DD Far Ptr (?) ;zmienna zawiera adres
;dalekiej instrukcji
Te ostatnie napisy z lewej strony po �redniku to komentarz czyli tekst nie wchodz�cy w sk�ad programu. W programach
napisanych w assemblerze po wyst�pieniu �rednika tekst do korica linijki jest traktowany jako komentarz.
Pewnie zastanawiasz si�, po co wprowadzono typ s l owo , skoro mo�na wszystkie dane typu s l owo potraktowaE
jako dane zfo�one z dw�ch bajt�w. Niestety nie jest to to samo. Procesor Intel 8086 odziedziczyf po swoich poprzednikach
specyficzny spos�b zapisu danych innych ni� typu bajt. Ot� dane te s� zapisywane w kolejno�ci od najmniej znacz�cego
do najbardziej znacz�cego bajtu. (W przypadku stowa bajt mniej znacz�cy nosi nazw� dolnego bajtu, bajt bardziej znacz�cy
- g�rnego bajtu). Je�li wi�c zadeklarujesz jak�� zmienn�
Zmienna DB 11H,22H,33H,44H
to w pami�ci pod adresem zmienna s� warto�ci:
Zmienna 11 H
Zmienna+1 22H
Zmienna+2 33H
Zmienna+3 44H
Je�li zadeklarujesz j� jako
Zmienna Dtn1 1122H,3344H
to w pami�ci znajd� si�:
9
Zmienna 22H
Zmienna+1 11 H
C.
Zmienna+2 44H
Zmienna+3 33H
Je�li za� zadeklarujesz j� jako:
Zmienna DD 11223344H
to w pami�ci znajd� si�:
Zmienna 44H
Zmienna+1 33H
Zmienna+2 22H
Zmienna+3 11 H
i Analogicznie adresy dalekich instrukcji s� pami�tane w kolejno�ci o f f s e t , s egment.
Nast�pna dyrektywa .CODE informuje kompilator o tym, i� zaczyna si� wfa�ciwy kod programu. Instrukcja, kt�ra znajduje
si� bezpo�rednio za t� dyrektyw�, jest wykonywanajako pierwsza, chyba �e w dyrektywie END znajduje si� etykieta instrukcji,
od kt�rej nale�y zacz�� program.
W�a�ciwie ca�y powy�szy program, to dwukrotne wykonanie przerwania 21 H. Przerwanie o danym numerze wykonuje
instrukcja
INT numer przerwania.
Przerwanie 21 H jest przerwaniem specjalnym. Jest to menad�er funkcji systemowych. U�ywa si� go w ten spos�b, �e
pned jego wywo�aniem w rejestrze AH umieszcza si� numer funkcji, a w pozosta�ych rejestrach inne parametry wymagane
przez funkcj�. Dok��dny opis wszystkich funkcji przerwania 21 H znajduje si� w rozdziale pi�tym. W nim r�wnie� znajduj� si�
opisy wszystkich pozosta�ych przerwari. Dlatego przy korzystaniu z przerwar5 nie b�d� t�umaczy� dok�adnie ich znaczenia.
Je�li nie b�dziesz czego� rozumia�, to po prostu si�gnij do rozdzia�u pi�tego.
W naszym przypadku wywo�anie tunkcji 09 przerwania 21 H powoduje wy�wietlanie na ekranie ciagu znak�w, natomiast
wywolanie funkcji 4CH przerwania 21 H koriczy prac� programu. Bez wywo�nia tego przerwania program po zakoriczeniu
pracy zawiesi si�. Dlatego instrukcjami, kt�re wykonuj� si� jako ostatnie w programie (z pewnymi wyj�tkami, o czym p�niej)
powinny by�:
MOV AH,4CH
INT 21H
I w tym momencie troch� wyprzedzi�em tok ksi��ki, bowiem drug� instrukcj� wykorzysiywan� w programie jest MOV.
Instrukcja ta s�u�y do przesy�ania danych mi�dzy rejestrami, przesylania danych z pami�ci do rejestr�w i z rejestr�w do
pami�ci,�adowania danych do rejestr�w. Og�lna posta� tej instrukcji to:
MOV zmienna lub rejestr,wartosc
Poprawnymi instrukcjami s� na przyk�ad:
MOV AX,BX ;zaladowanie wartosci rejestru BX
;do rejestru AX
MOV AX,l000 H ;zaladowanie wartosci l000 H
;do rejestru
MOV AX,[BX] ;zaladowanie do rejestru AX slowa
;o adresie zawartym w BX
MOV AX,ES:70H ;zaladowanie do re�estru AX slowa
;o adresie, ktorego segment jest
;zawarty w ES a offset wynosi 70H
MOV AH,zmienna[si+5] ;zaladowanie do rejestru AH
;bajtu o adresie zmienna +
;zawartosc rejestru SI + 5
10
MOV AX,ES:[BX] ;zaladowanie do rejestru AX slowa
;o adresie, ktorego segment jest
;zawarty w ES a offset w BX
MOV DS,BX ;zaladowanie wartosci rejestru BX
;do rejestru DS
MOV AX,SEG komunikat ;zaladowanie se�mentu adresu
�zmiennej komunikat do rejestru AX
MOV DX,OFFSET komunikat ;zaladowanie offsetu adresu '�'"
;zmiennej komunikat do rejestru
� DX r
MOV AX,@DATA ;zaladowanie do rejestru AX
;segmentu danych
Za� niepoprawnymi:
MOV DH,AX ;niezgodnosc typow
MOV DS,2000H ;do rejestrow segmentowych nie mozna
;bezposrednio przesylac wartosci
;najwyzej zawartosc innych rejestrow
MOV IP,BX ;re�estr IP nie moze byc zmieniany
;w ten sposob
:: .�g
R�wnie� dok�adne opisy wszystkich rozkaz�w procesora znajduj� si� w rozdziale pi�tym. Je�li wi�c b�dziesz mia� jakie� �
w�tpliwo�ci, to si�gnij do tego rozdzia�u.
Ostatnim elementem naszego programu jest dyrektywa END. Oznacza ona zakoriczenie programu. Je�li wyst�puje bez �
parametr�w, to nie ma �adnego innego znaczenia. Mo�e natomiast wystapi� z etykiet� lin�. Oznacza wtedy lini�, od kt�rej
rozpocznie si� wykonywanie programu.
(Analogicznie jak zmiennym r�wnie� linijkom programu mo�emy nadawa� nazwy. S� to tak zwane etykiety. Etykiety f
zakoriczone s� dwukropkiem. Przyk�adami etykiet mog� by�: '
etykietal: Mov AX,BX
etykieta2: Int 13H
W pewien spos�b etykiety odpowiadaj� adresom instrukcji. I tak mo�esz je traktowa� jako nazw� symboliczn� nadan� _
adresowi instrukcji.)
Wracaj�c do dyrektywy END . W naszym programie jest ona podana bez parametr�w i pierwsz� wykonywana instrukcj� �
programu jest ta, kt�ra znajduje si� bezpo�rednio za dyrektyw� CODE, czyli:
mov ax,segment komunikat
Je�li natomiast troch� zm