Pamäťový model

Vytváranie segmentov je pomerne zložité. Oveľa jednoduchšie sa to dá urobiť pomocou direktívy .MODEL. Táto direktíva sa používa pre definovanie pamäťového modelu a v zdrojovom texte sa uvádza vždy na začiatku. Tiež nám prezrádza o aký veľký program ide.

Syntax: .MODEL [pamäťový model], [jazyk]

[Pamäťový model] môže byť jeden z nasledujúcich typov: TINY, SMALL, MEDIUM, COMPACT, LARGE, HUGE, THUGE, TPASCAL, FLAT. Nás budú predovšetkým zaujímať prvé dva typy. Ostatné pamäťové modely sa odlišujú počtom segmentov, veľkosťou kódu a dát atď. a nepoužívajú sa tak často.

Model TINY - ide o najmenší model z celej skupiny modelov. Dáta a kód programu sú umiestnené v spoločnom segmente, ktorý nesmie presiahnuť veľkosť 64KB. Pri odkazoch na dáta a kód sa používajú smerníky NEAR. Smerník NEAR je 16-bitový smerník, ktorý udáva adresu (offset) v rámci príslušného segmentu. Pomocou NEAR smerníka je možné adresovať dáta iba v rámci príslušného segmentu, teda do 64KB. Tento model sa hlavne používa pre vytváranie programov typu *.COM. V programoch typu COM nie je potrebné definovať zásobník.

Model SMALL - dáta a kód programu sú uložené v samostatných segmentoch, ktoré sa neprekrývajú. K dispozícii máte 64KB pre kód a 64KB pre dáta a stack programu. Pri odkazoch na dáta a kód programu sa používajú smerníky NEAR. Tento model sa používa pre vytváranie súborov s príponou *.EXE.

[Jazyk] - parameter informuje prekladač o konvencii volania, ktorá bude použitá pri tvorbe procedúr. Jazyk môže byť jeden z nasledujúcich: BASIC, C, CPP, FORTRAN, PASCAL, PROLOG, SYSCALL, NOLANGUAGE.

Pre definovanie jednotlivých segmentov použijeme nasledujúce direktívy.

.CODE - direktíva určuje začiatok kódového segmentu.

.DATA - direktíva určuje začiatok dátového segmentu.

.STACK - direktíva určuje začiatok segmentu zásobníka.

Syntax: .STACK [veľkosť]

Parameter [veľkosť] určuje počet bajtov, ktoré budú pre zásobník vyhradené. Ak nie je tento parameter uvedený je vyhradená štandartná veľkosť 1024 bajtov. Nasledujúci príklad ukazuje použitie predchádzajúcich direktív.

.MODEL SMALL

.STACK 100H

.DATA

TEXT

DB 'PC-REVUE$'

POLE

DB 10 DUP (?)

FARBA

DW 7000

.CODE

 

START:

MOV AX,4C00H

 

INT 21H

 

END START

Všimnite si, že žiadna z direktív .CODE, .STACK, .DATA nemá ukončenie segmentu ENDS, ako je tomu u direktívy SEGMENT. V tomto prípade segment končí na tom mieste, kde začína nový segment a posledný segment je zakončený direktívou END.