peperonity Mobile Community
Welcome, guest. You are not logged in.
Log in or join for free!
 
Stay logged in
Forgot login details?

Login
Stay logged in

For free!
Get started!

Aritmetins komandos | sypsniux



Aritmetins komandos
5.2. Aritmetins komandos

ADD – sudtis
1. registras + registras / atmintis
0000 00dw mod reg r/m [poslinkis]

2. registras / atmintis + betarpi?kas operandas
1000 00sw mod 000 r/m [poslinkis] bet.op.j.b. [bet.op.v.b]

Jeigu s:w = 01, tada betarpi?kas operandas yra imamas i? 16 komandos bit.

Jeigu s:w = 11, tada betarpi?kas operandas yra imamas i? 8 komandos bit ir
i?pleiamas iki 16 bit pagal ?enklo pltimo taisykl: jeigu vyriausiame bite buvo 1,
tada i?pleiame vienetais, o jeigu vyriausiame bite buvo 0, tada i?pleiame nuliais.

Jeigu w = 0, tai s gali bti lygu 0 arba 1 – betarpi?kas operandas bus vieno baito.

3. akumuliatorius + betarpi?kas operandas
0000 010w bet.op.j.b [bet.op.v.b., jei w = 1]


ADC – ADd with Carry – sudtis, skaitant perne?imo bit CF.
Komanda yra analogi?ka komandai ADD, tik papildomai pridedamas CF:
operandas1 + operandas2 + CF

1. registras + registras / atmintis
0001 00dw mod reg r/m [poslinkis]

2. registras / atmintis + betarpi?kas operandas
1000 00sw mod 010 r/m [poslinkis] bet.op.j.b. [bet.op.v.b]

69

Jeigu s:w = 01, tada betarpi?kas operandas yra imamas i? 16 komandos bit.

Jeigu s:w = 11, tada betarpi?kas operandas yra imamas i? 8 komandos bit ir
i?pleiamas iki 16 bit pagal ?enklo pltimo taisykl: jeigu vyriausiame bite buvo 1,
tada i?pleiame vienetais, o jeigu vyriausiame bite buvo 0, tada i?pleiame nuliais.

Jeigu w = 0, tai s gali bti lygu 0 arba 1 – betarpi?kas operandas bus vieno baito.

3. akumuliatorius + betarpi?kas operandas
0001 010w bet.op.j.b [bet.op.v.b., jei w = 1]


INC – INCrement – didinimas vienetu.
1. registras / atmintis
1111 111w mod 000 r/m [poslinkis]

2. registras
01000 reg

?ia komanda inkrementuojami tik ?odiniai registrai.


SUB – SUBtract – atimtis.
1. registras / atmintis ~ registras
Abu operandai gali bti pirmu arba antru operandu. Rezultatas u?ra?omas pirmj.
0010 10dw mod reg r/m [poslinkis]

Nors atimt realizuoja sudtis su prie?ingu ?enklu, bet interpretuojamo lygio komand
kodai turi skirtis, tam kad komanda sudaryt antr operand papildomu kodu, ir tada
pritaikyt aparatrin sudties veiksm.

2. registras / atmintis - betarpi?kas operandas
1000 00sw mod 101 r/m [poslinkis] bet.op.j.b. [bet.op.v.b]

Jeigu s:w = 01, tada betarpi?kas operandas yra imamas i? 16 komandos bit.

Jeigu s:w = 11, tada betarpi?kas operandas yra imamas i? 8 komandos bit ir
i?pleiamas iki 16 bit pagal ?enklo pltimo taisykl: jeigu vyriausiame bite buvo 1,
tada i?pleiame vienetais, o jeigu vyriausiame bite buvo 0, tada i?pleiame nuliais.

Jeigu w = 0, tai s gali bti lygu 0 arba 1 – betarpi?kas operandas bus vieno baito.

3. akumuliatorius - betarpi?kas operandas
0010 110w bet.op.j.b. [bet.op.v.b.,w = 1]


SBB – SuBtraction with Borrow – atimtis su pasiskolinimu
Komanda yra analogi?ka komandai SUB, tik papildomai atimamas CF:
operandas1 - operandas2 –
CF

