Welcome, guest. You are not logged in.
Language / Choose language
 
Username Password  
Today: What you want? · More of this
    Search
 

   

Koprocesorius Intel 8087
6. Koprocesorius Intel 8087

Koprocesorius yra skirtas mikroprocesoriaus Intel 8088 galimybi i?pltimui:
arimetini veiksm su slankiu kableliu atlikimui. Koprocesorius yra pavaldus
mikroprocesoriui ir paiame mikroprocesoriuje Intel 8088 yra atsi?velgta
koprocesoriaus buvimo galimyb per ESC komand.

Koprocesorius stebi mikroprocesoriaus imamas i? atminties vykdymui komandas ir,
jeigu eilin komanda yra koprocesoriaus komanda, tai jis j vykdo lygiagreiai
mikroprocesoriaus darbui. Tokiu bdu realiai gaunamas lygiagretus programos
vykdymas.

Kadangi vyksta lygiagretus darbas, yra btina ?io darbo sinchronizacija. Tuo tikslu
mikroprocesoriuje Intel 8088 naudojama komanda WAIT. Komanda WAIT pristabdo
mikroprocesoriaus darb, tol kol signalas TEST tampa aktyviu. Signalas TEST tampa
aktyviu, kai koprocesorius baigia vykdyti komand. Tokiu bdu galima garantuoti,
kad mikroprocesorius prats savo darb tik po to, kai koprocesorius baigs komandos vykdym.

Mikroprocesorius ir koprocesorius yra susieti tik i?ori?kai. Mikroprocesorius negali
kreiptis koprocesoriaus registrus ir atvirk?iai. Duomenimis abu procesoriai
apsikeiia tik per atmint, prie kurios jie abu turi prijim. Taiau atminties
adresavimo registrai yra tiktai mikroprocesoriuje Intel 8088, todl koprocesorius
operand atmintyje adresavimui naudojasi mikroprocesoriaus paslaugomis per
komand ESC. Sistemoje be koprocesoriaus komanda ESC yra analogi?ka komandai
NOP, taiau yra ilgiau vykdoma.

ESC komandos turi adresin informacij
, kuri saugoma adresavimo baite, su poslinkiu
arba be jo. Nors mikroprocesorius komandos ESC nevykdo ir traktuoja j kaip NOP,
taiau apskaiiuoja vykdomj adres ir kreipiasi atmint duomen skaitymui ir
ra?ymui. Jeigu adresavimo baitas nusako ne atmint, o registr, tai kreipimasis
atmint nevyksta.

Koprocesorius, pastebjs komandos ESC i? atminties pamim, toliau stebi, kada
mikroprocesorius ims i? atminties duomenis, ir duomen adresui atsidrus sisteminje
magistralje, koprocesorius j perima ir taip ?ino, kur yra atmintyje jam reikalingi
duomenys. Taigi mikroproesorius apskaiiuoja operando atmintyje adres, o
koprocesorius atlieka likusi komandos dal.

Koprocesorius nepakeiia nei vienos Intel 8088 komandos, o tiktai papildo komand
sistem nauj tip aritmetinmis operacijomis. Tokiu bdu koprocesoriaus
programavimas yra komand ESC sudarymas ir, jeigu mikroprocesoriui reikalingas
koprocesoriaus rezultatas, komandos WAIT naudojimas veiksm sinchronizavimui.

Koprocesorius turi i?plstin artimetini duomen tip rinkin, su kuriais yra
atliekamos aritmetin
s operacijos.


99


KOMPIUTERI ARCHITEKTRA

Mikroprocesorius atlieka veiksmus su baitais arba ?od?iais, traktuodamas skaiius
kaip skaiius su ?enklu arba be ?enklo, taip pat turi de?imtainius supakuotus ir
i?pakuotus skaiius.

Koprocesorius turi septynis duomen tipus, i? kuri ?e?i yra bdingi tik koprocesoriui,
t.y., j nra mikroprocesoriuje. Keturi koprocesoriaus duomen formatai yra skirti
darbui su sveikais skaiiais, vienas i? j yra i?plstinis de?imtainis formatas. Lik trys
formatai skirti veiksm su realiais skaiiais atlikimui.

6.1. Koprocesoriaus duomen formatai


1. Sveikas ?odis, dvejetainiu papildomu kodu.

s ...

15 1 0

2 baitai
?enklo bitas

2. Sveikas trumpas, dvejetainiu papildomu kodu.

s ...

31 30 1 0

4 baitai
?enklo bitas

3. Sveikas ilgas, dvejetainiu papildomu kodu.


s ... ...

63 62 1 0

8 baitai
?enklo bitas

4. Supakuotas de?imtainis i?plstas.
Vienas de?imtainis skaitmuo u?ima keturis bitus.

s x d ... d d d
16 017 1


79 72 10

10 bait
?enklo bitas
d
– de?imtainis skaitmuo;
i
s – jeigu s = 0, tai skaiius teigiamas, jeigu s = 1, tai skaiius neigiamas;
x – bitai, neturintys takos.

100

Ra?ant supakuoto de?imtainio i?plsto formato duomenis i? atminties koprocesoriaus
registr, bitai x yra neapibr?ti, o u?ra?ant toki reik?m i? registro atmint, x bitai
yra nuliniai.
A?tuoniolika de?imtaini skaitmen u?ima devynis baitus, dar vienas baitas yra
?enklo baitas (jis reikalingas ?enklo bitui), todl i? viso reikia de?imties bait.

5. Trumpas realus
8 bitai


s charakteristika mantis


31 23 0

4 baitai
?enklo bitas

Kiekvien skaii z galima i?reik?ti tokia forma:
s eil
z = (-1)
· 2 · 0, mantis , arba :
s eil
z = (-1)
· 2 · 1, mantis ;
s abiejose formose yra ?enklo bito reik?m.

Dauguma kit procesori naudoja pirmj form, kurioje naudojama 0, mantis ,
taiau Intel procesoriai naudoja antrj form: 1, mantis .

Eils diapazonas yra -127 – 127 (reik?m -128 naudojama specialioms reikmms).
Charakteristika yra „pastumta“ eil: charakteristika = eil + 7Fh , (7Fh = 127
).
10
Charakteristikos diapazonas yra 0 – 254. Procesorius naudoja charakteristik – skaii
be ?enklo, o ne eil, tam kad bt galima efektyviau atlikti skaii lyginim: lyginant
du realius skaiius u?tenka juos per?irti i? kairs de?in, ir taip efektyviai su?inoti,
kurio charakteristika yra didesn. Jeigu vieno skaiiaus charakteristika yra didesn, tai
jis akivaizd?iai yra didesnis; jeigu charakteristikos lygios, tai tikrinami i? kairs
de?in mantiss bitai. Eil, tuo tarpu, yra skaiius su ?enklu, ir lyginimas, naudojant
j, bt ma?iau efektyvus.

Normalizuotame skaiiuje mantiss sveikas skaitmuo Intel procesoriuje yra 1, todl
nereikia jo saugoti; atliekant skaiiavimus, tas 1 yra turimas „omenyje“. ?iame
formate mantis sudaro 23 dvejetainiai skaitmenys. Mantis yra trupmenin realaus
skaiiaus dalis, t.y., kablelis yra kairiau mantiss.

