Sunteți pe pagina 1din 13

Sumar al lb.

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

fara semn este in afara


cu semn este in afara
este 0,
bit al rezultatului operatiei
contine un numar par de biti 1.

Instructiunea ADD: Adunare aritmetica


Folosire: ADD destinatie, sursa
Indicatori modificati: AF CF OF PF SF ZF
Aduna "sursa" la "destinatie" si inlocuieste continutul original al
operandului "destinatie" cu rezultatul adunarii. Amindoi operanzii sunt
numere binare, pe 8 sau 16 biti.
Instructiunea ADC: Aduna cu "Carry"
Folosire: ADC destinatie,sursa
Indicatori modificati: AF CF OF SF PF ZF
Aduna "sursa" la "destinatie" si inlocuieste continutul original al
operandului "destinatie" cu rezultatul adunarii. Daca dupa adunare CF este 1,
se aduna un 1 la destinatie.
Instructiunea INC: Incrementare
Folosire: INC destinatie
Indicatori modificati: AF OF PF SF ZF
Aduna un 1 la "destinatie", considerat numar binar fara semn.
Instructiunea SUB: Scadere (Subtract)
Folosire: SUB destinatie, sursa
Indicatori modificati: AF CF OF PF SF ZF
Sursa este scazuta din destinatie, iar rezultatul este pastrat in
destinatie.

Instructiunea SBB: SuBtract with Borrow


Folosire: SBB destinatie, sursa
Indicatori modificati: AF CF OF PF SF ZF
Scade sursa din destinatie; daca CF este setat pe 1, scade un 1
si plaseaza rezultatul in "destinatie".
Instructiunea DEC: Decrement
Folosire: DEC destinatie
Indicatori modificati: AF OF PF SF ZF
Scade (operatie fara semn) un 1 din "destinatie".
Instructiunea NEG: Complement fata de 2
Folosire: NEG destinatie
Indicatori modificati: AF CF OF PF SF ZF
Scade "destinatie" din 0 si salveaza complementul fata de 2 al lui
"destinatie" in "destinatie" (practic, schimba semnul numarului). Daca
numarul este -128 sau -32768, atunci el nu este schimbat, ci este setat pe 1
indicatorul OF.
Instructiunea CMP: CoMPare
Folosire: CMP destinatie,sursa
Indicatori modificati: AF CF OF PF SF ZF
Scade "sursa" din "destinatie" si actualizeaza indicatorii
dar nu salveaza rezultatul. De obicei, in urma acestei instructiuni
sunt verificate valorile indicatorilor pentru conditii.
Instructiunea MUL: Inmultire fara semn
Folosire: MUL sursa
Indicatori modificati: CF OF
Inmulteste continutul registrului acumulator cu "sursa". Daca "sursa"
este valoare pe un byte, atunci este folosit AL, iar rezultatul este plasat
in AX. Daca "sursa" este valoare pe un cuvint, atunci sursa este inmultita
cu AX, iar rezultatul este plasat in DX si AX. Indicatorii CF si OF sunt
pozitionati daca partea cea mai semnificativa a rezultatului este diferita
de 0 (AH pentru operand sursa pe un octet, DX pentru operand sursa cuvint).
Instructiunea IMUL: Inmultire cu semn
Folosire: IMUL sursa
IMUL sursa,immed (numai de la 80286 in sus)
IMUL destinatie,sursa,immed8 (numai de la 80286 in sus)
Indicatori modificati: CF OF
Realizeaza inmultirea cu semn a registrului acumulator cu "sursa".
Daca "sursa" este valoare pe un byte, atunci este folosit AL, iar rezultatul
este plasat in AX. Daca "sursa" este valoare pe un cuvint, atunci sursa este
inmultita cu AX, iar rezultatul este plasat in DX si AX. Indicatorii CF si OF
sunt pozitionati daca partea cea mai semnificativa a rezultatului este
diferita de 0 (AH pentru operand sursa pe un octet, DX pentru operand sursa
cuvint). Din modurile in care este folosita instructiunea, se poate observa

