6606

Szczegóły
Tytuł 6606
Rozszerzenie: PDF
Jesteś autorem/wydawcą tego dokumentu/książki i zauważyłeś że ktoś wgrał ją bez Twojej zgody? Nie życzysz sobie, aby podgląd był dostępny w naszym serwisie? Napisz na adres [email protected] a my odpowiemy na skargę i usuniemy zabroniony dokument w ciągu 24 godzin.

6606 PDF - Pobierz:

Pobierz PDF

 

Zobacz podgląd pliku o nazwie 6606 PDF poniżej lub pobierz go na swoje urządzenie za darmo bez rejestracji. Możesz również pozostać na naszej stronie i czytać dokument online bez limitów.

6606 - podejrzyj 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