Atmintyje gali bti saugomi tik normalizuoti skaiiai, t.y., pavidalo:
s char - 127
(-1)
· 2 · 1, mantis

0 0 00000 000
Skaiius 0 yra i?imtinis atvejis. Nulinis skaiius yra:

31 23 0
0 -127 -127
Taiau pagal trumpo realaus format tai yra (-1) · 2 · 1,0 = 2 .
0 -127
Todl ma?iausias ?io formato skaiius yra (-1)
· 2 · 1,00..01.

23 skaitmenys



101


KOMPIUTERI ARCHITEKTRA

Taigi ma?iausias galimas formato skaiius yra:
0 0 00000 001

31 23 0
6. Ilgas realus.
11 bit


s charakteristika mantis


63 52 0

8 baitai
?enklo bitas

Mantis sudaro 52 dvejetainiai skaitmenys. Mantis yra trupmenin realaus skaiiaus
dalis, t.y., kablelis yra kairiau mantiss.
Charakteristika yra eil, perstumta per 3FFh, t.y., eil = charakteristika – 3FFh, o
chrakteristika = eil + 3FFh , (3FFh = 1023
)
10


7. Vidinis realus
15 bit


s charakteristika I mantis


79 64 63

10 bait
?enklo bitas

Laikinas realus formatas yra skirtas saugoti reik?mms, kurioms reikia dar didesnio
tikslumo, negu gali u?tikrinti ilgas realus formatas. Didesnis tikslumas pasiekiamas
turint galimyb keisti mantiss sveik skaii, kuris dabar jau nebtinai yra 1 pagal
nutyljim, bet gali bti ir 0. Sveikas mantiss skaiius yra saugomas bite I . Taiau
tokios reik?ms nra normalizuotos, t.y., yra denoramlizuotos, todl jos negali bti
saugomos atmintyje, o tik koprocesoriaus registruose.

Charakteristika yra eil, perstumta per 3FFFh = 16383
, t.y., eil = charakteristika –
10
3FFFh, o charakteristika = eil + 3FFFh .

63-ias bitas I yra skirtas mantiss sveiko bito saugojimui, o kablelis suprantamas kaip
esantis tarp 63-io bito ir prie? 62- bit. Kaip ir mikroprocesoriaus atveju, taip ir
koprocesoriaus atveju, atmintyje operando duomenys saugomi taip, kad ma?esni
adres dalyje yra ma?esns bit reik?ms. ?enklo bitas visada yra operando lauke su
vyriausio baito adresu.




102

Sveiko ?od?io formatas yra identi?kas mikroprocesoriaus formatui: ?odiniam formatui
su ?enklu, ir yra apibr?iamas programoje operatoriumi DW (Define Word). Tokio
formato diapazonas yra -32768 – 32767.

Sveik trump format apibr?ia operatorius DD (Define Double Word). Jo reik?ms
31 31
yra keturi bait lauke, diapazone: -2
– 2 -1 . DD pagalba galima apibr?ti por:
segmentas : poslinkis .

Jeigu operandas yra adresas, tai pagal operatori DD asembleris sukuria por
segmentas : poslinkis. Jeigu operandas yra reik?m, tai operandas yra trumpo sveiko
formatas.

Skaii sveiko ilgo (keturgubas ?odis) formato apibr?imui naudojamas operatorius
63 63
DQ (Define Quadruple). Tokio formato skaii diapazonas yra -2
– 2 -1.
Operatorius DQ gali apibr?ti konstant .

Operatoriais DB (Define Byte), DW (Define Word), DD (Define Double word), DQ
(Define Quadruple) galima rezervuoti atitinkamo dyd?io laukus, asembleriu po j
nurod?ius ?. Panaudojus dar ir operatori DUP (DUPlicate), laukai yra dublikuojami.

Skaii supakuotas de?imtainis i?plstinis formatas yra analogi?kas
mikroprocesoriaus supakuotam de?imtainiui formatui, tik veiksmai i? karto atliekami
su a?tuoniolika skaitmen devyniuose baituose, o de?imtas baitas skirtas ?enklo bitui.

De?imtainio formato laukas apibr?iamas operatoriumi DT (Define Ten), toks laukas
u?ima 10 bait. Operuojant supakuotom de?imtainm reik?mm asembleriu, reikia jas
nurodyti ?e?ioliktaine sistema. Jeigu operatoriaus DT operando lauke bus para?ytas
de?imtainis skaiius, tai jis bus paverstas dvejetainiu skaiiumi, o ne supakuotu
de?imtainiu skaiiumi.

Kadangi teigiami de?imtainiai supakuoti skaiiai vizualiai nesiskiria nuo
?e?ioliktaini, pakanka po tokio skaiiaus prira?yti h .U?ra?ant neigiam de?imtainio
supakuoto formato skaii, prie? j reikia para?yti 80 ir ?irti, kad bendras skaitmen
skaiius bt dvide?imt, o gale turi bti h. Pavyzd?iui, -1234 yra u?ra?omas taip:
DT 80 000 00000 00000 01234h

6.2. Koprocesoriaus duomen format vaizdavimas


Trumpas realus formatas (32 bitai) ir ilgas realus formatas (64 bitai) atitinka reali
skaii vaizdavimo standart.

Trumpo realaus formate a?tuoni bitai yra skiriami eilei. Eils diapazonas bt -128 –
127, taiau eils reik?m -128 yra rezervuota neapibr?tai reik?mei fiksuoti ir todl
yra negalima. Todl realiai eils diapazonas yra -127 – 127. Eil yra saugoma
padidinta per 127, ir tada yra vadinama charakteristika. Charakteristika nra skaiius
papildomu kodu, kur didesnis diapazonas rei?kia neigiam skaii kodavim



103


KOMPIUTERI ARCHITEKTRA

Pavyzd?iui:
Eil Charakteristika
-127 0
-1 07Eh
0 7Fh
1 080h
127 0FEh


Btent toks eils saugojimas yra susijs su efektyvesniu skaii lyginimu: didesnis
skaiius turi didesn charakteristikos lauko reik?m. Jeigu charakteristikos yra lygios,
tai skaiiai palyginami pagal mantis. Bet kokiu atveju, skaii lyginimas pabiiui i?
kairs de?in, pradjus nuo vyriausio bito, leid?ia nustatyti, kuris skaiius yra
didesnis.

Dvide?imt trijuose mantiss bituose did?iausia reik?m, kuri galima saugoti yra:
23
111...111 < 2
= 8 M 8 000 000
||
23 10000..00

23

Todl dvide?imt trijuose mantiss bituose galima saugoti skaii, tikslumu ?e?i –
septyni de?imtaini skaitmen (visus ?e?ia?enklius skaiius ir dal septynia?enkli) .
-38 38
Skaii diapazonas yra slygojamas charakteristikos ir yra 10
– 10 .

Pats vyriausias bitas nurodo skaiiaus ?enkl, o kitas, po jo esantis bitas, nurodo eils
?enkl.

Dvigubo tikslumo realaus skaiiaus formatas i? a?tuoni bait mantisei skiria 52
bitus. Tai atitinka penkiolikos – ?e?iolikos de?imtaini skaitmen tikslum.
-1023 1023
Vienuolikos bit eils laukas slygoja eils diapazon: 2
- 2 . De?imtainje
-307 307
formoje tai atitinka diapazon: 10
– 10 .