70

1. registras / atmintis ~ registras
Abu operandai gali bti pirmu arba antru operandu. Rezultatas u?ra?omas pirmj.
0001 10dw mod reg r/m [poslinkis]

2. registras / atmintis - betarpi?kas operandas
1000 00sw mod 011 r/m [poslinkis] bet.op.j.b. [bet.op.v.b]

Jeigu s:w = 01, tada betarpi?kas operandas yra imamas i? 16 komandos bit.

Jeigu s:w = 11, tada betarpi?kas operandas yra imamas i? 8 komandos bit ir
i?pleiamas iki 16 bit pagal ?enklo pltimo taisykl: jeigu vyriausiame bite buvo 1,
tada i?pleiame vienetais, o jeigu vyriausiame bite buvo 0, tada i?pleiame nuliais.

Jeigu w = 0, tai s gali bti lygu 0 arba 1 – betarpi?kas operandas bus vieno baito.


3. akumuliatorius - betarpi?kas operandas
0001 110w bet.op.j.b. [bet.op.v.b., w = 1]


DEC – DECrement – suma?inimas vienetu.
1. registras / atmintis
1111 111w mod 001 r/m [poslinkis]

2. registras
01001 reg

?ia komanda dekrementuojami tik ?odiniai registrai.


CMP – CoMPare – palyginimas.
Komanda naudojama po?ymi formavimui, veikia pana?iai kaip ir komanda SUB,
taiau nesimena rezultato.

Po?ymi formavimas:


Jeigu operandai yra skaiiai be ?enklo:


OF SF ZF CF
op.1 > op.2 N N 0 0
op.1 = op.2 N N 1 0
op.1 < op.2 N N 0 1

op. – operandas;
N – nesvarbu.

Jeigu operandai yra skaiiai su ?enklu:


71


KOMPIUTERI ARCHITEKTRA


OF SF ZF CF
op.1 > op.2 0 / 1 0 / 1 0 N
op.1 = op.2 0 0 1 N
op.1 < op.2 0 / 1 0 / 1 0 N


op. – operandas;
N – nesvarbu.
0 / 1 – 0 arba 1, priklausomai, nuo konkrei lyginam reik?mi.



Skaii su ?enklu palyginimas, diapazone -128 – 127 :


SF OF
0 < A – B <= 127 0 0
A – B > 127 1 1
-128 <= A – B < 0 1 0
A – B < -128 0 1


Taigi A > B, kai : 1. OF = 0; SF = 0 ,t.y., kai OF lygu SF
2. OF = 1; SF = 1

A < B, kai : 1. OF = 1; SF = 0 ,t.y., kai OF nelygu SF
2. OF = 0; SF = 1

Algoritmas po?ymiui OF nustatyti:


jeigu sudties operacijos at?vilgiu operand ?enklo bitai skiriasi arba operand ir
rezultato ?enklo bitai yra vienodi, tai OF = 0;
jeigu operand ?enklo bitai yra vienodi, bet rezultato ?enklo bitas skiriasi, tai OF = 1.


Pavyzd?iai:


1. 10 - 5
(10)
= (1010)
10 2
(5) = (101) , 0000 0101
10 2


1111 1010
+

1
1111 1011 = (-5)
10

0000 1010
+

1111 1011
10000 0101 OF = 0, SF = 0


72

2. 100 - (-101)
= (1100100)
(100)
10 2
(101) = (1100101)
10 2


0110 0100
+

0110 0101
1100 1001 OF = 1, SF = 1



3. -3 - (7)
(3)
= (11) 0000 0011
10 2,


1111 1100
+

1
1111 1101 = (-3)
10

= (111) 0000 0111
(7)
10 2,


1111 1000
+

1
1111 1001 = (-7)
10

1111 1101
+

1111 1001
11111 0110 OF = 0, SF = 1

4. -101 - (100)
(101)
= (1100101) 0110 0101
10 2


1001 1010
+

1
1001 1011 = (-101)
10


(100)
= (110010) 0110 0100
10 2


1001 1011
+

