Sunteți pe pagina 1din 26

REPERTORIUL INSTRUCŢIUNILOR LIMBAJULUI DE ASAMBLARE

Abrevieri

FG - forma generală
S - semnificaţia
AF - acţiunea instrucţiunii asupra flagurilor
Instrucţiuni de transfer

Aceste instrucţiuni copiază un octet sau un


cuvânt dintr-o sursă într-o destinaţie. Destinaţia
poate fi un registru, o locaţie de memorie sau un
port de ieşire, iar sursa poate fi un registru, o locaţie
de memorie, date imediate(constante)sau un port de
intrare.
Port-locul unde este conectat o unitate
periferică periferică şi datele pot fi
transmise din el la blocul de sistem sau din
ele.
Porturi: a tastaturii, a monitorului, a
şoricelului, a imprimantei…
Instrucţiuni de transfer de uz general

Instrucţiunea mov (move data- transfera date)

FG: mov <destinaţie>, <sursă>


S: (destinate)← sursa copierea sursei în
destinaţie cu păstrarea valorii sursei
AF: nu influenţează asupra flagurilor

Sursa şi destinaţia sunt octeţi sau cuvinte


Instrucţiunea mov

Incorect ar fi dacă:
• sursa şi destinaţia ar fi ambele operanzi în
memorie;
• ar fi folosite registrele flags şi ip;
• operanzii ar avea dimensiuni diferite;
• registru CS ar apărea ca destinaţie;
• într-un registru de segment ar fi transferate date
imediate;
• operanzii ar fi simultan registre de segment.
Instrucţiunea mov

Exemple:
mov ax, bx
mov al,bx
mov [bx],[si]
mov al, ch
mov b[bx][si],al
mov cs,ax
Instrucţiunea mov

Daca se doreşte încărcarea adresei efective a


variabilei se foloseşte operatorul offset
(furnizează deplasamentul în cadrul
segmentului) şi anume
mov bx, offset a
Instrucţiunea mov

Scrieți secvenţă de program ce copiază


conţinutil unei locaţii de memorie în alta.

.model small
.data
a db 5
b db ?
Instrucţiuni de transfer de uz general

Instrucţiunea xchg
(exchange data- interschimbă date)

FG: xchg <destinaţie>, <sursă>


S: interschimbarea sursei cu destinaţia
AF: nu influenţează asupra flagurilor

Registrele de segment nu pot apărea ca operanzi


şi cel puţin un operand trebuie să fie registru
Instrucţiunea xchg

Exemple

xchg al, ah
xchg bx, ax
xchg al, bx
xchg es, ax
Instrucţiunea xchg

Instructiunea xchg este utilă la


interschimbarea a două locaţii aflate în
memorie. Dacă op1 si op2 sunt doi operanzi
aflati în memorie, care trebuie interschimbati,
secventa standard de interschimbare (folosind
un registru general reg) este: ____________
Instrucţiuneaxchg

mov reg, op1


xchg req, op2
mov op1, reg
Instrucţiuni de transfer de intrare-ieşire

Instrucţiunea in
(Input Data- Citeşte date de la port de intrare)

FG: in <destinaţie>, <port>


S: se execută o citire de la portul de intrare
specificat pe 8 sau 16 biţi
AF: nu influenţează asupra flagurilor.
Instrucţiunea in

Destinaţia este registrul al sau ax, iar port


este fie o constantă cuprinsă între 0 si 255 sau
registrul dx dacă numărul portului este mai
mare. Instrucţiunea se foloseşte pentru dirijarea
directă a dispozitivelor calculatorului.
Dimensiunea datelor se determină de
dimensiunea primului operand.
*

Instrucţiunea out
(Output Data- Scrie date de la port de ieşire)

FG: out <port>, <sursă>


S: se execută o citire din registrul specificat
pe 8 sau 16 biţi în portul de intrare
AF: nu influenţează asupra flagurilor

Sursa este registrul al sau ax, iar port este fie


o constantă cuprinsă între 0 si 255 sau registrul
dx dacă numărul portului este mai mare.
Instrucţiuni de transfer al adreselor
Instrucţiunea lea
(Load Effective Adress – încarcă adresa efectivă)

