sâmbătă, 2 iulie 2016

Modurfi de adrese "asamblare".

Moduri de adresare
Modurile de adresare specifică modul în care se calculează adresa fizică a operandului aflat în
memorie. Adresa fizică (AF) se calculează utilizând:
• adresa de segment (AS) adică adresa de început a segmentului în care se află operandul;
• adresa efectivă (AE) adica deplasamentul sau offset-ul operandului în cadrul segmentului.
Adresarea imediată
Operandul apare explicit în instrucţiune:
Ex.: mov ax, 1 ; pune în AX valoarea 1
 add bx, 2 ; adună la BX valoarea 2
Adresare directă
Adresa efectivă a operandului este furnizată printr-un deplasament. Se consideră registru de segment
implicit registrul DS, în cazul în care nu se face o explicitare a registrului de segment.
Ex.: .data
 VAL dw 1
 .code
 ……………..
 mov bx, VAL ; pune în registrul bx valoarea 1
 add cx, [100] ; adună la registrul cx ceea ce se află în memorie,
 ; în segmentul de date la offset-ul 100.
La asamblare, VAL se va înlocui cu deplasamentul în cadrul segmentului de date. Valoarea 100 este offset
explicit.
Adresare indirectă (prin registre)
Adresa efectivă a operatorului este dată de conţinutul registrelor BX, SI sau DI. Registrul de segment
implicit este DS.

Ex.: mov ax, [bx] ; pune în AX conţinutul locaţiei de memorie de la adresa dată de BX
 mov [di], cx ; memorează conţinutul lui CX la adresa dată de registrul DI
 add byte ptr [si], 2 ; adună valoarea 2 la octetul aflat la adresa dată de SI
La ultima instrucţiune, operatorul byte ptr este absolut necesar altfel nu s-ar cunoaste tipul operandului
(octet, cuvânt) la care se adună 2.
Adresare bazată sau indexată
Adresa efectivă a operandului din memorie se obţine adunând la unul din registrele de bază (BP sau
BX) sau la unul din regiştrii index (SI sau DI) un deplasament constant de 8 sau 16 biţi. Registrul de
segment implicit este DS (pentru BX, SI) şi SS (pentru BP).
Ex.: .data
 VAL dw 10 dup (0)
 .code
 …………….
 mov bx, 5
 mov ax, VAL[bx]
 mov ax, bx[VAL]
 mov ax, [bx+VAL]
 mov ax, [bx].VAL
Instrucţiunile anterioare pun în registrul AX cuvântul din memorie aflat la offset-ul VAL+5.
Observaţii:
 mov ax, [bx] ; adresare indirectă
 mov ax, [bp] ; adresare bazată cu deplasament nul,
; deoarece registrul BP nu se foloseşte în adresarea indirectă
Adresare bazată şi indexată
Adresa efectivă este formată prin adresarea unuia din registrele de bază (BX sau BP) cu unul din
registrele index (SI sau DI) şi cu un deplasament de 8 sau 16 biţi. Registrele de segment implicite sunt DS
pentru BX cu SI sau DI şi SS pentru BP cu SI sau DI.
Ex.: mov ax, [bx][si]
 mov ax, [bx+si+7]
 mov ax, [bx+si].7
 mov ax, [bp][di][7]
Observaţii: la toate modurile de adresare se poate utiliza un registru de segment explicit, în felul următor:
 mov bx, ds:[bp+7] ; adresare bazată
 mov ax, cs:[si][bx+3] ; adresare bazată şi indexată
 mov ax, ss:[bx] ; adresare indirectă.

Niciun comentariu:

Trimiteți un comentariu