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. Amândoi 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 cuvânt, 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 cuvânt).
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 cuvânt, 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 cuvânt). 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 cuvânt (atentie, in acest caz se considera ca de impartit AX cu extensia DX, deci numar pe 32 de biti), câtul este in AX, iar restul in DX.
Observatii:
In cazul in care operandul sursa este un cuvânt, 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 cuvânt) sau daca a fost incercata o impartire cu 0, este generata o intrerupere de tip 0 (impartire la 0), restul si câtul având valori nedefinite.
Instructiunea IDIV: Impartire intreaga cu semn
Folosire: IDIV sursa
Impartire cu semn a acumulatorului cu sursa. Daca operandul sursa este un octet, câtul este plasat in AL, iar restul in AH. Daca operandul sursa este un cuvânt, câtul este in AX, iar restul in DX. Domeniul valorilor
câtului este cuprins intre -127...+127 pentru sursa octet, si -32767...+32767 pentru sursa cuvânt.In cazul in care câtul este pozitiv si depaseste valoarea maxima, ori este negativ si depaseste valoarea minima, se generaza o intrerupere de tip 0, iar restul si câtul au valori nedefinite.
Instructiunea CBW: Convert Byte to Word
Folosire: CBW
Converteste octetul din AL la valoare pe un cuvânt in AX cu extensie de semn.
Instructiunea CWD: Convert Word to Double-word
Folosire: CWD
Extinde semnul cuvântului din AX formind un dublu cuvânt cu partea cea mai semnificativa in DX iar cea mai putin semnificativa in AX.
Niciun comentariu:
Trimiteți un comentariu