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
domeniului,
2. Seteaza OF daca rezultatul operatiei
domeniului,
3. Seteaza ZF daca rezultatul operatiei
4. Seteaza SF daca cel mai semnificativ
este 1, ceea ce indica rezultat negativ,
5. Seteaza PF daca rezultatul operatiei
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
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
MOVS
MOVSB
MOVSW
destinatie,sursa
Folosire:
SCAS
sir_destinatie
SCASB
SCASW
Indicatori modificati: AF CF OF PF SF ZF
Compara valoarea adresata de ES:DI cu continutul registrului
acumulator. In fapt, se scade din AL (sau AX) valoarea adresata de ES:DI
(care poate fi octet sau cuvint), actualizeaza indicatorii si registrul DI,
dar nu modifica operandul. Instructiunile SCASB si SCASW sunt folosite pentru
a specifica daca este vorba de o data pe un octet (caz in care se compara cu
AL) sau de o data pe un cuvint respectiv (caz in care se compara cu AX).
Folosite cu prefixele de repetare conditionate, aceste instructiuni pot fi
folosite in scanarea unui sir pentru cautarea unei valori.
Instructiunile LODS, LODSB, LODSW: LOad String
Folosire:
LODS
LODSB
LODSW
sursa
STOS
STOSB
STOSW
destinatie
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.
Instructiuni de salt neconditionat
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
Salt daca...
Conditie testata
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
if
if
if
if
if
if
if
if
if
if
if
Above
Above or Equal
Below
Below or Equal
Carry
CX Zero
Equal
Greater (signed)
Greater or Equal (signed)
Less (signed)
Less or Equal (signed)
JNA
JNAE
JNB
JNBE
JNC
JNE
JNG
JNGE
JNL
JNLE
JNO
JNP
JNS
JNZ
JO
JP
JPE
JPO
JS
JZ
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
Not Above
Not Above or Equal
Not Below
Not Below or Equal
Not Carry
Not Equal
Not Greater (signed)
Not Greater or Equal (signed)
Not Less (signed)
Not Less or Equal (signed)
Not Overflow (signed)
No Parity
Not Signed (signed)
Not Zero
Overflow (signed)
Parity
Parity Even
Parity Odd
Signed (signed)
Zero
CF=1 or ZF=1
CF=1
CF=0
CF=0 and ZF=0
CF=0
ZF=0
ZF=1 or SF != OF
SF != OF
SF=OF
ZF=0 and SF=OF
OF=0
PF=0
SF=0
ZF=0
OF=1
PF=1
PF=1
PF=0
SF=1
ZF=1
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).
Instructiunea INT: INTerrupt
Folosire: INT num
Indicatori modificati: TF IF
Initiaza executarea unei intreruperi; incarca registrul indicatorilor
de stare si control in stiva, zerorizeaza TF si IF, salveaza CS si IP in stiva
si apoi incarca CS:IP cu valorile gasite in tabela vectorilor de intrerupere.
Executia programului continua de la punctul dat de CS:IP nou incarcati.
Instructiunea INTO: INTerrupt on Overflow
Folosire:
INTO
Indicatori modificati: IF TF
Daca indicatorul OF (Overflow Flag) este 1, atunci aceasta
instructiune genereaza un INT 4 care determina executia instructiunilor
care incep la adresa 0000:0010.
Instructiunea IRET: Interrupt RETurn
Folosire:
IRET
Indicatori modificati: AF CF DF IF PF SF TF ZF
Aceasta instructiune se gaseste in corpul de definitie al
unei intreruperi. Returneaza controlul programului in punctul de
dupa instructiunea care a chemat intreruperea, restaurind IP, CS
si registrul indicatorilor de stare si control din stiva. Executia
programului continua de la punctul dat de CS:IP nou incarcati.
LOOPE
LOOPZ
eticheta
eticheta
LOOPNZ eticheta
LOOPNE eticheta