Documente Academic
Documente Profesional
Documente Cultură
de asamblare
Set de instructiuni
Instructiuni aritmetice
Instructiunile aritmetice efectueaza operatii aritmetice de baza asupra operanzilor - numere pe 8 sau 16 biti, cu
semn sau fara semn. Instructiunile aritmetice afecteaza indicatorii de stare dupa cum urmeaza:
1. Seteaza CF daca rezultatul operatiei fara semn este in afara domeniului,
2. Seteaza OF daca rezultatul operatiei cu semn este in afara domeniului,
3. Seteaza ZF daca rezultatul operatiei este 0,
4. Seteaza SF daca cel mai semnificativ bit al rezultatului operatiei este 1, ceea ce indica rezultat negativ,
5. Seteaza PF daca rezultatul operatiei contine un numar par de biti 1.
Scade "sursa" din "destinatie" si actualizeaza indicatorii dar nu salveaza rezultatul. De obicei, in urma acestei
instructiuni sunt verificate valorile indicatorilor pentru conditii.
Instructiuni de transfer
Instructiunea MOV
Folosire: MOV destinatie,sursa
Transfera un octet sau un cuvint de memorie din operandul sursa in operandul destinatie.
Exemple:
mov ds, ax; continutul registrului ax va fi transferat in registrul ds
mov ah, 9h ; ah va contine octetul cu valoarea 9h
Copie indicatorii SF, ZF, AF, PF si CF in bitii 7, 6, 4, 2, 0 respectiv, ai registrului AH. Continutul bitilor 5, 3
si 1 este nedefinit. Indicatorii nu sunt afectati in urma acestei instructiuni.
Instructiunea PUSHF:
Folosire: PUSHF
Tansfera registrul indicatorilor de stare si control in stiva.
Instructiunea POPF
Folosire: POPF
Transfera cuvintul din top-ul stivei in registrul indicatorilor de stare si control, dupa care incrementeaza SP cu 2.
Instructiuni logice
Instructiuni de deplasare
Instructiuni pe siruri
Un sir este o seventa de octeti in memorie. Operatiile pe siruri (realizate de instructiunile mai jos descrise)
vizeaza lucrul pe asemenea secvente de octeti, de exemplu mutarea unui sir dintr-o zona a memoriei in alta,
compararea a doua siruri, etc. Instructiunile pe siruri pot fi precedate de prefixe de repetare, peritind prelucrarea
rapida a sirurilor lungi. O instructiune pe siruri poate avea operand sursa, operand destinatie sau ambii.Implicit, sirul
sursa se considera a fi in segmentul de date curent (adresat de DS) iar sirul destinatie - in extrasegmentul curent de
date (adresat de ES).Registrul SI (registrul sursa index) este folosit pentru a contine deplasamentul cu care adresam
elementul curent al sirului sursa, iar DI (registru destinatie index) contine deplasamentul elementului curent al sirului
destinatie. Evident, inainte de executia unei instructinuni pe siruri, trebuie cunoscut tipul de date din siruri (octeti sau
cuvinte). Registrii index trebuiesc initializati inainte de executie. In timpul executiei, functie de setarea indicatorului
de directie DF, registrii de index se autoincrementeaza (DF=0) sau se autodecrementeaza (DF=1) cu 1 daca datele sunt
octeti, sau cu 2 daca datele sunt cuvinte.
Instructiunile pe siruri pot fi precedate de prefixe de repetare (REP, REPE, etc.). In acest caz, numarul de
repetari ale unei instructiuni este dat de continutul registrului CX. Dupa fiecare repetare a instructiunii, CX este
decrementat, iar la CX=0 se preda controlul instructiunii urmatoare.
Instructiunea REP este folosita impreuna cu instructiunile MOVS si STOS.Repeta executia unei instructiuni
pe siruri cit timp CX este diferit de 0. Dupa fiecare instructiune, CX este decrementat si se testeaza indicatorul ZF.
Instructiunile REPE si REPZ sunt identice; ele se folosesc cu instructiunile CMPS si SCAS; repeta executia
instructiunii pe siruri atita timp cit CX este diferit de 0 si indicatorul ZF este 1. CX este decrementat si ZF este testat
dupa fiecare executie a instructiunii pe siruri.
Instructiunile REPNE si REPNZ sunt identice; repeta executia unei instructiuni pe siruri atita timp cit CX este
diferit de 0 si ZF este 0. CX este decrementat si ZF este testat dupa fiecare operatie pe siruri.
Observatie:
Instructiunile cu repetare sunt interuptibile, in sensul ca microprocesorul va recunoaste o intrerupere inaintea
prelucrarii unui nou element al sirului.
Transfera un octet sau un cuvint din acumulator la locatia adresata de ES:DI si actualizeaza DI pentru
adresarea urmatorului element in sir. Utilizind prefixele de repetare, aceste instructiuni pot fi folosite la initializarea
unui sir cu o valoare constanta.
Instructiuni de salt
Instructiunile de salt modifica valoarea continutului registrului de instructiuni IP, eventual a registrului
segment de cod CS, intrerupind executia secventiala a instructiunilor. In urma acestor modificari, programul
isi continua executia de la instructiunea incarcata la adresa CS:IP.
Exista doua categorii de instructiuni de salt: instructiuni de salt neconditionat si instructiuni de salt conditionat.
Instructiunea CALL
Folosire: CALL nume_procedura
Instructiunea CALL este folosita pentru apelul unei proceduri cu numele "nume_procedura". Inainte de a se
preda controlul procedurii apelate, se salveaya pe stiva informatii privitoare la adresa din segmentul de cod la
care se va preda controlul dupa terminarea executiei procedurii. Corespunzator celor doua tipuri de proceduri, NEAR
si FAR, asamblorul genereaza doua tipuri de CALL: intrasegment si intersegment respectiv. In cazul unui CALL
intrasegment, la executie este plasat (mai corect, salvat) in stiva continutul registrului IP, iar IP este incarcat cu
deplasamentul in segmentul de cod al locatiei in care incep instructiunile componente ale procedurii. In cazul unui
CALL intersegment, pe linga salvarea registrului IP, are loc operatia similara si pentru registrul CS iar registrii CS si
IP sunt incarcati astfel incit sa pointeze la adresa la care incep instructiunile procedurii.
Aceste instructiuni sunt executate functie de starile indicatorilor de stare si control. Toate salturile conditionate
sunt scurte (SHORT), deci in domeniul -128 - 127 octeti relativ la instructiunea ce urmeaza celei de salt
conditionat. In continuare este prezentata lista instructiunilor de salt conditionat impreuna cu conditiile care trebuiesc
satisfacute.
Observatii:
- conditiile sunt exprimate in limba engleza, pentru a reflecta de unde vin abrevierile pentru mnemonici; de
asemenea, sunt cuprinse informatii despre conditii in care se iau in considerare numere cu semn(signed).
- este o practica buna de programare ca programul sa fie organizat astfel incit cazurile cele mai des intilnite (in
stabilirea unei conditii) sa fie tratate fara a se trece printr-un salt (ceea ce, evident, salveaza timp).
Instructiunile din aceasta clasa permit conducerea si controlul buclelor in programe. Fiecare din aceste
instructiuni are forma generala "mnemonica eticheta", unde "eticheta" precede instructiunea la care se preda
controlul daca CX este diferit de 0. Instructiunea la care se preda controlul trebuie sa fie in domeniul -128 la +127
octeti fata de cea care urmeaza instructiunea ce controleaza iteratia. La fiecare executie a unei instructiuni din aceasta
clasa, registrul CX se decrementeaza. De obicei, aceste instructiuni sunt folosite in combinatie cu instructiunile pe
siruri.
Instructiunile LOOPNZ/LOOPNE - LOOP while Not Zero / LOOP while Not Equal
Folosire: LOOPNZ eticheta
LOOPNE eticheta
Decrementeaza CX cu 1; daca CX nu este 0 si ZF este 0, transfera controlul la instructiunea precedata de
"eticheta". Instructiunea la care se preda controlul trebuie sa fie in domeniul -128 la +127 octeti fata de cea care
urmeaza instructiunea de buclare.