ca se pot specifica registri sursa si destinatie, precum si un eventual


al treilea factor al inmultirii (operand imediat).
Instructiunea DIV: Divide
Folosire: DIV sursa
Impartire fara semn a acumulatorului si a extensiei sale cu sursa.
Daca operandul sursa este un octet, citul este plasat in AL, iar restul in AH.
Daca operandul sursa este un cuvint (atentie, in acest caz se considera ca
deimpartit AX cu extensia DX, deci numar pe 32 de biti), citul este in AX,
iar restul in DX.
Observatii:
In cazul in care operandul sursa este un cuvint, daca doriti sa impartiti
doar AX, asigurati-va ca DX este 0; altfel, conform celor mai sus descrise,
riscati rezultat imprevizibil.
Daca restul depaseste capacitatea registrului destinatie (FFh pentru sursa
octet ori FFFFh pentru sursa cuvint) sau daca a fost incercata o impartire
cu 0, este generata o intrerupere de tip 0 (impartire la 0), restul si citul
avind valori nedefinite.
Instructiunea IDIV: Impartire intreaga cu semn
Folosire: IDIV sursa
Impartire cu semn a acumulatorului cu sursa. Daca operandul sursa
este un octet, citul este plasat in AL, iar restul in AH. Daca operandul
sursa este un cuvint, citul este in AX, iar restul in DX. Domeniul valorilor
citului este cuprins intre -127...+127 pentru sursa octet, si -32767...+32767
pentru sursa cuvint.In cazul in care citul este pozitiv si depaseste valoarea
maxima, ori este negativ si depaseste valoarea minima, se generaza o
intrerupere de tip 0, iar restul si citul au valori nedefinite.
Instructiunea CBW: Convert Byte to Word
Folosire: CBW
Converteste octetul din AL la valoare pe un cuvint in AX cu extensie
de semn.
Instructiunea CWD: Convert Word to Double-word
Folosire: CWD
Extinde semnul cuvintului din AX formind un dublu cuvint cu partea
cea mai semnificativa in DX iar cea mai putin semnificativa in AX.

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


Instructiunea PUSH: Pune un cuvint in stiva
Folosire: PUSH sursa
Decrementeaza continutul registrului SP cu doi si apoi transfera
un cuvint din operandul sursa in noul virf al stivei, referit de SP
(deci care are adresa SS:SP). Aceasta instructiune este folosita deseori
pentru incarcarea parametrilor in stiva, inainte de apelul unei proceduri.
Instructiunea POP: Extrage un cuvint din stiva.
Folosire: POP destinatie
Transfera cuvintul din top-ul stivei (SS:SP) la locatia referita de
"destinatie", apoi incrementeaza SP cu 2 astfel incit sa pointeze la
noul virf al stivei.
Instructiunea XCHG: Exchange (schimba)
Folosire: XCHG destinatie, sursa
Schimba continutul intre "destinatie" si "sursa". Operanzii pot fi
registri sau memorie; registrii segment nu pot fi oeranzi ai acestei
insructiuni.
Instructiunea IN: Primeste octet sau cuvint de la un port specificat.
Folosire: IN acumulator, port
Este citit un octet sau un cuvint de la "port" si este plasat in AL,
sau AX respectiv. Daca numarul portului este in domeniul 0-255, operandul
"port" poate fi specificat ca valoare imediata. Altfel, numarul de port trebuie
specificat in DX.
Instructiunea OUT: Faciliteaza iesirea datelor la porturi
Folosire: OUT port, acumulator
Transfera un octet din AL, ori un cuvint din AX la portul specificat.
Daca numarul portului este in domeniul 0-255, operandul "port" poate fi
specificat ca valoare imediata. Altfel, numarul de port trebuie specificat in
DX.
Instructiunea LEA: Incarca adresa efectiva (Load Effective Address)
Folosire: LEA destinatie, sursa
Transfera deplasamentul din adresa operandului "sursa" in operandul
"destinatie", care trebuie sa fie un registru general.
Instructiunea LDS: Incarca pointer folosind DS
Folosire: LDS destinatie, sursa
Incarca o adresa logica de memorie (pe 32 de biti) din memorie
(operandul "sursa" se presupune a fi o variabila in memorie) in "destinatie",
care trebuie sa fie registru general, si in registrul DS. Deplasamentul este
incarcat in registrul general specificat in "destinatie", iar segmentul este