Koprocesorius realius skaiius atmintyje visada saugo normalizuotu pavidalu, t.y.,
sveikas mantiss skaiius yra 1, todl tokiu atveju j saugoti nra prasms. Atliekant
skaiiavimus jis, ?inoma, yra „turimas omenyje“, taiau atmintyje nra saugomas.
Taigi realiai mantiss vyriausiasis bitas yra sveikas ir nra saugomas, o saugomi bitai
yra po kablelio (po sveiko bito).

Pirmi ?e?i duomen formatai (sveikas ?odis, sveikas trumpas, sveikas ilgas,
supakuotas de?imtainis i?plstas, trumpas realus, ilgas realus) yra i?oriniai
koprocesoriaus at?vilgiu, t.y., simindamas duomenis atmintyje, koprocesorius juos simena vienu i? t ?e?i format, taip pat ir skaityti i? atminties gali vienu i? ?i ?e?i
format. Paiame procesoriuje vis ?e?i format duomenys saugomi koprocesoriaus
vidiniu formatu. Taigi pirmi ?e?i formatai naudojami tik duomen saugojimui, bet ne
operavimui jais koprocesoriuje.


104

Vidinis realus duomen formatas turi did?iausi tikslum (mantis) ir did?iausi
diapazon (eil). Jis fiksuojamas de?imtyje bait. ?e?iasde?imt keturi bit mantis
slygoja galim devyniolikos de?imtaini skaitmen tikslum. Paprastai mantis yra
normalizuota, bet gali bti ir denoramlizuota, todl vyriausia mantiss bitas – sveikas
mantiss skaiius, yra saugomas ?itame formate. Penkiolikos bit eil slygoja
-16383 16383 -4932 4932
diapazon: 2
- 2 , t.y., 10 – 10 .

Kadangi reik?m vidiniu formatu gali bti denormalizuota, tai kairioji diapazono riba
64
gali pasislinkti kair per 2
, taiau tikslumo mantisje sskaita.

Asembleriu galima apibr?ti keturi, a?tuoni ir de?imties bait laukus, naudojantis
operatoriais DD, DQ ir DT. Atmintyje koprocesoriaus duomenys vairiais formatais
vaizduojami tokiu bdu:
1. Sveikas ?odis.
7 0

+0

+1
s

15 8

2. Trumpas sveikas.
7 0

+0

+1

+2


+3
s

31 24


3. Ilgas sveikas.
7 0

+0

+1


+2

+3

+4

+5


+6

+7
s

63 56

4. Supakuotas de?imtainis.
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9
7
d d d d d d d d d s
1 3 5 7 9 11 13 15 17

d d d d d d d d d x
0 2 4 6 8 10 12 14 16
0

105


KOMPIUTERI ARCHITEKTRA






5. Trumpas realus.
7 0

+0
mantis
+1

eil
23 22
+2

+3
s

31 24

6. Ilgas realus.
charakteristika

+0 +1 +2 +3 +4 +5 +6 +7
s 55 7 15 23 31 39 47

62


51



0 8 16 24 32 40
56
48


mantis


6. Vidinis realus.
charakteristika

+0 +1 +2 +3 +4 +5 +6 +7 +8 +9
63 I s 7 15 23 31 39 47 55 71

62 78






0 8 16 24 32 40 48 64
72
56


mantis









106

6.3. Koprocesoriaus architektra


79 78 64 63 0
0 1
?enklas Eil Mantis












Duomen stekas Po?ymis


15 0

Valdantysis registras


Bsenos registras

Komandos skaitliukas


Duomen skaitliukas

19 0

Koprocesorius turi keturis specialius registrus ir a?tuoni registr stek aritmetiniams
duomenims saugoti. Steko elementas turi 80 bit ir atitinka vidin koprocesoriaus
format. Duomenys, esantys bet kuriame i? ?e?i i?orini format, yra atvaizduojami
vidiniu formatu.

Steke registrai neturi nuosav, fiksuot numeri. Jie yra numeruoti steko vir?ns
at?vilgiu, kuri, dirbant su steku, kinta. Ra?oma visada steko vir?n. Prie? ra?ant,
steko vir?n yra padidinama. I?stumiant i? steko, steko rodykl yra suma?inama.

Pastebjimas.
Sveikojo formato duomenys yra atvaizduojami real vidin format.

Po?ymi registras fiksuoja, kurie i? steko element yra laisvi, kurie yra u?imti, o
bandant patalpinti duomenis u?imt steko element, fiksuojama ypatinga situacija –
nepriimtina komanda.

Koprocesoriuje yra skaitymo ir ra?ymo komandos. Duomenys yra patalpinami steko
vir?n – registr, skaitant i? atminties registr, ir i? steko vir?ns u?ra?omi i?
registro atmint, tuo paiu atliekant transformacijas tarp format.


107


KOMPIUTERI ARCHITEKTRA

Skaiiuojamosios (aritmetins) komandos gali atlikti veiksmus su operandais
registrais arba su registru ir atmintimi. Vienas i? operand btinai turi bti steko
vir?n. atmint rezultatas gali bti u?ra?omas atskira ra?ymo komanda.




Valdantysis ?odis


Valdantysis registras dar yra vadinamas valdaniuoju ?od?iu.

Koprocesorius turi du 16 bit registrus: valdantj ir bsenos. Valdantysis registras
reikalingas valdaniojo ?od?io saugojimui, bsenos registras – bsenos ?od?io
saugojimui. Valdantysis registras leid?ia programuotojui nustatyti koprocesoriaus
darbo re?imus.

Sutrumpinimuose raid M rei?kia Mask – maskavim. Jeigu atitinkamas maskavimo
bitas yra 0, tai pertraukimai leid?iami, o jei maskavimo bitas yra 1, tai pertraukimai
yra draud?iami.

Illegal Mask – nepriimtinos operacijos maskavimas

IM

Denormalization Mask – operando denormalizacijos maskavimas
1 DM

Zero Mask – dalybos i? nulio maskavimas
2 ZM

Overflow Mask – perpildymo maskavimas

3 OM

Underflow Mask – reik?mingumo i?nykimo (eils praradimo) maskavimas
4 UM

Precision Mask – tikslumo maskavimas
5 PM

nenaudojama
6


Interrupt Enable Mask – pertraukim maskavimas
7 IEM

Precision Control -
8
PC

tikslumo valdymas
9

Round Control
v
10
RC

apvalinimo valdymas
11

Infinity Control – begalybs valdymas
12
IC


13

nenaudojama
14

15



PC – tikslumo valdymas:
00 24 bitai
01 rezervuota
10 53 bitai
11 64 bitai

108

RC – apvalinimo valdymas:
00 iki artimiausio lyginio
01 apvalinimas ?emyn
10 apvalinimas auk?tyn
11 nukirtimas link nulio


IC – begalybs valdymas:
0 projektyvin
1 afinin