1
1001 1100 = (-100)
10


1001 1011
+

1001 1100
10011 0111 OF = 1, SF = 0


1. registras / atmintis ~ registras
Abu operandai gali bti pirmu arba antru operandu.
0011 10dw mod reg r/m [poslinkis]




73


KOMPIUTERI ARCHITEKTRA

2. registras / atmintis - betarpi?kas operandas
1000 00sw mod 111 r/m [poslinkis] bet.op.j.b. [bet.op.v.b.]

Jeigu s:w = 01, tada betarpi?kas operandas yra imamas i? 16 komandos bit.

Jeigu s:w = 11, tada betarpi?kas operandas yra imamas i? 8 komandos bit ir
i?pleiamas iki 16 bit pagal ?enklo pltimo taisykl: jeigu vyriausiame bite buvo 1,
tada i?pleiame vienetais, o jeigu vyriausiame bite buvo 0, tada i?pleiame nuliais.

Jeigu w = 0, tai s gali bti lygu 0 arba 1 – betarpi?kas operandas bus vieno baito.

3. akumuliatorius - betarpi?kas operandas
0011 110w bet.op.j.b. [bet.op.v.b., w = 1]


MUL – MULtiply – skaii be ?enklo daugyba
1111 011w mod 100 r/m [poslinkis]

Jeigu dauginami baitai, tai:
registre AL esanti reik?m · operandas 2 registras AX

Jeigu dauginami ?od?iai, tai:
registre AX esanti reik?m · operandas 2 registrai [DX, AX]

Jeigu daugybos ruzultato vyresnioji pus yra nulin, tada CF = 0 ir OF = 0, prie?ingu
atveju CF = 1 ir OF = 1.


IMUL – Integer MULtiply – skaii su ?enklu daugyba
1111 011w mod 101 r/m [poslinkis]

Jeigu dauginami baitai, tai:
registre AL esanti reik?m · operandas 2 registras AX

Jeigu dauginami ?od?iai, tai:
registre AX esanti reik?m · operandas 2 registrai [DX, AX]

Jeigu daugybos rezultato vyresniosios puss kiekvieno bito reik?m lygi jaunesniosios
puss vyriausiam bitui, t.y., daugybos rezultato vyresnioji pus yra tik jaunesniosios
puss ?enklo i?pltimas, tada rezultatas tilpo jaunesniojoje pusje, todl CF = 0 bei
OF = 0. Prie?ingu atveju, CF = 1 ir OF = 1.

DIV – DIVide – skaii be ?enklo dalyba.
1111 011w mod 110 r/m [poslinkis]

Jeigu w = 0, tada daliklis yra baitas, ir:
registre AX esanti reik?m : operandas 2 dalmuo registre AL liekana registre AH


Jeigu w = 1, tada daliklis yra ?odis, ir:

74

dalmuo registre AX
registruose[DX, AX] esanti reik?m : operandas 2
liekana registre DX

Jeigu dalmuo netelpa registre AL (kai w = 0) arba AX (kai w = 1), tada generuojamas
pertraukimas – dalyba i? nulio.


IDIV – Integer DIVide – skaii su ?enklu dalyba.
1111 011w mod 111 r/m [poslinkis]

Jeigu w = 0, tada daliklis yra baitas, ir:
registre AX esanti reik?m : operandas 2 dalmuo registre AL
liekana registre AH

Jeigu w = 1, tada daliklis yra ?odis, ir:
registruose[DX, AX] esanti reik?m : operandas 2 dalmuo registre AX
liekana registre DX

Dalybos i? nulio pertraukimas kyla tada, kai dalmuo-baitas netelpa diapazone: -128 –
127 , arba dalmuo-?odis netelpa diapazone: -32768 – 32767.


NEG – NEGative – ?enklo keitimas
1111 011w mod 011 r/m [poslinkis]

Rezultatas yra analogi?kas rezultatui, kur gautume atlik tok veiksm:
0 - operandas operandas

Fakti?kai, ...
Next part ►


This page:





Help/FAQ | Terms | Imprint
Home People Pictures Videos Sites Blogs Chat
Top