incarcat in DS. Operandul "sursa" indica locatia in memorie la care se afla


dublu cuvintul ce urmeaza a fi incarcat. Pntru a folosi aceasta instructiune
cuvintul de la adresa de memorie mai mica trebuie sa contina deplasamentul,
iar cel de la adresa mai mare trebuie sa contina adresa de segment.
Instructiunea LES: Incarca pointer folosind ES
Folosire: LES destinatie, sursa
Incarca o adresa logica de memorie (pe 32 de biti) din memorie
(operandul "sursa" se presupune a fi o variabila in memorie) in "destinatie",
care trebuie sa fie registru general, si in registrul ES. Deplasamentul este
incarcat in registrul general specificat in "destinatie", iar segmentul este
incarcat in ES. Operandul "sursa" indica locatia in memorie la care se afla
dublu cuvintul ce urmeaza a fi incarcat. Pntru a folosi aceasta instructiune
cuvintul de la adresa de memorie mai mica trebuie sa contina deplasamentul,
iar cel de la adresa mai mare trebuie sa contina adresa de segment.
Instructiunea LAHF: Incarca registrul AH din "flag-uri"
Folosire: LAHF
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 SAHF: Restaureaza indicatorii din AH
Folosire: SAHF
Transfera bitii 7, 6, 4, 2 si 0 ai registrului AH in indicatorii SF,
ZF, AF, PF si CF respectiv.
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
Instructiunea NOT: NOT logic
Folosire: NOT destinatie
Realizeaza complementul operandului "destinatie" in baza 2 (bitii 1
devin 0, iar bitii 0 devin 1). Rezultatul este in "destinatie".
Instructiunea AND: SI logic
Folosire: AND destinatie, sursa

Indicatori modificati: CF OF PF SF ZF (AF nedefinit)


Realizeaza operatia "si logic" (daca bitii de pe aceeasi pozitie in
cei doi operanzi sunt setati, atunci bitul corespunzator in rezultat va fi
setat) intre cei doi operanzi, rezultatul fiind in "destinatie".
Instructiunea OR: SAU logic
Folosire: OR destinatie,sursa
Indicatori modificati: CF OF PF SF ZF (AF nedefinit)
Realizeaza operatia "sau logic" a celor doi operanzi (orice bit setat
pe 1 in unul din operanzi va fi setat pe 1 in rezultat) si returneaza
rezultatul in "destinatie".
Instructiunea XOR: SAU exclusiv
Folosire: XOR destinatie,sursa
Indicatori modificati: CF OF PF SF ZF (AF nedefinit)
Realizeaza operatia "sau exclusiv" intre cei doi operanzi (bitii
setati in rezultat sunt cei care corespund pozitiilor in operanzi ce contin
valori diferite ) si returneaza rezultatul in "destinatie".
Instructiunea TEST: Testeaza "sablon"
Folosire: TEST destinatie,sursa
Indicatori modificati: CF OF PF SF ZF (AF nedefinit)
Realizeaza "si logic" intre cei doi operanzi, actualizeaza indicatorii,
dar nu returneaza rezultatul.
Instructiuni de deplasare
Instructiunile SHL/SAL: Translare (Shift) la stinga
Folosire: SAL destinatie, nr
SHL destinatie, nr
Indicatori modificati: CF OF PF SF ZF (AF nedefinit)
Transleaza operandul "destinatie" la stinga cu numar de biti dat de
"nr", zerorizind pozitiile la dreapta; indicatorul CF tine ultimul bit
translat. Practic, o shiftare cu o pozitie la stinga este echivalenta cu o
inmultire cu 2 a operandului destinatie.
Instructiunea SHR: Shift la dreapta
Folosire: SHR destinatie, nr
Indicatori modificati: CF OF PF SF ZF (AF nedefinit)
Shifteaza operandul destinatie la dreapta cu "nr" pozitii, zerorizind
pozitiile shiftate. Carry Flag tine ultimul bit shiftat. Cu shift la dreapta
putem realiza foarte usor o impartire la putere a lui 2 a operandului
destinatie.
Instructiunea SAR: Shift Aritmetic la dreapta
Folosire: SAR destinatie, nr

