ZÁKLADY PROGRAMOVANIA

Vytvárenie segmentov
Pamäťový model
Zápis dát v assembleri
Praktické príklady

Program v assembleri píšeme vždy do súboru s príponou *.ASM. Na písanie možete použiť ľubovolný textový editor, ktorý nevkladá do výsledného textového súboru špeciálne kódy. Najčastejšie používaným je editor programu Norton Commander, prípadne môžete použiť prostredie niektorého z vyšších programovacích jazykov napr. Pascalu, jazyka C a podobne.

Program v assembleri je tvorený dvoma druhmi kľúčových slov. Sú to direktívy a inštrukcie. Direktívy nevytvárajú žiadny kód programu, ale používajú sa na riadenie činnosti prekladača. Naopak inštrukcie vytvárajú kód programu a zapisujeme ich symbolickým zápisom (napr. MOV AX,10H).

Prekladač assembleru dovoľuje zapisovať program v dvoch režimoch. MASM a IDEAL. Režim MASM je štandartný režim prekladača, to znamená že nie je potrebné ho v zdrojovom texte uvádzať. Režim IDEAL sa od MASM odlišuje rozdielnym zápisom procedúr, direktív, štruktúr, segmentov atď. V našich príkladoch budem viac preferovať režim MASM, pretože je implicitne nastavení. Medzi režimami sa môžeme prepínať pomocou direktív MASM a IDEAL. Stačí ich uviesť na začiatku riadku v zdrojovom súbore. V ďalšom budem uvádzať syntax direktív iba v režime MASM.

Syntax zápisu inštrukcie v assembleri má nasledujúci tvar:

Návestie inštrukcia cieľ,zdroj ;poznámka

Návestie je symbolické meno, ktoré označuje offset adresy v danom segmente. Návestia delíme na blízke (NEAR) a vzdialené (FAR). NEAR návestie predstavuje iba offsetovú časť adresy. Takéto návestie použijeme v prípade presunu v rámci segmentu (je to segment v ktorom je návestie definované). NEAR návestie sa oddeľuje od inštrukcie dvojbodkou (viď príklad).


Príklad:

...

 

MOV CX,10

CYKLUS:

INC AX

 

CMP AX,25h

 

JZ EXIT

 

LOOP CYKLUS

EXIT:

...

FAR návestie predstavuje kompletnú adresu - segment:offset. Pre definovanie FAR návestia sa musí použiť direktíva LABEL.

LABEL - Direktíva definuje symbol daného typu. Typ môže byť jeden z nasledujúcich: NEAR, FAR, PROC, UNKNOWN, BYTE, WORD, DWORD, FWORD, PWORD, QWORD, TBYTE, CODEPTR, DATAPTR.

Syntax: [meno] LABEL [typ]


Príklad:

FAT

LABEL BYTE

 

DW ?

 

...

 

MOV FAT,AL

 

...

LABEL sprístupní pamäťové miesto, ktoré nasleduje po definícii pod zadaným menom a typom.

Ešte pár viet k návestiam. Pre označovanie premenných, návestí, konštánt sa používajú symbolické mená, ktoré sa nazývajú identifikátory. Identifikátorom sa označuje v assembleri slovo zložené zo znakov "A..Z", "a..z", "0..9". Identifikátor nesmie začínať číslicou, nesmie mať názov rezervovaných slov (príkazov, direktív, inštrukcií...). Malé a veľké písmená sa v assembleri štandartne nerozoznávajú, ale ak je to potrebné je možné túto voľbu aktivovať nastavením prekladača.

Cieľ a zdroj sú operandy inštrukcie. Niektoré inštrukcie majú iba jeden operand (napr. INT 21H) alebo nemajú žiadny operand (NOP), prípadne majú dva operandy (CMP AX,BX). Ako už bolo vysvetlené operandom môže byť register, pamäťové miesto alebo konštanta.

Poznámka je to ľubovolný text, ktorý je od inštrukcie oddelený bodkočiarkou. Prekladač ignoruje všetko od bodkočiarky až po koniec riadku. Platí, že čím viac komentárov program obsahuje tým viac je zrozumiteľnejší a prístupnejší iným. Preto ak budete písať či už assemblerovské, pascalovské alebo iné programy vždy si ich podrobne okomentujte. Čas, ktorý strávite pri komentovaní programu sa vám niekoľkonásobne vráti. Z vlastnej skúsenosti viem, že návrat ku komentovanému programu je oveľa príjemnejší. Dôležité je, že nemusíte stráviť niekoľko hodín nad programom a pokúšať sa pochopiť ako pracuje.