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:
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.