Indicatori modificati: CF OF PF SF ZF (AF nedefinit)


Shifteaza destinatia la dreapta cu un numar de pozitii dat de "nr".
Diferenta fata de SHR revine din faptul ca lasa neschimbat bitul cel mai
semnificativ (bitul semn). Carry Flag contine ultimul bit shiftat.
Instructiuni de rotire
Instructiunea ROL: Roteste la stinga
Folosire: ROL destinatie, nr
Indicatori modificati: CF OF
Roteste bitii operandului destinatie la stinga de "nr" ori, astfel
incit bitii scosi la stinga sunt reintrodusi in pozitiile din dreapta. CF va
tine ultimul bit shiftat la stinga.
Instructiunea ROR: Roteste la dreapta
Folosire: ROR destinatie, nr
Indicatori modificati: CF OF
Similar cu ROL, dar pentru pozitiile din dreapta.
Instructiunea RCL: Rotire la stinga prin CF
Folosire: RCL destinatie,nr
Indicatori modificati: CF OF
Similar cu ROL, dar fiecare bit shiftat la stinga este pastrat in CF,
si fiecare pozitie libera la dreapta ia valoarea curenta a lui CF.
Instructiunea RCR: Rotire la dreapta prin CF
Folosire: RCR destinatie,nr
Indicatori modificati: CF OF
Similar cu RCL, dar pentru pozitiile din dreapta.

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.
Instructiunile REP/REPE/REPZ/REPNE/REPNZ: Repeta o operatie pe siruri
Aceste instructiuni sunt folosite ca prefixe in operatii cu siruri.
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.
Instructiunile MOVS, MOVSB, MOVSW: Muta elementul curent al unui sir
Folosire:

MOVS
MOVSB
MOVSW

destinatie,sursa

Instructiunea MOVS copie un octet sau un cuvint de la locatia adresata


de DS:SI (chiar daca operanzii sunt specificati) la locatia adresata de ES:DI
si actualizeaza SI si DI functie de lungimea datei copiate, astfel incit sa
adreseze urmatorul element al sirului.
Cu instructiunea MOVSB se specifica transfer explicit pentru un octet
de la DS:SI la ES:DI, iar MOVSW este analog folosita, dar pentru transferuri
de cuvinte.
Aceste mnemonice pot fi folosite cu prefixe de repetare pentru
transferul unor blocuri intregi din memorie.
Instructiunile CMPS, CMPSB, CMPSW: Compara elementele curente a doua siruri
(CoMPare String)
Folosire:
CMPS
destinatie,sursa
CMPSB
CMPSW
Indicatori modificati: AF CF OF PF SF ZF
Compara elementul adresat de ES:DI cu cel adresat de DS:SI (prin
scadere, dar nu modifica operanzii) si actualizeaza indicatorii si registrii
index (ca sa adreseze urmatorul element). Utilizate impreuna cu prefixele de
repetare, pot fi executate pina la implinirea unei anumite conditii.
CMPSB se foloseste pentru compararea a doi octeti, iar CMPSW pentru
compararea a doua cuvinte curent adresate in siruri.
Instructiunile SCAS, SCASB, SCASW: SCAn String

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

Transfera un element al sirului sursa adresat de DS:SI (octet sau


cuvint) in acumulator (in AL pentru octet sau in AX pentru cuvint) si
actualizeaza SI pentru adresarea urmatorului element in sir.
Instructiunile STOS, STOSB, STOSW: STOre String
Folosire:

STOS
STOSB
STOSW

destinatie

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.
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

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.
Instructiunile RET, RETF, RETN
Folosire: RET nrBytes
RETF nBytes
RETN nBytes
Instructiunea RET se afla (tipic) in corpul unei proceduri si
transfera controlul din procedura la instructiunea ce urmeaza instructiunii
CALL ce apeleaza procedura respectiva. Corespunzator celor doua tipuri de
proceduri, NEAR si FAR, asamblorul genereaza doua tipuri de RET:
intrasegment si intersegment respectiv. In cazul unui RET intrasegment,
registrul IP este incarcat cu ceea ce a fost salvat anterior in stiva prin
executia unui CALL (printr-o operatie "pop") astfel incit programul sa poata
relua executia din punctul de dupa apelul procedurii. In cazul unui RET
intersegment, pe linga salvarea (respectiv restaurarea) registrului IP, are loc
operatia similara si pentru registrul CS
Daca nrBytes este specificat, SP este modificat conform operatiei
SP:=SP+numar_octeti, dupa care este restaurat CS (doar daca procedura este FAR)
si apoi IP.
Instructiunea JMP: JuMP
Folosire: JMP eticheta
Transfera controlul la locatia data de "eticheta". Implicit, domeniul
saltului este intre -32768 - 32767 octeti relativ la instructiunea care
urmeaza lui JMP. Salturile NEAR si SHORT cauzeaza actualizarea lui IP, iar
cele FAR actualizeaza CS si IP (fara salvari in stiva).
Instructiuni de salt conditionat
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.
Mnemonica
JA
JAE
JB
JBE
JC
JCXZ
JE
JG
JGE
JL
JLE

Salt daca...

Conditie testata

Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump
Jump

CF=0 and ZF=0


CF=0
CF=1
CF=1 or ZF=1
CF=1
CX=0
ZF=1
ZF=0 and SF=OF
SF=OF
SF != OF
ZF=1 or SF != OF

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.

Instructiuni pentru controlul iteratiilor


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.
Instructiunea LOOP: Decrement CX and Loop if CX Not Zero
Folosire: LOOP eticheta
Decremeteaza CX cu 1; daca CX nu 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 LOOP.
Instructiunile LOOPE/LOOPZ - LOOP while Equal / LOOP while Zero
Folosire:

LOOPE
LOOPZ

eticheta
eticheta

Decremeteaza CX cu 1; daca CX nu este 0 si ZF este 1, 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.
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.
Insructiuni pentru lucrul cu indicatorii de stare si control
Instructiunea CLC - CLear Carry
Folosire:
CLC
Indicatori modificati: CF
In urma acestei instructiuni indicatorul CF (Carry Flag) ia valoarea 0.
Instructiunea CLD - CLear Direction Flag
Folosire:
CLD
Indicatori modificati: DF
In urma acestei instructiuni, indicatorul DF (Direction Flag) ia

valoarea 0 (astfel incit, in orice instructiune cu siruri registri DI si SI


se vor auto-incrementa).
Instructiunea CLI - CLear Interrupt Flag
Folosire:
CLI
Indicatori modificati: IF
Dezactiveaza intreruperile hardware mascabile, prin setarea flagului
IF pe 0. Intreruperile hardware nemascabile si cele software nu sunt
dezactivate.
Instructiunea CMC - CoMplement Carry flag
Folosire:
CMC
Indicatori modificati: CF
Inverseaza valoarea lui CF.
Instructiunea STC - SeT Carry flag
Folosire:
STC
Indicatori modificati: CF
Seeaza CF pe 1.
Instructiunea STD - SeT Direction flag
Folosire:
STD
Indicatori modificati: DF
Seteaza DF pe 1, astfel incit in instructiunile pe siruri DI si SI se
vor auto-decrementa.
Instructiunea STI - Set Interrupt Flag (Enable Interrupts)
Folosire:
STI
Indicatori modificati: IF
Seteaza IF la 1, validind recunoasterea tuturor intreruperilor hardware.

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