Asembler - pierwsze kroki.txt

(8 KB) Pobierz
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  
 
Zgłoś jeśli naruszono regulamin