ZAKLADY PROGRAMOVANIA

Vytvarenie segmentov
Pamatovy model
Zapis dat v assembleri
Prakticke priklady

Program v assembleri piseme vzdy do suboru s priponou *.ASM. Na pisanie mozete pouzit lubovolny textovy editor, ktory nevklada do vysledneho textoveho suboru specialne kody. Najcastejsie pouzivanym je editor programu Norton Commander, pripadne mozete pouzit prostredie niektoreho z vyssich programovacich jazykov napr. Pascalu, jazyka C a podobne.

Program v assembleri je tvoreny dvoma druhmi klucovych slov. Su to direktivy a instrukcie. Direktivy nevytvaraju ziadny kod programu, ale pouzivaju sa na riadenie cinnosti prekladaca. Naopak instrukcie vytvaraju kod programu a zapisujeme ich symbolickym zapisom (napr. MOV AX,10H).

Prekladac assembleru dovoluje zapisovat program v dvoch rezimoch. MASM a IDEAL. Rezim MASM je standartny rezim prekladaca, to znamena ze nie je potrebne ho v zdrojovom texte uvadzat. Rezim IDEAL sa od MASM odlisuje rozdielnym zapisom procedur, direktiv, struktur, segmentov atd. V nasich prikladoch budem viac preferovat rezim MASM, pretoze je implicitne nastaveni. Medzi rezimami sa mozeme prepinat pomocou direktiv MASM a IDEAL. Staci ich uviest na zaciatku riadku v zdrojovom subore. V dalsom budem uvadzat syntax direktiv iba v rezime MASM.

Syntax zapisu instrukcie v assembleri ma nasledujuci tvar:

Navestie instrukcia ciel,zdroj ;poznamka

Navestie je symbolicke meno, ktore oznacuje offset adresy v danom segmente. Navestia delime na blizke (NEAR) a vzdialene (FAR). NEAR navestie predstavuje iba offsetovu cast adresy. Taketo navestie pouzijeme v pripade presunu v ramci segmentu (je to segment v ktorom je navestie definovane). NEAR navestie sa oddeluje od instrukcie dvojbodkou (vid priklad).


Priklad:

...

 

MOV CX,10

CYKLUS:

INC AX

 

CMP AX,25h

 

JZ EXIT

 

LOOP CYKLUS

EXIT:

...

FAR navestie predstavuje kompletnu adresu - segment:offset. Pre definovanie FAR navestia sa musi pouzit direktiva LABEL.

LABEL - Direktiva definuje symbol daneho typu. Typ moze byt jeden z nasledujucich: NEAR, FAR, PROC, UNKNOWN, BYTE, WORD, DWORD, FWORD, PWORD, QWORD, TBYTE, CODEPTR, DATAPTR.

Syntax: [meno] LABEL [typ]


Priklad:

FAT

LABEL BYTE

 

DW ?

 

...

 

MOV FAT,AL

 

...

LABEL spristupni pamatove miesto, ktore nasleduje po definicii pod zadanym menom a typom.

Este par viet k navestiam. Pre oznacovanie premennych, navesti, konstant sa pouzivaju symbolicke mena, ktore sa nazyvaju identifikatory. Identifikatorom sa oznacuje v assembleri slovo zlozene zo znakov "A..Z", "a..z", "0..9". Identifikator nesmie zacinat cislicou, nesmie mat nazov rezervovanych slov (prikazov, direktiv, instrukcii...). Male a velke pismena sa v assembleri standartne nerozoznavaju, ale ak je to potrebne je mozne tuto volbu aktivovat nastavenim prekladaca.

Ciel a zdroj su operandy instrukcie. Niektore instrukcie maju iba jeden operand (napr. INT 21H) alebo nemaju ziadny operand (NOP), pripadne maju dva operandy (CMP AX,BX). Ako uz bolo vysvetlene operandom moze byt register, pamatove miesto alebo konstanta.

Poznamka je to lubovolny text, ktory je od instrukcie oddeleny bodkociarkou. Prekladac ignoruje vsetko od bodkociarky az po koniec riadku. Plati, ze cim viac komentarov program obsahuje tym viac je zrozumitelnejsi a pristupnejsi inym. Preto ak budete pisat ci uz assemblerovske, pascalovske alebo ine programy vzdy si ich podrobne okomentujte. Cas, ktory stravite pri komentovani programu sa vam niekolkonasobne vrati. Z vlastnej skusenosti viem, ze navrat ku komentovanemu programu je ovela prijemnejsi. Dolezite je, ze nemusite stravit niekolko hodin nad programom a pokusat sa pochopit ako pracuje.