Koprocesorius gali fiksuoti ypatingas situacijas ir pagal jas generuoti pertraukim.
Valdaniuoju ?od?iu programuotojas gali valdyti, kokias situacijas apdoroti
aparatriniu pertraukimu nuo procesoriaus 8087 ir kokias situacijas analizuoti
programi?kai, analizuojant gaut rezultat.

Koprocesorius yra prijungtas prie NMI su kodu 2, kaip ir pertraukimas nuo atminties
kontrols schem pagal lyginim. Todl tokio pertraukimo apdorojimo programa turi
mokti sureaguoti abu pertraukim ?altinius.

Eils reik?m -128 yra rezervuota kitoms reikmms, ir yra vadinama NAN – Not A
Number – neapibr?ta reik?m.

Apvalinimo valdymas
(Round Control) – naudojamas reik?ms perrinkimui, kai
nepakanka tokio tikslumo, kok leid?ia naudojamas formatas. Galimi pasirinkimai
yra:
1. Kitas didesnis.
2. Kitas ma?esnis.
3. Apvalinimas nulio kryptimi.
4. Apvalinimas iki artimiausio lyginio.

Perpildymas
(Overflow Mask) – tai steko perpildymas.

Tikslumo valdymas
(Precision Control) yra naudojamas pilno tikslumo – 64 bit (10
bait, 64 bitai mantis) apribojimui iki 53 bit (8 baitai, 53 bitai mantis) arba 24 bit
(4 baitai, 24 baitai mantis) tam, kad galtume dirbti suderinamumo re?ime su
anksiau sudarytomis procedromis ma?inoms su ma?esniu tikslumu – pagal
standart 32 slankus (4 baitai) ir 64 slankus (8 baitai).

Tikslumo maskavimas
(Precision mask) – tai tikslumo praradimo maskavimas.

Begalybs valdymas
(Infinity Control) – juo nustatoma, ar skirtingoms reik?mms
fiksuoti + ir - . Pagal nutyljim yra projektyvin begalyb, kai + ir -
nesiskiria. Afinin begalyb yra, kai + ir - skiriasi.



109


KOMPIUTERI ARCHITEKTRA



Bsenos ?odis

Bsenos registras yra dar vadinamas bsenos ?od?iu.

Bsenos ?odis saugo einamj koprocesoriaus bsen.

Illegal Exeption – neegzistuojanti komanda

0 IE

Denormalization Exeption – denormalizuotas operandas
1 DE

Zero Exeption – dalyba i? nulio
2 ZE

Overflow Exeption – perpildymas

3 OE

Underflow Exeption – reik?mingumo i?nykimas (eils praradimas)
4 UE

Precision Exeption – tikslumas
5 PE

nenaudojama
6


Interrupt Request – pertraukim reikalavimas
7 IR

8 C0

Slygos kodai
9 C1

v
10
C2

11


ST
STack – steko rodykl
12


13

Slygos kodas
14
C3

u?imtas
15
B



Bsenos ?odyje esantys bitai parodo ypating situacij, kilusi komandos vykdymo
metu. Todl, kilus pertraukimui nuo koprocesoriaus, kuris yra bendras visoms
situacijoms koprocesoriuje, pagal bsenos ?od pertraukimo apdorojimo programa
gali nustatyti pertraukimo prie?ast.

Bsenos ?odyje yra bitas B, kuris parodo, ar koprocesorius yra u?imtas ar laisvas, t.y.,
jis vykdo komand ar ne. Bito B reik?m yra lygi i?orinio signalo TEST reik?mei,
pagal kuri sinchronizuojamas darbas su mikroprocesoriumi. Jeigu TEST = 1, tai
mikroprocesorius laukia, o jeigu TEST = 0, tai mikroprocesorius imasi vykdyti kit
komand.

Bsenos ?odis turi koprocesoriaus steko rodykl, kuri kinta diapazone 000 – 111.

Da?niausiai naudojama bsenos ?od?io dalis yra slygos kodas. Slygos kodo keturis
bitus galima nustatyti koprocesoriaus komandos. Du i? ?i bit tiesiogiai atitinka
mikroprocesoriaus po?ymi registro SF po?ymius CF ir ZF. Tie po?ymiai yra
i?dstyti tose paiose pozicijose – bituose, kaip ir registro SF jaunesniojo baito
po?ymiai CF ir ZF, t.y.:


110

CF (nulinis bitas) C0
ZF (?e?tas bitas) C3

Tokio i?dstymo patogumas yra tas, kad u?ra?ius bsenos ?od atmint, o vliau
patalpinus vyresnj bait registr AH, i? kurio komandos SAHF pagalba galima
suformuoti registro SF jaunesnj bait su po?ymiais ZF ir CF, pagal koprocesoriaus
komandos vykdymo rezultat. Kadangi koprocesoriuje skaiiai yra reals su ?enklu,
tai ?i dviej po?ymi pakanka bet kuri dviej skaii palyginimui.

Kiti du slygos kodo bitai yra naudojami specialia koprocesoriaus komanda, kuri
tikrina specialias ypatingas skaitmenines reik?mes, kurias „?ino“ koprocesorius.
Kadangi tokios specialios reik?ms yra ypatingai apdorojamos, tai slygos kodas
leid?ia pa?inti tokias specialias reik?mes.

6.4. Koprocesoriaus Intel 8087 komand sistema


Steko registr adresacija yra atliekama santykinai steko vir?ns at?vilgiu.
Asembleriu steko vir?n yra nurodoma
ST(0) arba ST. Kiti elementai, tolstant
nuo vir?ns, yra
ST(1), ST(2), ..., ST(7). Pavyzd?iui, FADD ST(0), ST(3) :






ST(0)
+
A

ST(1)
B

ST(2)
C

ST(3)

D

ST(4)
E

ST(5)
F


Koprocesoriaus komandos yra skirstomos tris grupes:
1. Duomen persiuntimo komandos i? operatyviosios atminties koprocesori ir
i? koprocesoriaus operatyvij atmint.
2. Koprocesoriaus valdymo komandos.
3. Skaitmeninio apdorojimo komandos.

6.5. Duomen persiuntimo komandos


?i grup sudaro trys pagrindins komandos.

Pakrovimo komanda
patalpina reik?m steko vir?n. Vis koprocesoriaus komand
pavadinimai prasideda raide „F“. Mikroprocesoriuje operacijos kodas yra bendras
visiems operand formatams (pvz., komanda MOV), o koprocesoriuje komandos

111


KOMPIUTERI ARCHITEKTRA

skiriasi priklausomai nuo operando: fiksuoto sveiko, de?imtainio, slankaus.
Asembleris atskiria operando lauko ilg: 4, 8, 10 bait, taiau neatskiria formato:
sveikas ar realus, de?imtainis ar vidinis.

Duomen formatas Lauko ilgis Pakrovimo komanda
Sveikas ?odis 16 bit LD
FI
Sveikas trumpas 32 bitai
Sveikas ilgas 64 bitai
De?imtainis supakuotas 80 bit FBLD
Trumpas realus 32 bitai FLD
Ilgas realus 64 bitai
Vidinis realus 80 bit


Duomen lauko ilg nustato pats asembleris pagal apra?.

Tokie komandos antros raids susitarimai galioja ir kitoms komandoms, kurios
kreipiasi atmint.