FG: lea <registru >, <sursă>


S: copierea adresei efective a operandului
(offset-ui în cadrul segmentului) în registrul general
specificat
AF: nu influenţează asupra flagurilor

Registru este unul din bx, si, di, dx,(ar putea fi


şi altele), iar sursa este un operand aflat în memorie,
specificat printr-un mod oarecare de adresare.
Instrucţiunea lea
Exemple:
lea bx, a
lea di, a [bx] [si]

Un calcul similar al adresei efective se obtine şi cu operatorul


offset şi instructiunea mov, calcul care se face insă la asamblare.
mov bx,offset a
Instructiunea lea permite şi moduri de adresare bazată şi/sau
indexată ce cu ajutorul instrucţiunii mov acest lucru nu-l putem face.

Să se încarce în registrul bx adresa elementului 5 din tabloul tab


.data
tab db -2, 4, -6,7, -4, 6, 3,
.code
...
mov di,4
lea bx, tab[di] ;sau lea bx,tab[4]

Instrucţiunea lea
Instructiunea lea se foloseşte pentru încărcarea
registrelor de bază sau de segment cu adresele efective ale
unor operanzi din memorie, în vederea unor adresări
ulterloare. Secventa:

.data
vector dw 10, 20, 30, 40, 50
.code
lea bx, vector
mov si,4
mov ax, [bx] [si]

va încărca în ax al ______ element al tabloului vector.


Instrucţiunea lds
(Load Data Segment – încarcă ds)

FG: lds <registru >, <sursă>


S: se incarcă perechea ds:registru
AF: nu influenţează asupra flagurilor

Registru este un registru de 16 biti, iar sursa este un


operand de tip double-word aflat în memorie, care conţne
o adresä completă de 32 de biti
Instrucţiunea les
(Load Extra Segment – încarcă es)

FG: les <registru >, <sursă>


S: se incarcă perechea es:registru
AF: nu influenţează asupra flagurilor.

Registru este un registru de 16 biti, iar sursa este un


operand de tip double-word aflat în memorie, care conţne
o adresä completă de 32 de biti
Instrucţiuni de lucru cu stiva
Instrucţiunea push
(Push Data – salvează date în stivă)

FG: push <sursă>


S: copiază sursa în vârful stivei
AF: nu influenţează asupra flagurilor

Sursa poate fi un operand pe 16 biti (registru


general de 16 biti, registru de segment sau locatie
de memorie).
Instrucţiunea push

La execuția instrucțiunii push se


decrementează sp cu 2 şi în octeţii de la adresele
(SP)+1 şi (SP) din segmentul de stivă se copiază
operandul sursă.
Copierea respectă regula de memorare a
cantităţilor pe mai mulţi octeţti şi anume, partea
mai puțin semnificativă (partea low) se
memorează la adrese mici.
Instrucţiunea push

Exemple
push bx
push es
push al
push [bx)
push [bp+5]
Instrucţiunea pop
(Pop Data – refă date din stivă)

FG: pop <destinaţie>


S: copiază vârful stivei în destinaţie
AF: nu influenţează asupra flagurilor

Destinaţia este un operand pe 16 biţi (registru


general de 16 biţi, registru de segment sau locaţie de
memorie).
Registrul cs nu poate apărea ca destinaţie.
Instrucţiunea pop
(Pop Data – refă date din stivă)

Exemple:
pop bx
pop cs
pop es
pop es:[di]
pop al
Instrucţiuni de lucru cu stiva
Din analiza instrucţiunilor push şi pop,
reiese că o secvenţă de refaceri ale unor cantităţi
salvate în stivă (de exemplu, conţinutul unor
registre) trebuie scrisă în ordine inversă.
Dacă secvenţa de salvare a fost:
push ax
push bx
push cx
atunci secvenţa de refacere trebuie să fie:
pop cx
pop bx
pop ax
Ex.
mov ax,100
push ax
mov cx,40
mov bx, 35
push bx
push cx
pop ax
pop cx
pop bx

S-ar putea să vă placă și