Asembler - pierwsze kroki Asembler jest bardzo specyficznym j�zykiem programowania. Jego konstrukcja wydaje si� jak by lekko zdzicza�a. Nie ma si� co dziwi� - jest on jednym z najstarszych j�zyk�w programowania. Pisz�c w nim programy dotykasz serca komputera - mikroprocesora. Programy w Asemblerze tworzy si� r�wnie� w specyficzny spos�b. Najpierw piszesz kod �r�d�owy programu w edytorze tekstowym. Nast�pnie poddajesz go kompilacji, w wyniku kt�rej (je�eli kompilator nie stwierdzi �adnych b��d�w w kodzie) otrzymasz plik z rozszerzeniem *.obj. Nast�pnie, w celu otrzymania programu w postaci ko�cowej (czyli mo�liwej do uruchomienia), plik *.obj poddajesz linkowaniu. I znowu, je�eli linker nie stwierdzi �adnych b��d�w - otrzymasz wreszcie sw�j program w postaci pliku *.exe. OK. Po kolei. poni�ej znajduje si� przyk�ad programu. Wiersze zaczynaj�ce si� od znaku ; (�rednik) s� pomijane przez kompilator. Mo�esz w nich umie�ci� sw�j w�asny komentarz. Jak wiadomo, aby napisa� program trzeba zna� j�zyk, w kt�rym si� go pisze. Im lepiej b�dziesz go zna�, tym lepsze programy b�dziesz m�g� pisa�. Jednak zawsze trzeba od czego� zacz��. Przedstawione poni�ej instrukcje to naprawd� minimum, kt�re musisz zna�. Jednak nie ograniczaj si� tylko do nich, bo nic nie osi�gniesz. Pog��biaj swoj� wiedz�, a zapanujesz nawet nad mikroprocesorem. Programowanie w Asemblerze polega na odpowiednim operowaniu na rejestrach procesora. Pierwszymi rejestrami s�: - AX - jest rejestrem 16 bitowym, sk�ada si� z dw�ch rejestr�w AH (8 bitowy) i AL (8 bitowy), rejestr ten jest wykorzystywany najcz�ciej do operacji arytmetycznych, - BX - jest rejestrem 16 bitowym, sk�ada si� (tak jak AX) z dw�ch rejestr�w 8 bitowych: BH i BL. Wykorzystuje si� je przy adresowaniu pami�ci. - CX - 16 bitowy, dzieli si� na CH i CL. Wykorzystuje si� go jako licznik. - DX - 16 bitowy, dzieli si� na DH i DL. Wykorzystywany zw�aszcza do odbierania i wysy�ania danych z port�w. To by�y podstawowe rejestry, na kt�rych b�dziesz operowa�. Istniej� jeszcze: - SI - rejestr wskazuj�cy miejsce w pami�ci, z kt�rego przesy�a si� dane - DI - rejestr wskazuj�cy miejsce w pami�ci do kt�rego przesy�a si� dane - SP - rejestr wskazuj�cy stos; wska�nik stosu - BP - rejestr u�ywany do adresowania pami�ci - IP - rejestr wskazuj�cy instrukcje; wska�nik instrukcji - CS - rejestr zawieraj�cy segment aktualnie wykonywanego rozkazu - DS - rejestr zawieraj�cy segment z danymi - ES - rejestr zawieraj�cy segment wykorzystywany przy dzia�aniu z wi�kszymi danymi - SS - rejestr zawieraj�cy segment stosu Opr�cz tych wszystkich rejestr�w niezwykle wa�n� rol� odgrywaj� znaczniki. Znaczniki s� bitami ustawianymi tylko wtedy, gdy zosta� spe�niony jaki� warunek. A oto one: - O - znacznik przeci��enia, ustawiany przy wyst�pieniu przeci��enia w operacjach arytmetycznych - D - znacznik kierunku okre�laj�cy, czy dane b�d� przesy�ane wed�ug adres�w rosn�cych czy te� malej�cych - I - znacznik zezwolenia przerwania - T - znacznik pracy krokowej, okre�la, czy program zostanie wykonany instrukcja po instrukcji, krok po kroku czy te� wszystko na raz - S - znacznik znaku zawieraj�cy znak wyniku operacji arytmetycznej - Z - znacznik zera ustawiany, je�li ostatnia operacja arytmetyczna da�a w wyniku zero - A - znacznik przeniesienia po��wkowego - P - znacznik parzysto�ci - C - znacznik przeniesienia Ok. To tyle wst�pu. Czas wzi�� si� do pracy. Poni�ej przyk�adowy programik i om�wienie instrukcji w nim wykorzystywanych. ; ; Program NapisData utworzenia: 3.X.2000 ;Autor: PhoeniX E-mail: red_red_phoenix@kki.net.pl ;Opis: Program za pomoc� przerwania 21H wy�wietla serie napis�w przy u�yciu funkcji nr 9 ; Powy�ej znajduje si� tzw. metka. Powinna ona zawiera� informacj� o programie, np.: jego nazw�. Dobrze jest te� poda� dat� powstania programu oraz adres e-mail. Mo�na te� zamie�ci� kr�tki opis programu i jego ewentualne specyfikacje. .Model Tiny .Stack 80H .Data Napis_1 DB 'Napis pierwszy',13,10,'$' Napis_2 DB 'Napis drugi',13,10,'$' Napis_3 DB 'Napis trzeci',13,10,'$' Napis_4 DB 'Napis czwarty','$' Napis_5 DB 'Kolejny napis','$' Napis_6 DB 'I jeszcze jeden napis',13,10,'$' Napis_7 DB '',13,10,'$' Polecenia zaczynaj�ce si� od kropki to tzw. dyrektywy. S� one brane pod uwag� w pierwszej kolejno�ci przez kompilator. Poprzez dyrektywy kompilator wie, kt�ra cz�� programu znajduje si� w danym miejscu oraz jak si� ma na niego "patrze�". Pierwsza dyrektywa deklaruje wielko�� pami�ci wykorzystywanej, a raczej zarezerwowanej dla tego programu. Dyrektywa .Stack okre�la rozmiar pami�ci przydzielonej na stos. Dyrektywa .Data informuje kompilator, �e w tym miejscu znajduj� si� zmienne [lub sta�e] wykorzystywane w programie. Napis_1 - nazwa zmiennej. DB - deklaruj bajt, DW oznacza z kolei - deklaruj s�owo (czyli 2 bajty), DD - deklaruje podw�jne s�owo (4 bajty). Po instrukcji DB znajduje si� ci�g znak�w rozpoczynaj�cy si� cudzys�owem i nim ko�cz�cy. Liczby 13,10 to kod instrukcji maszynowej, kt�ra informuje "program", �e nast�pny tekst ma zosta� wy�wietlony w nast�pnym wierszu. Znak $ (dolara) informuje o ko�cu �a�cucha. .Code czekaj proc mov cx,99H mov dx,99H mov ah,86H int 15H ret czekaj endp Dyrektywa .Code informuje kompilator, �e w tym miejscu zaczyna si� w�a�ciwy kod programu. Nast�pnie jest podana nazwa procedury (w tym wypadku: czekaj proc). Instrukcja proc informuje, �e tu si� zaczyna procedura, a instrukcja endp - oznacza jej koniec. W procedurze s� zawarte r�ne instrukcje, dzi�ki czemu nie musisz pisa� wszystko na nowo, lecz wystarczy wywo�a� procedur�. Efekt b�dzie dok�adnie taki sam z tym, �e mniej pisania. instrukcja mov cx,99H powoduje umieszczenie w rejestrze cx warto�ci 99H (H - oznacza, �e liczba jest podana w systemie szesnastkowym). Nast�pna instrukcja umieszcza 99H w rejestrze dx. Mov ah,86H-warto�� 86H zostaje umieszczona w rejestrze ah. rejestry (np. rejestr ax) dziel� si� na 2 cz�ci: starsz� (np. ah) i m�odsz� (np. al). W starszej znajduje si� numer funkcji danego przerwania. Np. numer funkcji 86H przerwania 15H oznacza wykonanie pustej p�tli trwaj�cej dok�adnie tyle sekund, ile zosta�o podane w rejestrach cx i dx. W tym przypadku mamy 9,9 sekund. Funkcja ta jest wywo�ana przerwaniem 15H. Ka�de przerwanie ma swoje specyficzne funkcje, kt�re mo�e wywo�a�. Instrukcja ret oznacza powr�t z procedury i przekazanie sterowania dalszej cz�ci programu. Endp - ko�czy procedur�. przerwa proc mov ax, seg napis_7 mov ds,ax mov ah,9 mov dx,offset napis_7 int 21H ret przerwa endp Mov ax,seg napis_7 - ustalenie segmentu, w kt�rym znajduje si� zmienna napis_7. Mov ds,ax - umieszczenie danych w segmencie danych. Mov ah,9 - warto�� 9 zostaje umieszczona w rejestrze ah. Mov dx,offset napis_7 - ustalenie offsetu, w kt�rym znajduje si� zmienna napis_7 (ustalenie offsetu i segmentu daje w wyniku rzeczywisty adres kom�rki pami�ci, gdzie znajduje si� zmienna napis_7). Int 21H - wywo�anie przerwania, kt�re obs�uguje, mi�dzy innymi, wy�wietlenie napisu (funkcja 9). Zauwa�, �e wszystkie funkcje, kt�re musz� zosta� wykonane, musz� by� umieszczone w starszej cz�ci rejestru, w tym przypadku jest to ah. Instrukcja ret - powr�t z procedury. Poni�ej wszystkie procedury wykonuj� dok�adnie to samo, wi�c nie b�d� ich omawia�. jeden proc mov ax,seg napis_1 mov ds,ax mov ah,9 mov dx,offset napis_1 int 21H ret jeden endp dwa proc mov ax,seg napis_2 mov ds,ax mov ah,9 mov dx,offset napis_2 int 21H ret dwa endp trzy proc mov ax,seg napis_3 mov ds,ax mov ah,9 mov dx,offset napis_3 int 21H ret trzy endp cztery proc mov ax,seg napis_4 mov ds,ax mov ah,9 mov dx,offset napis_4 int 21H ret cztery endp piec proc mov ax,seg napis_5 mov ds,ax mov ah,9 mov dx,offset napis_5 int 21H ret piec endp szesc proc mov ax,seg napis_6 mov ds,ax mov ah,9 mov dx,offset napis_6 int 21H ret szesc endp Start: call jeden call czekaj call przerwa call dwa call czekaj call przerwa call trzy call czekaj call przerwa call cztery call przerwa call czekaj call piec call przerwa call czekaj call szesc mov ah,4CH int 21H END Start W Asemblerze istnieje co� w rodzaju kotwic. S� to tzw. etykiety. Dzi�ki nim, kompilator wie od czego mo�e si� zaczyna� wykonywanie programu. Instrukcja call jeden powoduje wywo�anie procedury o nazwie jeden. Dalej znajduj� si� nast�pne instrukcje call wywo�uj�ce odpowiednie procedury. Mov ah,4Ch - umieszczenie warto�ci 4Ch w rejestrze ah. Int - 21H - wywo�anie przerwania 21H, kt�re wykona funkcj� umieszczon� w rejestrze ah. W tym przypadku b�dzie to zako�czenie programu. End Start - dyrektywa end informuje kompilator, �e w tym miejscu ko�czy si� kod �r�d�owy programu. S�owo start umieszczone po instrukcji end "m�wi", �e w�a�ciwy program zaczyna si� od etykiety Start. Tak. Jeste� a� tutaj? Nie znudzi�o Ci�? To gratuluj�! W ten oto spos�b rozpocz��e�/�a� przygod� z Asemblerem. Jak si� ona dalej potoczy - to zale�y tylko i wy��cznie od Ciebie... PhoeniX
sianowo1