Jeigu bus bandoma patalpinti i? atminties stek, o stekas jau yra pilnas, tai
koprocesoriuje kils ypatinga situacija – steko perpildymas.

Jeigu nra vartotoji?kos steko perpildymo apdorojimo programos, tai standartin
programa patalpinam reik?m pa?yms kaip neapibr?t ir, toliau naudojant toki
reik?m, rezultato neapibr?tumas tsiasi, ir koprocesorius t fiksuoja, kad situacija
nelikt nepastebta.

Ketvirtas pakrovimo komandos tipas (jau buvo mintos komandos FILD, FBLD ir
FLD, kai jos ima atitinkam format duomenis i? atminties) – i? steko nukopijuoti
steko vir?n, kartu padidinant steko rodykl:
FLD ST(0) – dubliuojama steko vir?n;
FLD ST(3) – treiasis steko elementas kopijuojamas steko vir?n, o pats tampa
ketvirtuoju steko elementu.

Beveik prie? kiekvien koprocesoriaus komand yra naudojama komanda WAIT =
9Bh, tam kad nepradti vykdyti sekanios koprocesoriaus komandos, kol nevykdyta
ankstesn.

1101 1xxx mod yyy r/m
Koprocesoriaus komandos yra formuojamos komandos ESC pagalba. Formaliai,
komanda ESC turi du operandus, kuri vienas nurodo pai koprocesoriaus komand,
o kitas – operand atmintyje. Komanda ESC gali u?imti 2, 3, arba 4 baitus,
priklausomai nuo lauko mod reik?ms.

Pakrovimo komand variantai:

1. sveikas/slankus ST(0) (i? atminties ST(0) )
ESC MF 1 mod 000 r/m [j.b. v.b.]

112

Pastaba.

00, 32-j bit slankus – trumpas realus
MF = 01, 32-j bit sveikas – trumpas sveikas
10, 64-i bit slankus – ilgas realus
11, 16-os bit sveikas – sveikas ?odis

Pastaba.
Priklausomai nuo to, ar operandas bus slankus ar sveikas, bus sugeneruota
FLD arba FILD komanda.

2. ilgas sveikas ST(0)
ESC 111 mod 101 r/m [j.b. v.b.]

3. vidinis realus ST(0)
ESC 011 mod 101 r/m [j.b. v.b.]

4. de?imtainis supakuotas ST(0)
ESC 111 mod 100 r/m [j.b. v.b.]

5. ST(i) ST(0)
ESC 001 11 000 ST(i)


U?ra?ymo komandos
turi du variantus. Pirmasis komandos variantas u?ra?o atmint,
nekeiiant steko, o antrasis komandos variantas u?ra?o atmint, kartu i?stumiant i?
steko. Pastarasis variantas yra platesnis, tuo tarpu pirmajame dalyvauja ne visi
formatai, o keturi, kuriuos galima nurodyti bitais MF:

Duomen formatas Lauko ilgis U?ra?ymo komanda
Sveikas ?odis 16 bit
FIST
Sveikas trumpas 32 bitai
FST
Trumpas realus 32 bitai
Ilgas realus 64 bitai

U?ra?ymo komandos formatai

1. ST(0) sveikas/slankus ( atmint)
ESC MF 1 mod 010 r/m [j.b. v.b.]

2. ST(0) ST(i)
ESC 101 11 010 ST(i)








113


KOMPIUTERI ARCHITEKTRA

Antrasis komandos variantas su i?stmimu i? steko: FSTP, FISTP, FBSTP.

Duomen formatas Lauko ilgis U?ra?ymo komanda
Sveikas ?odis 16 bit
FISTP
Sveikas trumpas 32 bitai
Sveikas ilgas 64 bitai
De?imtainis supakuotas 80 bit FBSTP
Trumpas realus 32 bitai
FSTP
Ilgas realus 64 bitai
Vidinis realus 80 bit

Pastaba.
Tiktai pakrovimo ir u?ra?ymo (siminimo) komandos palaiko visus duomen
formatus. Kitos komandos apsiriboja keturiais formatais, kuriuos galima nurodyti
bitais MF:

00, 32-j bit trumpas slankus
MF = 01, 32-j bit trumpas sveikas
10, 64-i bit ilgas slankus
11, 16-os bit sveikas ?odis
U?ra?ymo komandos su i?stmimu i? steko formatai:

1. ST(0) sveikas/slankus ( atmint)
ESC MF1 mod 011 r/m [j.b. v.b.]

2. ST(0) ilgas sveikas ( atmint)
ESC 111 mod 111 r/m [j.b v.b.]

3. ST(0) vidinis slankus ( atmint)
ESC 011 mod 111 r/m [j.b v.b.]

4. ST(0) de?imtainis ( atmint)
ESC 111 mod 110 r/m [j.b v.b.]

5. ST(0) ST (i)
ESC 101 11 011 ST(i)


Apsikeitimo komanda
FXCH ST(i) apkeiia vietomis steko vir?n su steko registru:
ST(0) ST(i)
ESC 001 11 001 ST(i)

Kitos duomen persiuntimo komandos naudojamos konstant formavimui,
nusiuniant jas ST(0), suprantama, vidiniu formatu.

Komandos Reik?m Komandos ?e?ioliktainis
mnemonika formatas kodas
ESC001 1110 1110
FLDZ 0 D9 EE

114Pastaba.

00, 32-j bit slankus – trumpas realus
MF = 01, 32-j bit sveikas – trumpas sveikas
10, 64-i bit slankus – ilgas realus
11, 16-os bit sveikas – sveikas ?odis

Pastaba.
Priklausomai nuo to, ar operandas bus slankus ar sveikas, bus sugeneruota
FLD arba FILD komanda.

2. ilgas sveikas ST(0)
ESC 111 mod 101 r/m [j.b. v.b.]

3. vidinis realus ST(0)
ESC 011 mod 101 r/m [j.b. v.b.]

4. de?imtainis supakuotas ST(0)
ESC 111 mod 100 r/m [j.b. v.b.]

5. ST(i) ST(0)
ESC 001 11 000 ST(i)


U?ra?ymo komandos
turi du variantus. Pirmasis komandos variantas u?ra?o atmint,
nekeiiant steko, o antrasis komandos variantas u?ra?o atmint, kartu i?stumiant i?
steko. Pastarasis variantas yra platesnis, tuo tarpu pirmajame dalyvauja ne visi
formatai, o keturi, kuriuos galima nurodyti bitais MF:

Duomen formatas Lauko ilgis U?ra?ymo komanda
Sveikas ?odis 16 bit
FIST
Sveikas trumpas 32 bitai
FST
Trumpas realus 32 bitai
Ilgas realus 64 bitai

U?ra?ymo komandos formatai

1. ST(0) sveikas/slankus ( atmint)
ESC MF 1 mod 010 r/m [j.b. v.b.]

2. ST(0) ST(i)
ESC 101 11 010 ST(i)








113


KOMPIUTERI ARCHITEKTRA

Antrasis komandos variantas su i?stmimu i? steko: FSTP, FISTP, FBSTP.

Duomen formatas Lauko ilgis U?ra?ymo komanda
Sveikas ?odis 16 bit
FISTP
Sveikas trumpas 32 bitai
Sveikas ilgas 64 bitai
De?imtainis supakuotas 80 bit FBSTP
Trumpas realus 32 bitai
FSTP
Ilgas realus 64 bitai
Vidinis realus 80 bit

