ADRESOVANIE V ASSEMBLERI

Priame adresovanie | Nepriame adresovanie | Bazove adresovanie
Indexove adresovanie | Bazove-Indexove adresovanie

Pozname niekolko sposobov adresovania. Jednotlive moznosti si ukazeme pomocou instrukcie MOV. Tato instrukcia ma dva operandy, oznacovane ako ciel a zdroj. Tieto operandy mozu byt registre, pamatove miesta alebo konstanty (ciselne hodnoty).

Napriklad.:

MOV AX,2222H - po vykonani instrukcie bude register AX obsahovat hodnotu 2222H.

Na miesto v pamati sa pri zapise instrukcii odkazujeme tym sposobom, ze offsetovu cast adresy zapiseme do hranatych zatvoriek (napr.: MOV AX,[1234h]).

 

PRIAME ADRESOVANIE

Je to najjednoduchsi sposob adresovania. Operand instrukcie tvori priamo offsetova adresa. Napr.: MOV AX,[00FFh]. Cize z adresy 00FFh sa vyberie hodnota a ulozi sa do registra AX. Castejsi pripad je taky, ze adresa je nahradena navestim.

Napriklad:

FARBA DB 7
     .  .  .

START: MOV AL,[FARBA]
              ADD AL,1
             MOV [FARBA],AL

Takto to vyzera v zdrojovom subore, po preklade suboru Turbo Assemblerom sa navestie FARBA nahradi konkretnou adresou.

 

NEPRIAME ADRESOVANIE

Offsetova cast adresy je urcena obsahom niektoreho z registrov SI, DI, BX, BP. Napr.: MOV BX,[DI] alebo MOV BL,AL. Z offsetu adresy danej obsahom registra DI sa nacita hodnota do registra BX. Druhy pripad znazornuje presun medzi registrami. Hodnota, ktora je ulozena v registri AL sa presunie do registra BL, pricom obsah registra AL sa nezmeni.

 

BAZOVE ADRESOVANIE

Vyuziva pre vytvorenie offsetovej adresy, ktora obsahuje bazove registre BP, BX a konstantu. Offsetova adresa je dana suctom obsahu bazoveho registra a konstanty. Pouziva sa pri adresovani pevnej datovej struktury (napr.: pola).

Priklad: MOV AX,[BX+N]

V tomto pripade bazovy register ukazuje na zaciatok pola a pomocou konstanty N sa pohybujeme po jednotlivych prvkoch.

Napriklad: MOV AX,[BX+00]
                 MOV AX,[BX+04]

 

INDEXOVE ADRESOVANIE

Je podobne ako bazove adresovanie s tym rozdielom, ze namiesto bazovych registrov sa pouzivaju indexove registre SI a DI. Tento sposob adresovania sa pouziva pri datovych strukturach ako pole, retazce a pod..

Priklad: MOV AX,[POLE+DI]
             MOV AX,[POLE+SI]

Konstanta POLE predstavuje offsetovu adresu zaciatku pola a indexovy register ukazuje na konkretny prvok pola.

 

BAZOVE-INDEXOVE ADRESOVANIE

Ide o kombinaciu predchadzajucich dvoch sposobov adresovania. Offsetova cast adresy je tvorena suctom obsahu bazoveho registra (BX,BP), indexoveho registra (SI,DI) a konstanty. Tento typ adresovania sa pouziva pre adresovanie prvkov dynamickeho pola.

Priklad: MOV AX,[BX+SI+N]

Register AX sa naplni obsahom polozky N struktury, ktora je prvkom pola urceneho registrom SI, pricom zaciatok tohto pola je na adrese urcenej bazovym registrom BX.

Priklad: MOV CX,[BX+SI]

V registri BX je zaciatok dynamickeho pola a v registri SI je adresa prvku v dynamickej oblasti. MOV BL,[BX][SI] - tento zapis je ekvivaletny tomu predchadzajucemu.