Sunteți pe pagina 1din 9

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

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...+32767pentru 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 destinatie,sursa
MOVSB
MOVSW
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 sursa
LODSB
LODSW
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 destinatie
STOSB
STOSW

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 Salt daca... Conditie testata

JA Jump if Above CF=0 and ZF=0


JAE Jump if Above or Equal CF=0
JB Jump if Below CF=1
JBE Jump if Below or Equal CF=1 or ZF=1
JC Jump if Carry CF=1
JCXZ Jump if CX Zero CX=0
JE Jump if Equal ZF=1
JG Jump if Greater (signed) ZF=0 and SF=OF
JGE Jump if Greater or Equal (signed) SF=OF
JL Jump if Less (signed) SF != OF
JLE Jump if Less or Equal (signed) ZF=1 or SF != OF
JNA Jump if Not Above CF=1 or ZF=1
JNAE Jump if Not Above or Equal CF=1
JNB Jump if Not Below CF=0
JNBE Jump if Not Below or Equal CF=0 and ZF=0
JNC Jump if Not Carry CF=0
JNE Jump if Not Equal ZF=0
JNG Jump if Not Greater (signed) ZF=1 or SF != OF
JNGE Jump if Not Greater or Equal (signed) SF != OF
JNL Jump if Not Less (signed) SF=OF
JNLE Jump if Not Less or Equal (signed) ZF=0 and SF=OF
JNO Jump if Not Overflow (signed) OF=0
JNP Jump if No Parity PF=0
JNS Jump if Not Signed (signed) SF=0
JNZ Jump if Not Zero ZF=0
JO Jump if Overflow (signed) OF=1
JP Jump if Parity PF=1
JPE Jump if Parity Even PF=1
JPO Jump if Parity Odd PF=0
JS Jump if Signed (signed) SF=1
JZ Jump if Zero 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 eticheta
LOOPZ 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 fla


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