Pastaba.
Tiktai pakrovimo ir u?ra?ymo (siminimo) komandos palaiko visus duomen
formatus. Kitos komandos apsiriboja keturiais formatais, kuriuos galima nurodyti
bitais MF:

00, 32-j bit trumpas slankus
MF = 01, 32-j bit trumpas sveikas
10, 64-i bit ilgas slankus
11, 16-os bit sveikas ?odis
U?ra?ymo komandos su i?stmimu i? steko formatai:

1. ST(0) sveikas/slankus ( atmint)
ESC MF1 mod 011 r/m [j.b. v.b.]

2. ST(0) ilgas sveikas ( atmint)
ESC 111 mod 111 r/m [j.b v.b.]

3. ST(0) vidinis slankus ( atmint)
ESC 011 mod 111 r/m [j.b v.b.]

4. ST(0) de?imtainis ( atmint)
ESC 111 mod 110 r/m [j.b v.b.]

5. ST(0) ST (i)
ESC 101 11 011 ST(i)


Apsikeitimo komanda
FXCH ST(i) apkeiia vietomis steko vir?n su steko registru:
ST(0) ST(i)
ESC 001 11 001 ST(i)

Kitos duomen persiuntimo komandos naudojamos konstant formavimui,
nusiuniant jas ST(0), suprantama, vidiniu formatu.

Komandos Reik?m Komandos ?e?ioliktainis
mnemonika formatas kodas
ESC001 1110 1110
FLDZ 0 D9 EE

114

FLD1 1
ESC001 1110 1011
FLDPI D9 EB
ESC001 1110 1001
FLDL2T Log 10 D9 E9
2
ESC001 1110 1010
FLDL2E Log e D9 EA
2
ESC001 1110 1100
FLDLG2 Log 2 D9 EC
10
ESC001 1110 1101
FLDLN2 Log 2 D9 ED
e


Duomen persiuntimo komand pavyzdys:

CODE SEGMENT
ASSUME CS : CODE, DS : CODE
WORD_INTEGER LABEL WORD
SHORT_INTEGER LABEL DWORD
LONG_INTEGER LABEL QWORD
BCD_INTEGER LABEL TBYTE
SHORT_REAL LABEL DWORD
LONG_REAL LABEL QWORD
T_REAL LABEL TBYTE

;Jeigu tai ne makrokomanda, tai prie? kiekvien j reikalinga komanda
;WAIT
FILD WORD_INTEGER
FILD SHORT_INTEGER
FILD LONG_INTEGER
FBLD BCD_INTEGER
FLD SHORT_REAL
FLD LONG_REAL
FLD T_REAL
FLD ST(2)
FIST WORD_INTEGER
FIST SHORT_INTEGER
FST SHORT_REAL
FST LONG_REAL
FST ST(2)
FISTP WORD_INTEGER
FISTP SHORT_INTEGER
FISTP LONG_INTEGER
FBSTP BCD_INTEGER
FSTP SHORT_REAL
FSTP LONG_REAL
FSTP T_REAL
FSTP ST(2)
FXCH ST(2)
FLDZ
FLD1
FLDPI
FLDL2T
FLDL2E
FLDLG2
FLDLN2

CODE ENDS
END



115


KOMPIUTERI ARCHITEKTRA

6.6. Koprocesoriaus valdymo komandos

FINIT – INITiate – inicializuoti koprocesori (registr i?valymas)
FENI – ENable Interrupts – leisti pertraukimus ~ STI
FDISI – DISable Interrupts – u?drausti pertraukimus ~ CLI
FLDCW – LoaD Control Word – pakrauti i? atminties valdantj ?od
FSTCW – STore Control Word – siminti valdantj ?od atmintyje
FSTSW – STore Status Word – siminti bsenos ?od atmintyje
FCLEX – CLear EXeption – nusprsti ypating situacij
14 FSTENV – STore ENVironment – siminti koprocesoriaus darbin aplink
bait atmintyje
FLDENV – LoaD ENVironment – pakrauti koprocesoriaus darbin aplink i?
atminties
94 FSAVE – siminti koprocesoriaus bsen atmintyje
baitai FRSTOR – ReSTORe – pakrauti koprocesoriaus bsen i? atminties
FINCSTP – INCrement Stack Pointer – padidinti steko rodykl
FDECSTP – DECrement Stack Pointer – suma?inti steko rodykl
FFREE – atlaisvinti steko registr
FNOP – No OPeration – nieko nedaryti
FWAIT – analogi?ka komandai WAIT

Koprocesoriaus darbin aplink sudaro visi procesoriaus 8087 registrai, i?skyrus steko
registrus. Aplinka susideda i? 14 bait. Darbo aplink atmint galima u?ra?yti taip:

15 0

Valdantysis ?odis
+0

Bsenos ?odis
+2

Steko po?ymi ?odis

+4
Komandos
IP 15 –0
+6
rodykl
IP 19 -16 O 0 peracijos kodas
+8


4 bitai yyy ESC xxx

OP 15 – 0
+ 10
Operando
OP 19 – 1 ¨ 6
+ 11
rodykl


Darbo aplinka yra simenama apdorojant ypating situacij koprocesoriuje. Vienas 20
bit adresas – komandos rodykl – nurodo paskutin komanda, kuri vykd
koprocesorius. Kitas 20 bit adresas – operando rodykl – nurodo paskutinio
nuskaityto i? atminties duomen baito adres. Paskutins vykdytos komandos
operacijos kodas irgi yra darbo aplinkoje.

Koprocesoriaus bsena yra darbo aplinka, papildyta steko registrais. Todl bsena
u?ima 94 baitus atmintyje. Steko registrai yra simenami po aplinkos, pradedant
ST(0), simenami visi ir lik registrai: ST(1), …, ST(7).


116

Steko rodykl ir steko registr po?ymiai kinta skirtingai. Komandos FINCSTP ir
FDECSTP keiia steko rodykl, bet nekeiia steko registr po?ymi. Duomen
buvim steke rodo steko registr po?ymiai.

Komanda FFREE atlaisvina steko registr nurodant steko registr po?ymyje, kad tas
registras yra laisvas. Taiau FFREE nekeiia steko rodykls. Aritmetins komandos
veikia pagal steko princip.




Komandos mnemonika Komandos formatas ?e?ioliktainis kodas
FINIT ESC 011 1110 0011 DB E3
FENI ESC 011 1110 0000 DB E0
FDISI ESC 011 1110 0001 DB E1
FLDCW ESC 001 mod 101 r/m D9 xx
[poslinkis]
FSTCW ESC 001 mod 111 r/m D9 xx
[poslinkis]
FSTSW ESC 101 mod 111 r/m D9 xx
[poslinkis]
FCLEX ESC 011 1110 0010 DB E2
FSTENV ESC 001 mod 110 r/m D9 xx
[poslinkis]
FLDENV ESC 001 mod 100 r/m D9 xx
[poslinkis]
FSAVE ESC 101 mod 110 r/m DD xx
[poslinkis]
FRSTOR ESC 101 mod 100 r/m DD xx
[poslinkis]
FINCSTP ESC 001 1111 0111 D9 F7
FDECSTP ESC 001 1111 0110 D9 F6
FFPEE ESC 101 11 000 ST(i) DD Cx
FNOP ESC 001 1101 0000 D9 D0
FWAIT 1001 1011 9B


