Extras din laborator
Orice operand pus intre paranteze drepte reprezinta o adresa de memorie . De exemplu [3A21] reprezinta continutul locatiei de memorie cu adresa 3A21, iar [BX+DI] reprezinta continutul locatiei de memorie a carei adresa este data de suma intre registrele BX si DI.
Este permisa si scrierea RG[const] cau const[RG] unde RG este un registru general iar const este un deplasament (numar sau eticheta ) care se aduna la continutul acestui registru. Acesta forma este echivalenta cu [RG+const], deci scrierea de termeni alaturati are semnificatie de sumare si nu de inmultire.
Exemplu 3.2:
MOV CL,BX[10h] ; Incarca in CL continutul locatiei de memorie a carei adresa efectiva este suma intre continutul lui BX si constanta 10h, iar adresa de segment este continuta in DS.
Instructiunea este echivalenta cu forma MOV CL, 10h[BX]
Modul de lucru:
P 3.1 Se va scrie si se va testa un program care efectueaza urmatoarele:
• Incarca constanta 22h in registrul AL
• Trimite aceasta constanta in memorie la adresa BX[20] si la adresa DS:30
Indicatii:
Ambele locatii sunt plasate in segmentul de date si se pot vizualiza in zona Dump din fereastra inferioara a Turbo Debugger.
3.2 Componentele unei adrese efective
Este comod sa se lucreze in mod normal cu adrese efective, adresa de segment fiind incarcata de procesor in mod automat din registrul de segment implicit pentru operatia respectiva. Aceasta conduce insa la necesitatea cunoasterii registrelor implicite pentru diversele adresari, registre care vor fi specificate in continuare.
AE se alcatuieste dupa formula generala:
AE = (BX/BP)* + (SI/DI)* + (D8/D16)*
unde:
* indica un termen optional (la unele asambloare nu poate fi numai ultimul termen)
/ separa variantele unui termen
BX si BP sint registrele de tip baza
SI si DI sint registrele index ( sursa si respectiv destinatie)
D8 si D16 reprezinta un deplasament exprimat pe 8, respectiv 16 biti
Deci, adresa efectiva se exprima si sub forma:
Adresa = Baza + Index + Deplasament,
unii dintre acesti termeni fiind optionali.
In functie de registrele generale folosite in formarea unei adrese, registrele de segment implicite sunt cele din tabelul 3.1. Trebuie sa se tina seama in permanenta de regulile registrelor de segment implicite deoarece asamblorul nu poate semnala erori in cazul utilizarii lor incorecte. De exemplu, daca se doreste citirea unei valori din segmentul de date si se foloseste registrul general BP in instructiunea
MOV CH,[BP+10]
asamblorul considera ca aceasta instructiune este corecta si ca intentia programatorului a fost sa citeasca din segmentul de stiva (vezi tabelul). Programatorul ar fi trebuit sa foloseasca unul din registrele BX sau SI daca dorea citirea din segmentul de date.
Preview document
Conținut arhivă zip
- Transferuri de date si operatii aritmetice cu memoria.doc