MOV utasítás


MOV UTASÍTÁS, EGY KARAKTER KIÍRATÁSA

Az első mintaprogram mindössze annyit fog csinálni, hogy ha elindítjuk, O visszatér a DOS-hoz egy BIOS rutin segítségével.

Pelda01 Segment ;Szegmensdefinicio.
assume cs:Pelda01,ds:Pelda01 ;Cs es ds regiszterek bealli-
;tasa a szegmens elejere.
Start: mov ax,Pelda01 ;A ds regiszter beallitasa.
mov ds,ax
mov ax,4c00h ;Kilepes a DOS-ba.
int 21h
Pelda01 Ends ;A szegmens vege.
End Start ;A program vege


Amint az látható, lehetőség van a programszövegben megjegyzések elhelyezésére egy pontosvessző után. Az így elhelyezett szöveget a fordító nem értelmezi.

A mov utasítás segítségével adatokat mozgathatunk egy forrásból egy célba, például így lehet értéket adni az egyes regisztereknek. A mov utasítást két paraméter követi, először a cél majd egy vesszővel elválasztva a forrás. Ha így egy címkét írunk az adat helyére, akkor a címke szegmenscímét fogja a regiszterbe írni. A mov ds,ax sorra azért van szükség, mivel a ds-be közvetlenül nem tölthetünk adatot, csak egy másik regiszteren keresztül. A mov utasítás segítségével lehetőségünk van egy regiszterbe egy számot, egy másik regiszter értékét, egy címke szegmens illetve offsetcímét vagy egy memóriarekesz tartalmát tölteni vagy fordítva.

mov ax,42527 Ax regiszterbe tölti a 42527 számot.
mov ax,52h Ax regiszterbe tölti a 52h (82) számot.
mov al,62 Al regiszterbe tölti a 62 számot.
mov ax,bx Ax regiszterbe tölti bx értékét.
mov al,bh Al regiszterbe tölti bh értékét.
mov ax,címke Ax regiszterbe tölti a címke szegmenscímét
mov ax,word ptr [címke] Ax regiszterbe tölti a címke 16 bites tartalmát.
mov al,byte ptr [címke] Ax regiszterbe tölti a címke 8 bites tartalmát.
mov ax,[si] Ax regiszterbe tölti az indexregiszter által mutatott 16 bites értéket.
mov al,[si] Al regiszterbe tölti az indexregiszter által mutatott 8 bites értéket.
mov ax,[si+2] Az indexregiszter+2 cím által mutatott adat kerül ax-be.
mov ax,[si+bx+2] Mint előbb, de si+bx+2 címen lévő.
mov ax,es:[si] Ha nem az alapértelmezés szerinti ds által mutatott szegmensből kívánunk adatot tölteni a regiszterbe, akkor azt így kell jelölni.
mov ax,es:[si+2] Az es szegmens si+2 által mutatott címén lévő adat kerül ax-be.
mov ax,es:[si+bx+2] Az es szegmens si+bx+2 által mutatott címén lévő adat kerül ax-be.
mov ax,offset címke A címke szegmensen belüli "offset" címe kerül ax-be.
mov word ptr [címke],ax Ax tartalmát a címke által mutatott helyre írja
mov byte ptr [címke],al Al tartalmát a címke által mutatott helyre írja
mov [si],ax Ax tartalmát ds:si által mutatott helyre írja
mov [si],al Al tartalmát ds:si által mutatott helyre írja
mov [si+2],ax Ax tartalmát ds:si+2 által mutatott helyre írja
mov [si+bx+2],ax Ax tartalmát ds:si+bx+2 által mutatott helyre írja
mov es:[si],ax Ax tartalmát es:si által mutatott helyre írja
mov es:[si+bx],ax Ax tartalmát es:si+bx által mutatott helyre írja
mov es:[si+bx+2],ax Ax tartalmát es:si+bx+2 által mutatott helyre írja


Mint az látható, elég sokféle variációs lehetősége van ezen egyszerű utasításnak, hogy mégis könnyebb legyen ezeket megtanulni, egy pár alapszabály:

Ha ezeket az alapszabályokat betartjuk, különösebb probléma nem történhet, ha mégis elkövetünk valami nagyobb bakit, azt a fordítóprogram jelezni fogja.

Amint azt említettem, ez a programhívás után visszalép a DOS-hoz. A ROM BIOS szolgáltatásait az int utasítással lehet elérni. Az utána lévő szám egy beépített rutin hivatkozási száma, melynek memóriacímét egy táblázatból olvassa ki, az ax-ben átadott érték pedig egy úgynevezett bemenő paraméter. Erre azért van szükség, mert ez a rutin sokkal többre képes annál, minthogy visszatérjen az operációs rendszerhez, de hogy melyik szolgáltatását szeretnénk igénybe venni, azt ennek segítségével kell meghatároznunk. Azzal, hogy az ax regiszterbe 4c00h értéket írtunk, arra utasítottuk, hogy hibaüzenet nélkül lépjen ki. Ez a két sor csaknem minden programban szerepel. Ezzel elkészült első működő programunk.

Egy szintet vissza, vagy vissza a főmenübe.