Koprocesoriaus valdymo komand pavyzdys:

CODE SEGMENT
ASSUME CS : CODE, DS : CODE
STATUS_WORD LABEL WORD
CONTROL_WORD LABEL WORD
ENVIRONMENT LABEL BYTE ;14 bait sritis
STATE LABEL BYTE ;94 bait sritis
FINIT
FENI

117


KOMPIUTERI ARCHITEKTRA

FDISI
FLDCW CONTROL_WORD
FSTCW CONTROL_WORD
FCLEX
FSTENV ENVIRONMENT
FLDENV ENVIRONMENT
FSAVE STATE
FRSTOR STATE
FINCSTP
FDECSTP
FFPEE ST(2)
FNOP
FWAIT
CODE ENDS
END



6.7. Skaitmeninio apdorojimo komandos

Skaitmeninio apdorojimo komand grup sudaro :
1. Aritmetins komandos: sudtis, atimtis, daugyba, dalyba, palyginimas.
2. Funkcij komandos: paprastosios, trigonometrins ir transcendentins
funkcijos.

Pagrindins aritmetins komandos yra:
ADD rezultatas rezultatas + ?altinis
SUB rezultatas rezultatas – ?altinis
SUBR rezultatas ?altinis – rezultatas
MUL rezultatas rezultatas · ?altinis
DIV rezultatas rezultatas / ?altinis
DIVR rezultatas ?altinis / rezultatas

Pastaba.
Auk?iau pateikti komand pavadinimai nra koprocesoriaus komand
mnemonika, tai yra daugiau bendriniai komand pavadinimai.

Dl atimties ir dalybos nekomutatyvumo reikalingos specialios operacijos, kuriose
operandai yra sukeisti vietomis.

Sudties komandos
variantai:

1. FADD ST(i) ST(0) ST(0) + ST(i)
FADD ST(0), ST(i) ST(0) ST(0) + ST(i)
FADD ST(i), ST(0) ST(i) ST(0) + ST(i)

2. FADDP ST(i), ST(0) ST(i) ST(0) + ST(i)
Atlikus ?i operacij, steko vir?n ST(0) i?stumiama. Todl ji negali bti rezultato
registru. Jeigu ST(i) yra ST(1), tai turime klasikin stekin operacij (imami du
vir?utiniai steko elementai, sudedami, i?stumiami i? steko, o gautas rezultatas
u?ra?omas steko vir?nje).

3. FADD real ST(0) ST(0) + real mem

118

real – tai trumpas arba ilgas realus skaiius.
real mem rei?kia, kad realus skaiius yra atmintyje.

4. FIADD integer ST(0) ST(0) + integer
integer – tai sveikas ?odis arba trumpas sveikas.

Aritmetins komandos negali naudoti tiesiogiai atmintyje ilgo sveiko, supakuoto
de?imtainio ir vidinio relaus formato. Prie? atliekant veiksmus su jais, reikt ?i
format duomenis nusisti koprocesoriaus stek.

Duomen formatas Lauko ilgis Sudties komanda
FIADD
Sveikas ?odis 16 bit
Sveikas trumpas 32 bitai
FADD
Trumpas realus 32 bitai
Ilgas realus 64 bitai


Sudties komandos formatai:

1. ST(0) ST(0) + sveikas/slankus atmintyje
ESC MF 0 mod 000 r/m [poslinkis]

2 ST(0) + ST(i)
ESC d P 0 11000 ST(i)


d = 0, rezultatas yra ST(0)
1, rezultatas yra ST(i)

P = 0, vir?utinio steko elemento po operacijos nereikia atlaisvinti
1, vir?utinis steko elementas po operacijos atlaisvinamas



Atimties komandos
variantai:
1. FSUB
2. FSUBP – su i?stmimu i? steko.
3. FSUBR – operandai atvirk?ia tvarka.
4. FISUB – operandai sveiki atmintyje.
5. FISUBR – operandai sveiki atmintyje, atvirk?ia tvarka, su i?stmimu i? steko.


Duomen formatas Lauko ilgis Atimties komanda
FISUB,
Sveikas ?odis 16 bit
FISUBR
Sveikas trumpas 32 bitai
FSUB,
Trumpas realus 32 bitai
FSUBR
Ilgas realus 64 bitai

119


KOMPIUTERI ARCHITEKTRA




Atimties komandos formatai:

1. ST(0) operandas1 - operandas2
ESC MF 0 mod 10 R r/m [poslinkis]

operacija ?altinis R = 0, rezultatas
operacija rezultatas 1, ?altinis

2. ST(0) - ST(i)
ESC d P 0 111 0 R ST(i)


Daugybos komandos
variantai:
1. FMUL
2. FMULP
3. FIMUL


Duomen formatas Lauko ilgis Daugybos komanda
FIMUL
Sveikas ?odis 16 bit
Sveikas trumpas 32 bitai
FMUL
Trumpas realus 32 bitai
Ilgas realus 64 bitai

Daugybos komandos formatai:
1. ST(0) ST(0) · op/mem
sveikas/slankus
ESC MF 0 mod 001 r/m [poslinkis]

2. ST(0) · ST(i)
ESC d P 0 11 001 ST(i)


Dalybos komandos
variantai:
1. FDIV
2. FDIVP
3. FDIVR
4. FIDIV
5. FIDIVR
6. FDIVRP


Duomen formatas Lauko ilgis Dalybos komanda
FIDIV,
Sveikas ?odis 16 bit
FIDIVR
Sveikas trumpas 32 bitai

120

Trumpas realus 32 bitai
FDIVR
Ilgas realus 64 bitai

Dalybos komandos formatai:

1. ST(0) ST(0) / ST(i)
ESC MF 0 mod 11R r/m [poslinkis]

2. operandas1 / operandas2
ESC d P 0 1111 R ST(i)



Aritmetini komand pavyzdys:

CODE SEGMENT
ASSUME CS : CODE, DS : CODE
WORD_INTEGER LABEL WORD
SHORT_INTEGER LABEL DWORD
SHORT_REAL LABEL DWORD
LONG_REAL LABEL QWORD
FADD ST(0), ST(2)
FADD ST(2), ST(0)
FIADD WORD_INTEGER
FIADD SHORT_INTEGER
FADD SHORT_REAL
FADD LONG_REAL
FADDP ST(2), ST(0)
FSUB SHORT_REAL
FISUB WORD_INTEGER
FSUBP ST(2), ST(0)
FSUBR ST(2), ST(0)
FISUBR SHORT_INTEGER
FSUBRP ST(2), ST(0)
FMUL SHORT_REAL
FIMUL WORD_INTEGER
FMULP ST(2), ST(0)
FDIV ST(0), ST(2)
FIDIV SHORT_INTEGER
FDIVP ST(2), ST(0)
FIDIVR WORD_INTEGER
FDIVRP ST(2), ST(0)
CODE ENDS
END


