Ne vždy je vhodné používat pro naše proměnné paměť hlavního programu. Možnost vyčlenit si několik slabik dává i vložený assembler. Ve skutečnosti se jedná o část paměti určenou pro strojový kód. My si ale do ní umístíme hodnoty, na které většinou nezbylo místo v registrech. Protože je tento blok v segmentu programu, musíme tento blok proměnných programově obejít. Mikroprocesor by totiž tyto hodnoty v paměti považoval za instrukce. Vyčlenit místo si můžeme pomocí direktiv:
Za direktivu považujeme příkaz pro překladač, není to tedy instrukce. S pomocí těchto direktiv říkáme překladači, aby v kódu programu rezervoval určitý počet slabik pro naše účely. Za tyto direktivy rovnou píšeme počáteční hodnoty slabik, slov a dvojslov oddělené čárkou. Pokud napíšeme jméno proměnné deklarované pomocí var nebo jméno procedury, jedná se o jejich adresy (za direktivou DW offsetová část adresy, za direktivou DD celá adresa, tedy ukazatel). Pro názornost si rovnou uvedeme program s těmito direktivami.
Příklad:
var promenna:byte;
begin
asm
JMP
@dal
@slabiky:
DB
10,
200,'M','Ahoj'
@slova:
DW
32000,'A',promenna
@dvojslova:
DD
promenna
@dal:
MOV
AL, CS:[
OFFSET
@slabiky] {do AL přesuň slabiku z adresy}
{@slabiky,
AL:=10}
MOV
AL, CS:[
OFFSET
@slabiky+1] {do AL přesuň slabiku}
{z
@slabiky+1, AL:=200}
MOV
AL, CS:[
OFFSET
@slabiky+2] {do AL přesuň hodnotu ASCII}
{znaku
'M'}
MOV
AL, CS:[
OFFSET
@slabiky+3] {do AL přesuň ASCII prvního znaku}
{řetězce
'Ahoj'}
MOV
AL, CS:[
OFFSET
@slabiky+4] {do AL přesuň ASCII druhého znaku}
{řetězce
'Ahoj'}
MOV
AX, CS:[
OFFSET
@slova] {do AX přesuň slovo z adresy}
{@slova,
AX:=32000}
MOV
AX, CS:[
OFFSET
@slova+2] {do AX přesuň hodnotu ASCII znaku}
{'A',
AH:=0,AL:=65}
MOV
BX, CS:[
OFFSET
@slova+4] {do BX přesuň offset proměnné}
{promenna}
MOV
BYTE
PTR
[BX], AL
{do této proměnné zapiš obsah}
{registru
AL}
LES
BX,CS:[
OFFSET
@dvojslova] {naber obsah ukazatele, tedy}
{celou
adresu proměnné do ES:BX}
SEGES
MOV
BYTE
PTR [BX], AL
{na celou adresu proměnné zapiš}
{obsah
AL}
end;
end.
Na takto vytvořená místa můžeme samozřejmě i zapisovat. Pokud nechceme používat návěští pro každou část, stačí si jen pamatovat, kolik místa zabere slabika, slovo, nebo dvojslovo. Potom se na hledanou část dostaneme přičítáním, nebo odčítáním určitých hodnot k offsetu návěští. Zajímavé je i využití adres proměnných. Protože proměnná za direktivou DD je celá adresa, můžeme naplnit instrukcí LES (LDS) oba registry, tedy segment i offset. Pokud zapíšeme DB 4, 'Ahoj', jedná se o klasický pascalovský řetězec z délkou na začátku.