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.