Palyginimo komandos
yra naudojamos dviej skaii palyginimui. Atliekant
komand yra formuojami du po?ymiai: C3 ir C0. Palyginime dalyvauja steko vir?n
arba steko registras.

C3 C0 Santykis
0 0 ST(0) > ?altinis
0 1 ST(0) < ?altinis

121


KOMPIUTERI ARCHITEKTRA

1 0 ST(0) = ?altinis
1 1 ST(0) nepalyginamas su
?altiniu


Po tokio palyginimo bsenos ?od reikia siminti atmintyje, vyresnij dal nusisti
registr AH ir, panaudojant komand SAHF, registro AH reik?m nusisti registr
SF.

Skaiiai yra nepalyginami, kai bent vienas i? j yra NAN (Not A Number) arba viena
i? begalybs reik?mi.


Duomen formatas Lauko ilgis Palyginimo komanda
FICOM,
Sveikas ?odis 16 bit
FICOMP
Sveikas trumpas 32 bitai
FCOM,
Trumpas realus 32 bitai
FCOMP
Ilgas realus 64 bitai

Palyginimo komandos formatai:

I. Palyginimas (FCOM, FICOM)
1. sveikas/slankus atmintyje ir ST(0)
ESC MF 0 mod 010 r/m [poslinkis]

2. ST(i) ir ST(0)
ESC 000 11010 ST(i)

II. Palyginimas ir pa?alinimas i? steko (FCOMP, FICOMP):
1. ESC MF 0 mod 011 r/m [poslinkis]

2. ESC 000 11011 ST(i)

III. Komanda FCOMPP – ST(0) ir ST(1) palyginimas ir pa?alinimas i? steko du
kartus:
1. ESC 110 1101 1001

IV. Komanda FTST – ST(0) ir 0 palyginimas:
1. ESC 001 1110 0100


Palyginimo komand pavyzd?iai:

1.
CODE SEGMENT
ASSUME CS : CODE, DS : CODE
WORD_INTEGER LABEL WORD
SHORT_INTEGER LABEL DWORD
SHORT_REAL LABEL DWORD

122

LONG_REAL LABEL QWORD
FCOM ST(2)
FICOM WORD_INTEGER
FCOM SHORT_REAL
FICOMP SHORT_INTEGER
FCOMP LONG_REAL
FCOMPP
FTST
CODE ENDS
END


2.
CODE SEGMENT
ASSUME CS : CODE, DS : CODE
WORD_INTEGER LABEL WORD
STATUS_WORD DW ?
FICOM WORD_INTEGER ;palyginimas su STOS
FSTSW STATUS_WORD ;bsenos siminimas
FWAIT
MOV AH, BYTE PTR STATUS_WORD + 1
SAHF
JB CONTINUE ;C0 patikrinimas ir perjimas jei 0
JNE ST_SPEATER ;C3 patikrinimas
ST_EQUAC ;ia nueinama, jei C3=1 ir C0=0
ST_SPEATER ;ia nueinama, jei C3=0 ir C0=0
;ST(0) > WORD_INTEGER
CONTINUE:
JNE ST_LESS ;patikrinamas C3
UNORDERED: ;ia patenkama, jei C3=1 ir C0=1
;nepalyginami
ST_LESS: ;ia patenkama, jei C3=0 ir C0=1
;ST(0) < WORD_INTEGER
CODE ENDS
END

Palyginimo komandos formuoja bsenos ?od?io bitus (ypatingas situacijas). Jeigu ?ie
bitai yra nesvarbs, reikt ivykdyti komand FCLEX – i?valyti po?ymius.

Yra ir speciali palyginimo komanda FXAM, kuri pagal steko vir?nje esani
reik?m suformuoja keturis slygos po?ymius (C0, C1, C2, C3) ir parodo, kokio tipo
skaiius yra steko vir?nje:

C3 C2 C1 C0 ST(0)
+ nenormalozuotas
0 0 0 0
+ NAN
0 0 0 1
- nenormalizuotas
0 0 1 0
- NAN
0 0 1 1
+ normalizuotas
0 1 0 0
+ begalyb
0 1 0 1
- nenormalizuotas
0 1 1 0
- begalyb
0 1 1 1
+ 0
1 0 0 0

123


KOMPIUTERI ARCHITEKTRA

tu?ia
1 0 0 1
- 0
1 0 1 0
tu?ia
1 0 1 1
+ denormalizuota
1 1 0 0
tu?ia
1 1 0 1
- denormalizuota
1 1 1 0
tu?ia
1 1 1 1


Paprastai komandos FXAM nereikia naudoti, ji reikalinga, kai dirbama ant tikslumo
ribos.

Begalyb reik?kia, kad eil yra per didel.

Nenormalizuotas (denormalizuotas) skaiius yra tada, kai eil yra per ma?a tam, kad ji
bt u?ra?yta korekti?kai, ir todl rezultatas u?ra?omas denormalizuotai, mantiss
sskaita.

FXAM: ESC 001 1110 0101

Paprastos funkcijos


FSQRT – kvadratin ?aknis i? ST(0)
ESC 001 1111 1010

FSCALE – ST(0) „ma?tabavimas“ pagal ST(1)
ESC 001 1111 1101
ST(1)
Komanda atlieka klim laipsniu: ST(0) · 2

FPREM – liekana ST(0) / ST(1)
ESC 001 1111 1000
Komanda atlieka veiksm: ST(0) ST(0) mod ST(1)

FRNDINT – ST(0) i?lyginimas iki sveiko (apvalinimo taisykl pagal sveik ?od)
ESC 001 1111 1100

FXTRACT – trupmenin dalis nuo ST(0) u?ra?oma nauj steko vir?n
ESC 001 1111 0100
Komanda atlieka charakteristikos ir mantiss i?skyrim.

FABS – ST(1) tai skaiiaus absoliuti reik?m buvusios ST(0) dvejeto laipsniu
ESC 001 1110 0001

FCHS – ?enklo keitimas
ESC 001 1110 0000


Trigonometrins funkcijos


124

FPTAN – argumentas ST(0) skaiius radianais: 0 < < / 4
Rezultatas y / x = tg
y u?ima steko vir?n, o paskui x u?ra?omas nauj steko vir?n.
ESC 001 1111 0010


FPATAN – ST(0) arctan y/x = arctan ST(1) / ST(0)
ST(0) = x i?stumiamas i? steko , o FPATAN u?ra?omas vietoje y.
ESC 001 1111 0011

Transcendentins funkcijos


ST(0)
F2XM1 = 2
– 1
ESC 001 1111 0000

FYL2X = ST(1) · log
[ST(0)]
2
ESC 001 1111 0001

FYL2XP1 = ST(1) · log
[ST(0) + 1]
2
ESC 001 1111 1001






























125


KOMPIUTERI ARCHITEKTRA







7. Literatra

1. Peter Abel. IBM PC Assembly Language and Programming.
Third Edition. Prentice Hall International, Inc., 1995.
2. Randall Hyde. The Art of Assembly Language, 2000.
http://webster.cs.ucr.edu/Page_asm/ArtofAssembly/0_ArtofAsm.html









126

   
 Top


Advertise on our site! Click here

 powered by Peperoni.de Users online right now: 27436   Help/FAQ   Terms   Imprint