ADRESOVANIE V ASSEMBLERI

Priame adresovanie | Nepriame adresovanie | Bázové adresovanie
Indexové adresovanie | Bázové-Indexové adresovanie

Poznáme niekoľko spôsobov adresovania. Jednotlivé možnosti si ukážeme pomocou inštrukcie MOV. Táto inštrukcia má dva operandy, označované ako cieľ a zdroj. Tieto operandy môžu byť registre, pamäťové miesta alebo konštanty (číselné hodnoty).

Napríklad.:

MOV AX,2222H - po vykonaní inštrukcie bude register AX obsahovať hodnotu 2222H.

Na miesto v pamäti sa pri zápise inštrukcií odkazujeme tým spôsobom, že offsetovú časť adresy zapíšeme do hranatých zátvoriek (napr.: MOV AX,[1234h]).

 

PRIAME ADRESOVANIE

Je to najjednoduchší spôsob adresovania. Operand inštrukcie tvorí priamo offsetová adresa. Napr.: MOV AX,[00FFh]. Čiže z adresy 00FFh sa vyberie hodnota a uloží sa do registra AX. Častejší prípad je taký, že adresa je nahradená návestím.

Napríklad:

FARBA DB 7
     .  .  .

ŠTART: MOV AL,[FARBA]
              ADD AL,1
             MOV [FARBA],AL

Takto to vyzerá v zdrojovom súbore, po preklade súboru Turbo Assemblerom sa návestie FARBA nahradí konkrétnou adresou.

 

NEPRIAME ADRESOVANIE

Offsetová časť adresy je určená obsahom niektorého z registrov SI, DI, BX, BP. Napr.: MOV BX,[DI] alebo MOV BL,AL. Z offsetu adresy danéj obsahom registra DI sa načíta hodnota do registra BX. Druhý prípad znázorňuje presun medzi registrami. Hodnota, ktorá je uložená v registri AL sa presunie do registra BL, pričom obsah registra AL sa nezmení.

 

BÁZOVÉ ADRESOVANIE

Využíva pre vytvorenie offsetovej adresy, ktorá obsahuje bázové registre BP, BX a konštantu. Offsetová adresa je daná súčtom obsahu bázového registra a konštanty. Používa sa pri adresovaní pevnéj dátovéj štruktúry (napr.: poľa).

Príklad: MOV AX,[BX+N]

V tomto prípade bázový register ukazuje na začiatok poľa a pomocou konštanty N sa pohybujeme po jednotlivých prvkoch.

Napríklad: MOV AX,[BX+00]
                 MOV AX,[BX+04]

 

INDEXOVÉ ADRESOVANIE

Je podobné ako bázové adresovanie s tým rozdielom, že namiesto bázových registrov sa používajú indexové registre SI a DI. Tento spôsob adresovania sa používa pri dátových štruktúrach ako pole, reťazce a pod..

Príklad: MOV AX,[POLE+DI]
             MOV AX,[POLE+SI]

Konštanta POLE predstavuje offsetovú adresu začiatku poľa a indexový register ukazuje na konkrétny prvok poľa.

 

BÁZOVÉ-INDEXOVÉ ADRESOVANIE

Ide o kombináciu predchádzajúcich dvoch spôsobov adresovania. Offsetová časť adresy je tvorená súčtom obsahu bázového registra (BX,BP), indexového registra (SI,DI) a konštanty. Tento typ adresovania sa používa pre adresovanie prvkov dynamického poľa.

Príklad: MOV AX,[BX+SI+N]

Register AX sa naplní obsahom položky N štruktúry, ktorá je prvkom poľa určeného registrom SI, pričom začiatok tohto poľa je na adrese určenéj bázovým registrom BX.

Príklad: MOV CX,[BX+SI]

V registri BX je začiatok dynamickeho poľa a v registri SI je adresa prvku v dynamickej oblasti. MOV BL,[BX][SI] - tento zápis je ekvivaletný tomu predchádzajúcemu.