Download as pdf or txt
Download as pdf or txt
You are on page 1of 126

VILNIAUS UNIVERSITETAS MATEMATIKOS IR INFORMATIKOS FAKULTETAS INFORMATIKOS KATEDRA

Doc. dr. Antanas MITAINAS

KOMPIUTERI ARCHITEKTRA

Mokymo priemon

VILNIUS 2003

KOMPIUTERI ARCHITEKTRA

Turinys
anga.....................................................................................................................3 Pozicins skaiiavimo sistemos .............................................................................4 2.1. Pozicini skaiiavimo sistem samprata .......................................................4 2.2. Pervedimas i vienos sistemos kit..............................................................5 3. Mikroprogramavimas.............................................................................................7 3.1. Procesoriaus fizinio lygio komponents ........................................................7 3.2. Mikrokomandos .............................................................................................9 3.3. Interpretuojamas lygis..................................................................................11 3.4. Interpretuojantis lygis ..................................................................................13 3.5. Komandos ADD realizacija .........................................................................17 3.6. Ventili mikroprograminis valdymas ..........................................................19 3.7. Mikroprogramavimo kalba ..........................................................................22 3.8. Interpretuojamos maimos interpretatorius..................................................25 3.9. Mikroprograminio lygio projektavimas.......................................................28 4. Mikroprocesoriaus Intel 8088 architektra..........................................................35 4.1. Mikroprocesoriaus architektros samprata ..................................................35 4.2. Operatyvios atminties samprata...................................................................35 4.3. Port sistema................................................................................................36 4.4. Kompiuterio sandara....................................................................................37 4.5. Mikroprocesoriaus Intel 8088 sandara.........................................................39 4.6. Komand struktra.......................................................................................41 4.7. Adresavimo bdai ........................................................................................45 4.8. Stekas ...........................................................................................................47 4.9. Pertraukim sistema.....................................................................................47 4.10. Duomen formatai ...................................................................................55 4.11. Poymi registras SF ...............................................................................59 5. Komand sistema.................................................................................................64 5.1. Bendrosios mikroprocesoriaus komandos ...................................................65 5.2. Aritmetins komandos .................................................................................69 5.3. Veiksmai su deimtainio formato skaiiais..................................................75 5.4. Konvertavimas .............................................................................................80 5.5. Logins komandos .......................................................................................81 5.6. Eilutins komandos......................................................................................84 5.7. Valdymo perdavimo komandos ...................................................................88 5.8. Slyginis valdymo perdavimas ....................................................................93 5.9. Cikl komandos ...........................................................................................94 5.10. Pertraukim komandos ............................................................................95 5.11. Procesoriaus bsenos valdymas ir sinchronizavimas ..............................97 6. Koprocesorius Intel 8087.....................................................................................99 6.1. Koprocesoriaus duomen formatai ............................................................100 6.2. Koprocesoriaus duomen format vaizdavimas........................................103 6.3. Koprocesoriaus architektra ......................................................................107 6.4. Koprocesoriaus Intel 8087 komand sistema ............................................111 6.5. Duomen persiunrimo komandos ..............................................................111 6.6. Koprocesoriaus valdymo komandos ..........................................................116 6.7. Skaitmeninio apdorojimo komandos .........................................................118 7. Literatra............................................................................................................126 1. 2.

KOMPIUTERI ARCHITEKTRA

1. anga
Mokymo priemon Kompiuteri architektra yra skirta Informatikos ir Program sistem studij program studentams privalomo dalyko Kompiuteri architektra studijoms. Mokymo priemon susideda i penki tem: pozicins skaiiavimo sistemos, mikroprogramavimas, mikroprocesoriaus Intel 8088 architektra, komand sistema, koprocesoriaus Intel 8087 architektra. Mokymo priemons tikslas - supaindinti studentus su kompiuteri architektra, tame tarpe su mikroprocesori architektra, skaitant duomen formatus, komand sistem, pertraukim sistem, atminties organizavim, asemblerio notacijos sistema. ioje mokymo priemonje yra nagrinjami kompiuteri architektros klausimai, remiantis Intel tipo mikroprocesoriaus architektra. vadinje kurso dalyje yra apvelgiamos pozicins skaiiavimo sistemos. Yra nagrinjami CISC architektroje taikomi mikroprogramavimo pagrindai. Pagrindinje kurso dalyje yra apvelgiamos bendrosios Intel mikroprocesoriaus komponents ir savybs, tokios kaip: duomen registrai, duomen formatai, adres registrai, vykdomojo adreso formavimo aparatas, adresavimo reimai, pertraukim mechanizmas, port sistema, operatyvi atmintis, absoliutaus adreso formavimo aparatas, komand sistema, o taip pat koprocesoriaus architektra, duomen formatai, komand sistema. Mokymo priemon remiasi mikroprocesoriaus Intel 8088 koprocesoriaus Intel 8087 architektromis. Pasirinkimas yra apsprstas iais motyvais: ini sisavinimo gilumui yra tikslinga neapsiriboti principiniu lygmeniu, o inagrinti ibaigt sistem Siekiant turti galimyb praktikai ibandyti architektros elementus, yra svarb turti ne modelin architektr, o reali, paplitusi ir visiems prieinama Siekiant turti reali, kartu yra svarbu, kad architektra bt kiek imanoma paprasta. Mokymo priemonje yra akcentuojamos svokos, j plotms, bendrieji principai, siekiama suformuoti kompiuterio, kaip algoritm vykdytojo, vizija. Akcentuojama, kad kompiuteris architektriniame nagrinjimo lygmenyje nieko kito nedaro, iskyrus komand vykdym viena po kitos.

KOMPIUTERI ARCHITEKTRA

2. Pozicins skaiiavimo sistemos


2.1. Pozicini skaiiavimo sistem samprata

Skaiiavimo sistemoje pagrindas (pvz.: 10, 8, 16, 2) nusako skaitmen skaii ir skaitmens pozicijos svor. Pavyzdiui, deimtainis skaiius anan-1a1a0 yra lygus an10n + an-110n-1++a1101 + a0100 .
Dvejetain skaiiavimo sistema Atuntain skaiiavimo sistema Deimtain skaiiavimo sistema eioliktain skaiiavimo sistema

0 01 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000

0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

0 1 2 3 4 5 6 7 8 9 A B C D E F 10

Bit skaiius 2 3 4 5 6 7 8 9

Galim kombinacij skaiius 4 8 16 32 64 128 256 512

KOMPIUTERI ARCHITEKTRA 10 11 12 13 14 15 16 Segmento dydis yra 64 K; bet kur adres jame nurodyti utenka 16 bit ... 20 24 32 1024 = 1 K 2K 4K 8K 16 K 32 K 64 K ... 1M ... 16 M ... 4 GB

Tegu turime skaii X skaiiavimo sistemoje su pagrindu P: X = ( pnpn-1p1p0p-1p-2..p-k )P = pnPn + pn-1Pn-1 + ...+ p0P0 + p-1P-1+ ...+ p-kP-k
sveikoji dalis trupmenin dalis

Tas pats skaiius X skaiiavimo sistemoje su pagrindu Q: X = ( qmqm-1q1q0q-1q-2..q-l )Q = qmQm + qm-1Qm-1 + ...+ q0Q0 + q-zQ-z+ ...+ q-lQ-l
sveikoji dalis trupmenin dalis

2.2.

Pervedimas i vienos sistemos kit

1. Jeigu skaiiavimus atliekame sistemoje su pagrindu P, tai skaiiaus pervedimas i sistemos Q sistem P reikia polinominio urao sistemoje Q suskaiiavim sistemoje P. Pavyzdiui, perveskime i eioliktains skaiiavimo sistemos i deimtain skaii BA,8: ( BA,8 )16 = 11161 + 10160 + 816-1 = 176 + 10 + 0,5 = ( 186,5 )10 2. Pervedimas i skaiiavimo sistemos P Q. Atskirai pervesime sveikj ir trupmenin dalis: a) tegu sveikoji skaiiaus dalis yra N. N = qmQm + qm-1Qm-1 + ...+ q0Q0 , reikia nustatyti koeficientus qm,qm-1,..,q0 . N = qmQm + qm-1Qm-1 + ...+ q0Q0 /: Q N /: Q liekana yra q0

KOMPIUTERI ARCHITEKTRA N1 = qmQm-1 + qm-1Qm-2 + ...+ q1 /: Q N1 /: Q liekana yra q1 ... Nm = qm /: Q Nm /: Q liekana yra qm Pavyzdiui, perveskime i deimtains skaiiavimo sistemos dvejetain skaii ( 23 )10 : 23 |2___ 22 11 |2___ q0 = 1 10 5 |2___ q1 = 1 4 2 |2___ q2 = 1 2 1 = q4 q3 = 0 q4q3q2q1q0 = ( 10111 )2 = 124 + 023 + 122 + 121 + 120 = 16 + 0 + 4 + 2 + 1 = ( 23 )10 b) tegu trupmenin skaiiaus dalis yra N . I anksto neinome, kiek reikmi bus po kablelio, nes pervedant i sistem sistemas galima gauti begalines trupmenas. N = q-1Q-1 + q-2Q-2 + ...+ q-lQ-l + ... , reikia nustatyti koeficientus q-1,q-2,..,q-l,... . N = q-1Q-1 + q-2Q-2 + ...+ q-lQ-l + ... / Q Jei tokios daugybos rezultate gauname skaii, kurio sveikoji dalis nenulin, tai sveikj dal atmetame ( ji yra koeficientas ), likusia trupmenin dal vl dauginame i Q ir proces kartojame toliau. Pavyzdiui, perveskime i deimtains sistemos dvejetain skaii ( 0,1 )10 : 0,1 _2 q-1 = 0 0,2 _2 q-2 = 0 0,4 _2 q-3 = 0 0,8 _2 periodikai kartojasi q-4 = 1 1,6 _2 1,2 q-5 = 1 _2 q-6 = 0 0,4 ( 0,1 )10 = ( 0,0(0011) )2

KOMPIUTERI ARCHITEKTRA

3. Mikroprogramavimas
Nra griet rib tarp kompiuterio aparatrins ir programins rangos. Be to tos ribos vis laik kinta. Tradicins sivaizduojamos komandos ankstesniuose kompiuteriuose buvo realizuojamos atskiromis schemomis. Dabartiniuose kompiuteriuose visos tradicins komandos yra interpretuojamos mikroprogram pagalba. Mikroprogramos savo ruotu sudarytos i mikrokomand, kurios realizuojamos aparatrikai schem lygyje. Ms tikslas yra susipainti su mikroprograminiu lygiu ir mikroprogramavimu. Mikroprograminio lygio tikslas yra utikrinti auktesnio lygio virtualios mainos komand interpretavim.

3.1.

Procesoriaus fizinio lygio komponents

1. Registras tai renginys, skirtas informacijos saugojimui. Registrai idstyti paiame procesoriuje, jie yra analogiki atminties odiams, taiau greitesni. Tegul yra N registr : 0, 1 , 2, 3, , N-1 . Registrai charakterizuojami bit skaiiumi. Tegul yra 16 bit registras: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Skaitant i registro, informacija jame nekinta. 2. Magistral tai elektros grandin, jungianti du registrus.Magistral susideda i lygiagrei laidinink kiekvienam jungiamj registr bitui. 16 bit magistrals plotis yra 16. Fizikai yra daugiau laidinink, taiau mus domina loginis lygis. Sakykime, kad magistrale informacija perduodama viena kryptimi. 3. Ventiliai tipo ( sakoma tipo ir ). Jie skirti informacijos perdavimui i registr magistrales ir i magistrali registrus. Ventilio panaudojimo schema: Registras 1 altinis

informacinis signalas valdantysis signalas

ventilis

Registras 2 gavjas

KOMPIUTERI ARCHITEKTRA
Jeigu valdantysis signalas yra 1, tai ventilis tipo ir informacin signal praleidia, o jeigu valdantysis signalas yra 0, tai informacinis signalas nepraleidiamas. Valdantysis signalas 1 1 0 0 Informacinis bitas 1 0 1 0 Rezultatas 1 0 0 0

4. Taktini impuls generatorius. Taktiniai impulsai naudojami proces sinchronizavimui. Taktini impuls periodas vadinamas ciklu. Ciklo viduje silpnesni impuls intervalai vadinami pocikliais. Tokiu bdu laikas sudalinamas diskretiniais intervalais.
impulso stiprumas

ciklas pociklis

10

20

30

40

50

60

70

80

90

laikas, ns

Pastaba: ns = 10-3 s Pavyzdiui ventilis intervale 0 20 galt bti udarytas, o intervale 20 30 atidarytas. 5. Kreipimasis atmint. Kreipimuisi atmint naudojami du procesoriaus registrai: MAR atminties adresinis registras ir MBR buferinis registras. Jeigu lstels adresas yra MAR ir duotas skaitymo signalas, tai lstels turinys patalpinamas MBR, o jeigu duotas raymo signalas, tai i MBR adresu MAR raoma lstel. Atminties ciklas tai yra laikas priimti skaitymo signal, urayti lstels turin MBR ir pasiruoti sekanio signalo primimui. Atminties ciklas skiriasi nuo procesoriaus ciklo. MBR bit skaiius nustato atminties magistrals plot. Kuo didesnis magistrals plotis, tuo maiau reikia atminties cikl informacijos fiksuotam kiekiui paimti. Taiau atminties magistrals plotis brangiai kainuoja. Pastaba. Apsikeitimo pagreitinimui galima naudoti lygiagret apsikeitim su keliais identikais atminties blokais. Nagrinkime prasto dydio atminties modul 64 K. Tegul yra 4 blokai po 214 odi, kurie sumoje duoda 216 odi:

KOMPIUTERI ARCHITEKTRA
blokas 0
adr.

blokas 1
adr.

blokas 2
adr.

blokas 3
adr.

0 1 2 ... 214

odis 0 odis 4 ...,mm ... odis 216- 4 214

0 1 2

odis 1 odis 5

0 1 2 ...

odis 2 odis 6

0 1 2 ...

odis 3 odis 7

odis 216- 3

214

odis 216- 2

214

odis 216- 1

MAR 14 bit

MBR 16 bit

Adreso tradicinje komandoje du jauniausi bitai nustato blok {0, 1, 2, 3}, o lik 14 bit nurodo adres bloke. Todl tokiu atveju registro MAR dydis bt 14 bit. 6. Aritmetinis loginis renginys daniausiai turi sudties komand, kartais atimties, paprastai logines komandas (and, or, ...). Komand sistema mikrolygyje sudaroma taip, kad i vienos puss bt galima realizuoti visus matematinius veiksmus, o btinas minimumas yra sudtis, nes atimtis tai yra sudtis su papildomu kodu, daugyba daug sudi cikle, o dalyba daug atimi. Logins komandos: p 0 0 1 1 Q 0 1 0 1 pq and 0 0 0 1 pq or 0 1 1 1 p^q
exclusiveor

0 1 1 0

pq equivalent 1 0 0 1

p/q nand 1 1 1 0

p q = (p / q) / (p / q) p q = (p / p) / (q / q) p ^ q = ( (p / p) / q ) / ( p / (q / q) ) p q = (p / q) / ( (p / p) / (q / q) )

3.2.

Mikrokomandos

Pagrindin komanda yra persiuntimas i registro registr. Persiuntimas tarp registr gali bti: 1. Tiesioginis 2. Asimetrinis 3. Dalinis 4. Grupinis

KOMPIUTERI ARCHITEKTRA
Daniausiai naudojamas tiesioginis persiuntimas: registras 1 registras 2

Asimetriniame persiuntime i-tasis bitas pereina (i + k) tj bit, kai k > 0 arba k < 0: registras 1 0 registras 2 Dalinis persiuntimas yra tada, kai vieno registro dalys yra persiuniamos vairiems registrams, neilaikant bit numeracijos, o tik nuoseklum: registras 1

registras 2

registras 3

registras 4

Esant grupiniam perdavimui vairi registr turini dalys perduodamos vienam registrui: registras 1 0 registras 4 Pavyzdiui, postmio renginys veiksmui atlikti naudoja laikin registr ir asimetrin persiuntim registras 1 registras 2 bei tiesiogin persiuntim registras 2 registras 1. Postmis per N bit gaunamas pakartojus postm N kart. Postmis kit pus gali bti gautas tuo paiu renginiu, bet tam reikia turti kit magistral, kuri realizuoja kitos krypties asimetrin persiuntim. Kita komanda yra uraymas atmint ir skaitymas i atminties. Uraymui ir skaitymui gali bti viena bendra arba dvi skirtingos komandos. Treia komanda yra slygin. Tai yra arba speciali komanda, kuri tikrina bit, arba komandoje laukas (mask) naudojamas kartu su kokiu tai kitu registru (rezultato poymis). 0 0 registras 2 0 0 registras 3 0 0

10

KOMPIUTERI ARCHITEKTRA

3.3.

Interpretuojamas lygis

Panagrinsime konkret tradicin komand lyg, kuris realizuojamas interpretavimo bdu ir vadinamas interpretuojamu lygiu. Tegul turime virtuali main su 16 bit odiais, kurie adresuojami 0, 1, 2, , 213 odi, o bait 214 . Adresinio registro ilgis yra 13 bit, buferinio registro ilgis yra 16 bit. 0 1

...

213-1 16 bit

komand skaitliukas registrai steko virn

13 bit

OPK

adresas

3 bitai

13 bit

komand formatai

111

OPK

13 bit

Tegul naudojamas stekinis atminties organizavimo principas, kai komandos operuoja su informacija, esania steko virnje, ir todl tokios komandos neturi adreso lauko. 11

KOMPIUTERI ARCHITEKTRA Tam, kad upildyti stek ir paimti i steko saugojimui, naudojamos vieno adreso komandos. Be to adresins komandos naudojamos ir beslygiam bei slyginiam valdymo perdavimui. Slygins valdymo perdavimo komandos paima i steko virns od, j patikrina ir priklausomai nuo patikrinimo rezultat perduoda valdym. Procedros ikvietimo komanda grimo adres talpina stek, o valdym perduoda pagal adres. Aritmetins komandos pradioje paima antr operand, po to pirm operand ir rezultat patalpina stek. Aritmetiniai veiksmai gali bti atliekami su skaiiais papildomu kodu. Komandos: PUSH 000 M

Komanda PUSH atminities odis su adresu M patalpinamas steko virn. POP 001 M

Komanda POP i steko virns paimama reikm (odis) ir uraoma adresu M. JUMP 010 M

Komanda JUMP valdymas perduodamas adresu M. JNEG 011 M

Komanda JNEG atliekamas slyginis valdymo perdavimas pereiti komand adresu M, jei steko virnje esanti reikm yra < 0 . JZER 100 M

Komanda JZER atliekamas slyginis valdymo perdavimas pereiti komand adresu M, jei steko virnje esanti reikm yra = 0. JPOZ 101 M

Komanda JPOZ atliekamas slyginis valdymo perdavimas pereiti komand adresu M, jei steko virnje esanti reikm yra >= 0. CALL 110 M

Komanda CALL valdymas perduodamas adresu M, o grimo adresas isaugomas steke. ADD

111

00

0000

Sudtis: i steko paimti operandus T ir S, juos sudti ir rezultat S + T urayti stek. SUB 111 00 0001

12

KOMPIUTERI ARCHITEKTRA Atimtis: i steko paimti operandus T ir S, atimti ir rezultat S - T urayti stek. 111 0 0 0010 Daugyba: i steko paimti operandus T ir S, juos sudauginti ir rezultat S T urayti stek. DIV 111 00 0011 MUL

Dalyba: i steko paimti operandus T ir S, padalinti ir rezultat S / T urayti stek. RETURN 111 00 0100

Komanda RETURN i steko virns paimamas grimo adresas ir juo perduodamas valdymas. Yra galimas beadresini komand prapltimas, pavyzdiui, logini operacij komandomis.

3.4.

Interpretuojantis lygis

Interpretuojanio lygio architektra turi 15 registr, 39 magistrales su ventiliais, 16-os bit sumatori ir postmio per viena bit rengin. Registrai: PC interpretuojamos mainos komand skaitliukas, registras yra 13 bit; SP interpretuojamos mainos steko rodykl, registas yra 13 bit; IR 16 bit registras interpretuojamos mainos vykdomos komandos saugojimui; MAR 13 bit interpretuojamos mainos adresinis registras; MBR 16 bit interpretuojamos mainos buferinis registras; A B C D mikroprogram darbiniai registrai, 16 bit;

X mikroprogram cikl skaitliukas, 16 bit; Yra dar penki registrai su pastoviomis reiksmmis: +1 0 konstantiniai -1 registrai; 15 SIGN registro reikm yra - 32768

13

KOMPIUTERI ARCHITEKTRA Aritmetinis loginis renginys (ALI). ALI susideda i sumatoriaus, kurio jime yra du eioliktainiai skaiiai, o ijime yra vienas skaiius suma, ireikta papildomu kodu, kuris ikart paduodamas postmio renginiui. Postmis gali bti kair arba dein, pastmus atsiranda nuliniai bitai. enklo bitas stumiant deine nepereina jauniausi bita (pvz., pastmus per vien dein reikm 1000 0000, turtume 0000 0000). Magistrals ir ventiliai. I. Sumatoriaus jimas. Kairysis jimas 1. X S naudojama atmimui 1 i X, cikl skaiiavimui. 2. SP S naudojama vienu padidinti arba sumainti SP steko virn. 3. PC S naudojama PC perdavimui atmint per MBR (PC dydis yra 16 bit, MBR dydis yra 13 bit, taigiploi skirtumas yra 3). 4. A S naudojama aritmetinse operacijose bei perduodant D ir MBR. 5. B S naudojama aritmetinse operacijose bei perduodant A, D ir MBR. 6. MBR S naudojama aritmetinse operacijose. 7. +1 S naudojama pridti 1 prie registre esanios reikms. 8. 0 S naudojama persiuntimui, pavyzdiui C A . 9. -1 S naudojama atimti 1 i registro. 10. SIGN S naudojama 32 bit postmiuose, kurie reikalingi sujungus du 16 bit registrus, taip pat perneimo bit skaitymui. Deinysis jimas. 11. SIGN S analogikai 10 magistralei. 12. -1 S analogikai 9 magistralei. 13. 0 S analogikai 8 magistralei, naudojama perdavimui i A arba B D arba MBR. 14. +1 S analogikai 7 magistralei. 15. MBR S analogikai 6 magistralei. 16. C S naudojama aritmetinse operacijose bei perdavimui i C A, D ir MBR 17. 0 S naudojama aritmetinse operacijose bei perdavime i D A, MBR. II.Perdavimas i registro registr. 18. IR PC naudojama vykdant valdymo perdavimo komandas, magistrals plotis yra 13 bit. 19. PC MAR naudojama komandos pamimui i atminties. 20. SP MAR naudojama darbui su steko virne. 21. IR MAR naudojama komandoms PUSH ir POP. Magistrals plotis 13 bit. 22. MBR IR naudojama vykdomos komandos pamimui. 23. MBR A 24. MBR B registr 25. MBR C ukrovimas 26. MBR D

14

KOMPIUTERI ARCHITEKTRA 27. 15 X suformuoti. naudojama ciklinje operacijoje pradinei skaitliuko reikmei

III.Papildomo kodo sukrimas ir postmis. 28. Kai i magistral atidaryta, kairysis signalas patenka sumatori papildomu kodu. 29. Kai i magistral atidaryta, deinysis signalas patenka sumatori papildomu kodu. 30. Kai i magistral atidaryta, sumatoriaus ijimo signalas pastumiamas per vien bit kair prie perduodant primjui registrui. 31. Kai i magistral atidaryta, sumatoriaus ijimo signalas pastumiamas per vien bit dein prie perduodant primjui registrui. IV.Sumatoriaus jimas. 32. S X naudojama ciklinse operacijose keiiant X reikm nuo 15 iki -1. 33. S A naudojama rezultatui urayti registr A. 34. S SP naudojama atliekant veiksmus su steku, vienu didinant arba mainant SP steko virns registr. 35. S PC naudojama perjime prie sekanios komandos. 36. S MBR naudojama rezultatui urayti atmint. 37. S D naudojama rezultatui urayti registr D. V.Apsikeitimas su interpretuojamos mainos atmintimi. 38. MBR i atminties imamas odis, kurio adresas yra MAR, ir jis uraomas atmint. 39. MBR odis, esantis MBR uraomas atmint adresu MAR. Magistral, jungianti registr MAR su interpretuojamos mainos atmintimi, neturi ventilio. Todl signalas, einantis ia magistrale, nra programikai valdomas. i magistal visada yra atidaryta. Perdavimas i registro gali bti lygiagretus, bet perdavimas registr turi bti nuoseklus.

15

KOMPIUTERI ARCHITEKTRA Mikroprograminio lygio architektra interpretuojamos mainos atmintis

MAR PC IR SP

MBR

15

+1

-1

SIGN

16

KOMPIUTERI ARCHITEKTRA Ventili darbas Interpretuojamos mainos komanda ADD gali btu vykdyta per keturis ingsnius: 1. Paimti antr operand i steko ir urayti registr. 2. Paimti pirm operand i steko ir urayti registr. 3. Suformuoti sum. 4. Sum urayti stek. ie keturi ingsniai gali bti vykdyti per tris ciklus, inicijuojamus taktiniais impulsais. Atidarant ir udarant ventilius valdoma perdavim sinchronizacija: ryyje registras 1 registras 2 registras 3, perduoti registras 2 registras 3 galima tik tada, kai registras 1 registras 2 signalas jau atjo. Prieingu atveju gali kilti neapibrtumas to, kas bus paduota registr 3 . Pocikliai Tam, kad ivengti neapibrtum yra vedami pocikliai. Pirmame pociklyje gali bti atidarytos magistrals 1 29 ; antrame pociklyje magistrals 30 37 ; treiame pociklyje 38 arba 39 magistrals. Pirmame pociklyje atliekamas apsikeitimas tarp registr; antrame pociklyje atliekami veiksmai sumatoriuje, postmio renginyje, rezultatai paduodami registrus; treiame pociklyje apsikeiiama su atmintimi. Realiai atminties ciklas yra didesnis nei procesoriaus ciklas, bet paprastumo dlei tai nekreipiame dmesio.

3.5.

Komandos ADD realizacija

Tegul komanda jau yra registre IR ir yra nustatytas operacijos kodas. Tegul steke yra: 6 4 0 5 SP 2 1000 1001 1002 1003 1004 SP Rezultatas bus: 6 4 0 7 1000 1001 1002 1003

17

KOMPIUTERI ARCHITEKTRA Pocikliai ciklas1 1 2 3 1 2 3 1 2 3 SP 1004 1004 1003 1003 1003 1003 1003 1003 1003 MAR ? 1004 1004 1004 1003 1003 1003 1003 1003 MBR ? ? ? 2 2 2 5 5 7 A ? ? ? ? 2 2 2 2 2 Schemos 20, 2, 12 34 38 20, 23 38 4, 15 37 39

ciklas 2

ciklas 3

Pavaizduosime schematikai magistrali atidarym, realizuojant sudties komand:

2 20 12 4 15 23 34 36 38 39 ciklas 1 ciklas 2 ciklas 3

18

KOMPIUTERI ARCHITEKTRA

3.6.

Ventili mikroprograminis valdymas

Tam, kad gauti interpretuojamos mainos programos vykdymo efekt, reikia atitinkamais laiko momentais atidarinti ir udarinti atitinkamus ventilius. Interpretuojanio lygio komand sistema susideda i dviej komand: GATE ir TEST. Operacijos kodas yra reikm 1 (komanda GATE) arba 0 (komanda TEST) deiniajame bite. Mikrokomanda TEST naudojama mikrokomand GATE vykdymo nuoseklumui pakeisti, priklausomai nuo tam tikr slyg. GATE ... 39 ... ... ... ... 3 2 1 1 0

Nulinis bitas yra operacijos kodas. Likusieji 39 komandos bitai atitinka 39 ventilius, bito reikm 1 reikia, kad atitinkamas ventilis turi bti atidarytas, o bito reikm 0 reikia, kad atitinkamas ventilis turi bti udarytas. I viso komanda uima 40 bit. Mikroprograma, ireikianti sudt:
39 38 37 35 34 33 24 23 22 21 20 19 16 15 14 13 12 11 4 3 2 1 0

0 0 1

1 1 0

0 0 1

.. .. ..

0 0 0

1 0 0

0 0 0

.. .. ..

0 0 0

0 1 0

0 0 0

0 0 0

1 1 0

0 0 0

.. .. ..

0 0 0

0 0 1

0 0 0

0 0 0

1 0 0

0 0 0

.. .. ..

0 0 1

0 0 0

1 0 0

0 0 0

1 1 1

TEST x 39 33 26 25 24 8 bit adresas 16 bit 9 8 1 0 nurodo registr

1 8 bitais pasakome, kuris registras dalyvaus slygos formulavime: bito, atitinkanio registr, reikm yra 1. 1-as bitas atitinka registr A; 2-as bitas atitinka registr B; 3-as bitas atitinka registr C; 4-as bitas atitinka registr D; 5-as bitas atitinka registr MBR; 6-as bitas atitinka registr X; 7-as bitas atitinka registr IR; 8-as bitas atitinka registr . Registrai yra 16 bit. 9 24 bite reikm 1 nurodo, kuris nustatyto registro bitas dalyvaus slygos formulavime. 9-tas bitas atitinka nulin registro bit, 24-tas bitas atitinka penkioliktj registro bit.

19

KOMPIUTERI ARCHITEKTRA 25-tas bitas yra konstanta, jis yra palyginimo bitas. Kiekviena mikrokomanda TEST apibria vien tikrinam bit i 128 galim. Tokiais bitais yra registr A, B, C, D, MBR, X, IR, visi 16 bit (8 16 = 128). Jeigu nustatytas bitas ir 25-tasis komandos bitai sutampa, tai mikrokomand vykdymo nuoseklumas pakinta ir sekanios vykdomos mikrokomandos adresas nustatomas mikrokomandos TEST 26 33 bitais. Prieingu atveju vykdymo nuoseklumas nepasikeiia. Bit grupse 1 8 ir 9 24 tik vieno bito reikm kiekvienoje grupje gali bti 1. Kadangi mikrokomandos ilgis yra 40 bit, dar turime nepanaudotus 26 39 bitus, t.y., 14 bit. Galtume jais adresuoti 214 mikroatminties odi (mikroatminties odio ilgis yra 40 bit). Taiau interpretatoriui parayti pakanka 28 = 256 mikroatminties odi, todl adresui nurodyti naudojame 8 bitus, t.y., 26 33 bitus, o likusieji 34 39 yra nenaudojami. Mikroprograma saugoma mikroatmintyje, kuri logikai skiriasi nuo interpretuojamos mainos atminties. Fizikai abi atmintys gali bti realizuotos neatskirtos, tik paskirstant dvi dalis. Mikroatminties odio ilgis yra 40 bit. Kaip jau buvo minta, apsiribosime 28 odi adresine erdve. Mikroprograminio lygio architektroje turi bti mikrokomand skaitliukas, atminties adresinis registras, atminties buferinis registras, mikrokomand vykdymo registras. Dl mikroprograminio lygio paprastumo atminties adresin registr galima sutapatinti su mikrokomand skaitliuku, o atminties buferin registr su mikrokomand vykdymo registru. MPC bus mikroprogramos komand skaitliukas, o MIR mikrokomand interpretavimo (vykdymo) registras. Apraysime centrinio procesoriaus darb. Taktinis impulsas uduoda naujo ciklo pradi. Atminties odis su adresu i MPC uraomas registr MIR. Jeigu tai yra mikrokomanda GATE, tai atitinkami ventiliai, nurodyti vienetiniais bitais, atidaromi atitinkamo pociklio bgyje. Jeigu tai yra mikrokomanda TEST, tai nustatomas reikiamas bitas ir jis patikrinamas. Jeigu bitai sutampa, tai mikrokomandos bitai 26 33 pasiuniami MPC. Mikrokomanda yra ivykdoma ciklo bgyje, o atitinkami ventiliai atidaromi atitinkamame pociklyje. Sudarant mikroprogramas galima operuoti 40 bit komandomis, bet galimas ir kitas kelias, kai pradioje apibriamos ir realizuojamos bazins operacijos mikrokomand lygyje. Vliau reikalingos mikroprogramos gaunamos atitinkamos programos, sudarytos interpretuojamos mainos kalba, darbo rezultate.

20

KOMPIUTERI ARCHITEKTRA Interpretuojanios mainos architektra 40 bit 0 1 2


Mikroatmintis 256 40 bit odiai

16 bit 0

13 bit MAR MBR

...

16 bit

255
Mikrokomand skaitliukas Interpretuojamos mainos atmintis 213 = 8192 16 bit odi

MPC 8 bitai

MIR 40 bit
Mikrokomand vykdymo registras

+1 0
16 bit sumatorius

-1 15 SIGN A B C D X IR 16 bit 13 bit PC IP 213-1


postmio per 1 bit renginys

21

KOMPIUTERI ARCHITEKTRA

3.7.

Mikroprogramavimo kalba

Programuoti mikrokomand kodais yra labai sudtingas darbas ir todl reikalinga mikroprogramavimo kalba. Naudosime kalb MPL (Mikro Programming Language) . Ypatumas yra tame, kad mikrokomandos uduoda lygiagreiai vykdomus veiksmus, persiuntimus vairiomis magistralmis. Kiekviena MPL eilut apibria vien mikrokomand, net jeigu vienoje eilutje yra keli MPL operatoriai. Mikroprogramos vienos eiluts operatoriai vykdomi lygiagreiai. Mikrokomandos GATE programavimas. Perdavimai tarp registr nurodomi priskyrimo operatoriais. Pavyzdiui: A = MBR; reikia, kad 23 magistral vykdant operatori yra atidaryta. Operatori nuoseklumas yra nesvarbus eiluts ribose. A = MBR; MAR = IR; X = 15; MAR = 12; X = 15; A = MBR; Abi eiluts reikia t pat 21, 23 ir 27 magistrali atidarym. Taiau operatoriai : A = MBR ; MAR = IR ; X = 15; reikia tris atskiras mikrokomandas. Sumatoriaus panaudojimas nurodomas operacija + . MBR = A + C; reikia 4, 16 ir 36 magistrali atidarym. SP = SP + (-1); reikia 2, 12 ir 34 magistrali atidarym. Tai yra steko rodykls sumainimas vienetu. A = MBR; PC = PC + 1; reikia 3, 14, 23 ir 35 magistrali atidarym. D = 0 + C; reikia 8, 16 ir 37 magistrali atidarym. Registrai C ir D tiesiogiai nesujungti, todl nordami perduoti i C D naudojams sumatoriumi. Atvirktinis kodas gaunamas atidarant 28 arba 29 magistrales. Tok veiksm atitinka funkcija COM. 28 ir 29 magistrals valdo reikms konvertavim, taiau norint gauti reikm su prieingu enklu, reikia dar pridti vienet. Pavyzdiui, nordami i 5 gauti -5, elgiams taip: 0000 0101 = 5 1111 1010 invertavimas 1 pridedame vienet 1111 1011 = -5 Pavyzdiui: MBR = COM(MBR) + 1; reikia 6, 14, 28, 36 magistrali atidarym. Tai yra buferiniame registre esanios reikms enklo pakeitimas. A = 0 + COM(SIGN); reikia 8, 11, 29, 33 magistrali atidarym. Tai yra maksimalios teigiamos reikms priskyrimas registrui A.

22

KOMPIUTERI ARCHITEKTRA Sumatoriaus ijime reikm galima pastumti per vien bit pasinaudojant magistralmis 30 ir 31. Postmiai kair arba dein nurodomi funkcijomis LEFT_SHIFT ir RIGHT_SHIFT. Pavyzdiui: MBR = LEFT_SHIFT(1 + 1); reikia 7, 14, 30, 36 magistrali atidarym. Tokiu veiksmu buferin registr uraome reikm 4. A = RIGHT_SHIFT(A + 0); reikia 4, 13, 31, 33 magistrali atidarym. Tokiu veiksmu registr A uraoma jame buvusi reikm, padalinta i dviej. Apsikeitimas su atmintimi (skaitymas ir raymas) yra atliekamas panaudojant funkcij MEMORY(MAR), kuri iaukia 38 arba 39 magistrals atidarym. Mikrokomandos TEST uraymas. IF BIT(k, reg) = b THEN GOTO label; k yra bito numeris registre, k = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; reg yra registras, reg = {A, B, C, D, MBR, IR, X, }; b atitinka 25-t komandos TEST bit, b = {0, 1}; label nurodo vard (ym yra simbolinis vardas), kuriuo perduodamas valdymas, atitinka 26 33 komandos TEST bitus. Jeigu b = 0, reg = ir k yra bet kuris bitas, tada valdymo perdavimas yra beslyginis, tai yra uraoma GOTO label. Pavyzdiai: IF BIT(13, IR) = 1 THEN GOTO POP; IF BIT(15, X) = 0 THEN GOTO NULLOOP; I esms, MPL yra asemblerio lygio kalba, nes ji leidia valdyti generuojam kod.

23

KOMPIUTERI ARCHITEKTRA Operacijos kodo deifratoriaus algoritmas 0 0 1 1 0 1

IR15

IR14

IR14

0 PUSH

IR13

1 POP

0 JUMP

IR13

IR13

1 JPOS

IR13

JNEG JZER

CALL 0
IR2

IR1

RETURN 1

0 ADD

IR0

IR0

1 DIV

SUB MUL

is operacijos dekodavimo bdas yra nepakankamai efektyvus. Jeigu operacijos kodas bt 8 bit, tai reikt iki 8 mikrokomand TEST. Tam, kad to ivengti, galima bt panaudoti operacijos kodo reikm kaip modifikacij perduodant valdym mikrokomandai, apdorojaniai atitinkam operacij. Tiksliau tai bt mikrokomandos TEST, kurios perduot valdym atitinkamos interpretuojamos komandos apdorojimo mikroprogramin ak. Taigi tegu operacijos kodas yra 8 bitai ir tegu komandos ADD operacijos kodas yra 0000 0000, komandos MUL operacijos kodas yra 0000 0001, ir t.t., tada aukiau aprayta sprendim galima pavaizduoti taip: 0 1
JUMP ADD JUMP MUL MUL apdorojimo mikroprograma . ADD apdorojimo mikroprograma

255 JUMP DIV

DIV apdorojimo mikroprograma

Tokios galimybs realizacijai reikt dalinai modofikuoti ms interpretuojanios mainos architektr.

24

KOMPIUTERI ARCHITEKTRA

3.8.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

Interpretuojamos maimos interpretatorius


MAINLOOP: MAR = PC; MBR = MEMORY(MAR); IR = MBR; PC = PC + 1; IF BIT(15, IR) = 1 THEN GOTO OP4567; IF BIT(14, IR) = 1 THEN GOTO OP23; IF BIT(13, IR) = 1 THEN GOTO POP; PUSH: MAR = IR; SP = SP + 1; MBR = MEMORY(MAR); MAR = SP; MEMORY(MAR) = MBR; GOTO MAINLOOP; POP: MAR = SP; SP = SP + (-1); MBR = MEMORY(MAR); MAR = IR; MEMORY(MAR) = MBR; GOTO MAINLOOP; OP23: IF BIT(13,IR) = 1 THEN GOTO JNEG; JUMP: PC = IR; GOTO MAINLOOP; JNEG: MAR = SP; SP = SP + (-1); MBR = MEMORY(MAR); IF BIT(15, MBR) = 1 THEN GOTO JUMP; GOTO MAINLOOP; OP4567: IF BIT(14, IR) = 1 THEN GOTO OP67; IF BIT(13, IR) = 1 THEN GOTO JPOS; JZER: MAR = SP; SP = SP + (-1); MBR = MEMORY(MAR); IF BIT(15, MBR) = 1 THEN GOTO MAINLOOP; MBR = MBR + (-1); IF BIT(15, MBR) = 1 THEN GOTO JUMP; GOTO MAINLOOP; JPOS: MAR = SP; SP = SP + (-1); MBR = MEMORY(MAR); IF BIT(15, MBR) = 0 THEN GOTO JUMP; GOTO MAINLOOP; OP67: IF BIT(13,IR) = 1 THEN GOTO OP7; CALL: SP = SP + 1; MAR = SP; MBR = PC + 0; MEMORY(MAR) = MBR; GOTO JUMP; OP7: IF BIT(2, IR) = 1 THEN GOTO RETURN; IF BIT(1, IR) = 1 THEN GOTO MULDIV; ADDSUB: MAR = SP; SP = SP + (-1); MBR = MEMORY(MAR); IF BIT(0, IR) = 0 THEN GOTO SUM; MBR = COM(MBR) + 1; SUM: MAR = SP; A = MBR; MBR = MEMORY(MAR): MBR = A + MBR; MEMORY(MAR) = MBR; GOTO MAINLOOP; MULDIV: IF BIT(0, IR) = 1 THEN GOTO DIV; MUL: MAR = SP; SP = SP + (-1); MBR = MEMORY(MAR); C = MBR; MAR = SP; MBR = MEMORY(MAR); X = 15; A = 0 + 0; D = 0 + 0; IF BIT(15, MBR) = 0 THEN GOTO MULLOOP; MBR = COM(MBR) + 1; B = MBR; MBR = 1 + COM(C); C = MBR; MBR = B + 0; MULLOOP: IF BIT(0, MBR) = 0 THEN GOTO NOADD; 25

KOMPIUTERI ARCHITEKTRA 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 A = A + C; NOADD: MBR = RIGHT_SHIFT(MBR + 0); D = RIGHT_SHIFT(0 + D); IF BIT(0,A) = 0 THEN GOTO NOCARRY; D = SIGN + D; NOCARRY A = RIGHT_SHIFT(A + 0); IF BIT(15, C) = 0 THEN GOTO MULEND; IF BIT(14, A) = 0 THEN GOTO MULEND; A = A + SIGN; MULEND: X = X + (-1); IF BIT(15, X) = 0 THEN GOTO MULLOOP; MBR = 0 + D; MEMORY(MAR) = MBR; GOTO MAINLOOP; DIV: MAR = SP; SP = SP + (-1); MBR = MEMORY(MAR); C = MBR; B = MBR; MAR = SP; A = 0 + 0; MBR = MEMORY(MAR); D = MBR; MBR = COM(MBR) + 1; X = 15; IF BIT(15, MBR) = 1 THEN GOTO DIVPOS; D = MBR; MBR = COM(B) + 1; B = MBR; DVDPOS: MBR = 1 + COM(C); IF BIT(15, C) = 0 THEN GOTO DIVLOOP; C = MBR; MBR = COM(MBR) + 1; DIVLOOP: A = LEFT_SHIFT(A + 0); IF BIT(15, D) = 0 THEN GOTO NOCARRY2; A = A +1; NOCARRY2: D = LEFT_SHIFT(0 + D); A = A + MBR; IF BIT(15, A) = 1 THEN GOTO DIVNEG; D = D + 1; DIVNEG: IF BIT(15, A) = 0 THEN GOTO DIVPOS; A = A + C; DIVPOS: X = X + (-1); IF BIT(15, X) = 0 THEN GOTO DIVLOOP; IF BIT(15, B) = 0 THEN GOTO DIVEND; D = 1 + COM(D); DIVEND: MBR = 0 + D; MEMORY(MAR) = MBR; GOTO MAINLOOP; RETURN: MAR = SP; SP = SP + (-1); MBR = MEMORY(MAR); IR = MBR; GOTO JUMP;

Daugybos algoritmas. Atliekama daugyba stulpeliu i karto kaupiant dalini sandaug sum. Pavyzdiui: 1101 1001 1101 0000 sumuojamos dalins 0000 sandaugos 1 1 0 1_____ 1110101

26

KOMPIUTERI ARCHITEKTRA Registrai A ir D naudojami kaip 32 bit sumatorius: 16 vyresni bit yra registre A ir 16 jaunesni bit yra registre D. A D

32 bitai Dauginamasis yra registre C, o daugiklis yra registre MBR. Interpretatoriaus eiluts 40 46 formuoja pradines registr reikmes. Jomis yra suformuojama tokia pradin situacija, kad antrasis operandas daugiklis bt >= 0 . Jeigu antrasis operandas buvo neigiamas, tai tada pakeiiami abiej operand enklai, ir rezultate sandauga nepasikeiia. enkl keitim reikia atlikti naudojant registr MBR, nes registras C turi jim tik i MBR. Laikinam MBR reikms saugojimui panaudojamas registras D. Tam, kad nereikt dalini sandaug vis pridti prie skirting bit, pridedant prie registro A, atliekamas pastmimas dein. Registre A prie pastmim dein yra patikrinama, ar nuliame registro bite yra 1, jeigu taip, tai j reikia perneti registr D. Tok perneim atliekame priddami registre SIGN esani reikm. Tada pastumiame dein. Registre A enklo bito pltimas irgi atliekamas pastmimu dein.Registre A tikriname 14-to bito reikm, nes nulis 15-tame bite gali bti ir dl to, kad dar nieko neurame registr A. Reikia patikrinti, ar buvo postmis, t. y, ar 14-tame bite yra 1 postmio rezultate atjs enklo bitas. 16 bit perpildymas aparatrikai nra fiksuojamas. Dalybos algoritmas. Surandama skaiiaus dalis, kuri dalosi i daliklio. Jeigu nesidalina, tai liekana papildoma ir tikrinama, ar jau dalosi. Jeigu ne, tai liekana pleiama ir dalmenyje priraomas 0. Jeigu dalosi, tai dalmenyje priraomas 1 ir veiksmas vl kartojamas. Pradioje gaunamas absoliuios abiej operand reikms. Jeigu reikia, tai neigiama reikm rezultatui priskiriama jau padalinus. 32 bit sumatorius suformuojamas i registro A (kairioji pus) ir registro D (deinioji pus). Tam, kad efektyviai atlikti atimt, daliklio absoliuios reikms papildomas kodas saugomas registre MBR. Jeigu atmus i dalomojo gavosi neigiamas skaiius, tam, kad atstayti jo reikm (anuliuoti atimt), daliklio absoliuti reikm saugoma registre C. Jeigu pirmas operandas >= 0, tai registre B saugoma antro operando reikm. Jeigu pirmas operandas < 0, tai regsitre B saugomas antro operando papildomas kodas. Rezultato enklas bus toks pat, kaip ir reikms, saugomos registre B.

27

KOMPIUTERI ARCHITEKTRA

3.9.

Mikroprograminio lygio projektavimas

Mikrokomandos, kuri kiekvienas bitas yra susietas su atskiru ventiliu, pasiymi struktros ir realizacijos paprastumu. Taiau kompiuterio ventili skaiius gali siekti kelis imtus. Mikrokomanda, uimanti kelis imtus bit, yra pernelyg ilga, uima perdaug mikroatminties. Pagal mikroproprograminio lygio architektr, ne bet kokie ventiliai kuriuo tai laiko momentu gali bti atidaryti. Pavyzdiui, kairj sumatoriaus jim gali bti paduotas tik vienas signalas i deimties galim. Jiems koduoti pakanka 4 bit. deinj jim gali bti paduotas tik vienas i 7 galim signal. Jam koduoti pakanka 3 bit. Praktikoje sumatoriaus ijimas nukreipiamas tik vienu keliu. Todl reikalingas tik vienas signalas i 6 galim. Jam koduoti pakanka 3 bit. Todl 23 ventili darbas gali bti ukoduotas 10 bit. Toks mikrokomand formatas vadinamas koduojamu. Koduojamo formato trkumas yra tas, kad kiekvienam koduojamam laukui reikalingas deifratorius, kuris lauko reikm pervest ventilio numer. Koduojant prarandamas tam tikras lankstumas uduodant lygiagreius veiksmus. koduojam lauk paprastai traukiami vienu metu nesuderinami ventiliai. Galimas sprendimas yra modifikuoti informacinius kanalus, vedant tris bendras magistrales ir nauj registr E.

28

KOMPIUTERI ARCHITEKTRA PC SP IR MAR


interpretuo jamos mainos atmintis

MBR A B C D E X +1 0 -1 SIGN 15

29

KOMPIUTERI ARCHITEKTRA Tokios architektros mikroprograminio lygio komandos gali bti tokios: GATE
LEFT RIGHT OUTPUT COMPL SHIFT
MEMORY 1

4 bitai

4 bitai

4 bitai 19 bit

2 bitai

2 bitai

2 bitai 1bitas

TEST ///
ADDRESS C BIT REGISTER 0

1 bitas REGISTER 0 = 1 = 2 = 3 = 4 = 5 = 6 = 7 = 8 = 9 = 10 = 11 = 12 = 13 = 14 = 15 = COMPL 0 1 2 3 SHIFT 0 1 2 3 = = = = = = = =

8 bitai

1 bitas 19 bit

4 bitai

4 bitai

1 bitas

( 0000 )2 ( 0001 )2 ( 0010 )2 ( 0011)2 ( 0100 )2 ( 0101 )2 ( 0110 )2 ( 0111 )2 ( 1000 )2 ( 1001 )2 ( 1010 )2 ( 1011 )2 ( 1100 )2 ( 1101 )2 ( 1110 )2 ( 1111 )2 ( 0000 )2 ( 0001 )2 ( 0010 )2 ( 0011 )2 ( 0000 )2 ( 0001 )2 ( 0010 )2 ( 0011 )2

PC SP IR MAR MBR A B C D E X +1 0 -1 SIGN 15 abiems jimams atvirktinio kodo neskaiiuoti skaiiuoti atvirktin kod kairiajam operandui skaiiuoti atvirktin kod deiniajam operandui abiems oprerandams skaiiuoti atvirktin kod. ijimo nestumti stumti kair per 1 bit stumti dein per 1 bit nenaudojamas

30

KOMPIUTERI ARCHITEKTRA MEMORY 0 = 1 = 2 = 3 = ( 0000 )2 ( 0001 )2 ( 0010 )2 ( 0011 )2 nra apsikeitimo su atmintimi skaityti i atmintes rayti atmint nenaudojamas

BIT bito registre nurodymas C 0 1 = ( 0000 )2 = ( 0001 )2 perduoti valdym, jei tikrinamas bitas yra 0 perduoti valdym, jei tikrinamas bitas yra 1

ADDRESS mikrokomandos absoliutus adresas, kuriai perduodamas valdymas. Architektra, kuri nagrinjome anksiau, yra vadinama horizontalia. Joje kiekvienas bitas nurodo ventil, taip gaunama ilga mikrokomanda. Architektra, kuri nagrinjame dabar, vadinama vertikalia. Joje naudojami koduojami laukai ir taip gaunama trumpa mikrokomanda. Horizontali struktra utikrina didesn paralelizm, yra efektyvesn, reikia maiau mikrokomand, taiau jos yra ilgesns. Taiau jeigu tokioje architektroje yra N registr, tai tarp j reikia 2N magistrali. Todl jeigu registr yra daug (N yra didelis), kompiuteris yra nehorizontalios architektros. Kita vertus, lygiagretus perdavimas vienu metu paprastai vykdomas tik trijose magstralse, ir didelis registr skaiius ia neturi jokios takos. Jeigu maina yra vertikalios architektros, tai iskirtins magistrals (intensyviai naudojamos) gali bti realizuotos horizontaliu principu. Atminties cikl trukm Procesoriaus ciklas beveik pilnai apsprendiamas mikroatminties ciklo dydiu. Pagrindins atminties ir mikroatminties cikl dydi santykis yra viena i pagrindini kompiuterio darbini charakteristik.Interpretuojamos mainos atmintis yra ltesn u interpretuojanios mainos atmint. Vykdant interpretuojam komand, pagrindin atmint paprastai reikia kreiptis vien ar du kartus, o mikroatmint deimtis ar net imtus kart. Danai praktikoje tas santykis yra 1, nes abiems loginms atmintims naudojama ta pati fizin atmintis. Mikroatmint yra stengiamsi padaryti greitesne, netgi naudojant pastovi atmint, prieinam tik skaitymui. Tegul atminties cikl santykis yra 10 : 1. Tarkime, kad atliekama komanda PUSH: 1 10 5 10 1 10 1

1.

2.

3.

4.

5.

6.

7.

31

KOMPIUTERI ARCHITEKTRA 1. Interpretuojamos komandos skaitymo inicijavimas. 2. Interpretuojamos komandos nuskaitymo laukas. 3. Komandos dekodavimas ir operando skaitymo inicijavimas. 4. Operando skaitymo laukimas. 5. Raymo inicijavimas. 6. Raymo pabaigos laukimas. 7. Perjimas pagrindin cikl. ia 79% laiko procesorius laukia ir yra nenaudojamas. Tam, kad sumainti laik, kada procesorius nenaudojamas, reikia arba greitinti pagrindin atmint, arba ilygiagretinti (suderinti laike) interpretuojamos mainos komand valdym. Pavydiui, vykdant dalybos komand, reikia madaug 150 mikrokomand ir per t laik galima i anksto i atminties nusiskaityti 10 sekani interpretuojam komand. Nuskaitytas komandas reikia kur nors padti saugojimui. Galima padti papildomus registrus, bet tai apsunkina architektr, nes reikia papildom magistrali ir mikrokomandos tampa ilgesns. Taiau nuskaitytas komandas galima padti ir mikroatmint. Vien tik pasiruoti komandas i anksto nepakanka, nes tada pagrindin laukimo prieastis bus duomenys. Turint stekin main nesudtinga i steko virns nuskaityti duomenis i anksto, kad nebt laukimo dl duomen skaitymo. Kitas sprendimas yra sudaryti tokias mikroprogramas, kad bt galima utikrinti lygiagret komand interpretavim. Pradti vykdyti sekani komand, nebaigus vykdyti ankstesns, yra gana keblus udavinys ir yra prasmingas tik tada, kai tokio udavinio sprendimo greitis yra sulyginamas su skaitymo i atminties greiiu. Pavyzdiui, nra prasminga lygiagretinti tokia mikroprogram: L=I+YK PUSH I; PUSH Y; PUSH K; MUL; ADD; POP L; Ilygiagretinti reikia, turint slygin perjim. Jo atveju atsiranda dvi akos. Dar nebaigus skaiiuoti slygos reikms ir neinant, kuri ak i tikrj reiks vykdyti, galima pradti atlikti veiksmus, nurodytus kuria nors i j. IF A B C D E < 1000 THEN CALL SUB; Jeigu pasirinkta aka nepasitvirtina, reikia organizuoti grim, nes buvo ivykdyti nereikalingi priskyrimai. Statistikai slyga paprastai nepatenkinama, o patenkinama tik vien kart, nes slyga paprastai eina cikl.

32

KOMPIUTERI ARCHITEKTRA Nanoatmintis Horizontalioje architektroje paprastai naudojamas nedidelis ventili skirting kombiancij kiekis, taiau tos kombinacijos, kurios naudojamos, yra naudojamos daugel kart (pvz., skaitymas i steko). Tos skirtingos kombinacijos uduodamos mikrokomandomis (j ilgis gali bti keli imtai bit, o j skaiius 64 256), kurios saugomos nanoatmintyje. Tuomet mikroprograma yra toki nanoatminties mikrokomand adres seka. 0 1 ... Mikroatmintis 200 4095 = 819200 bit 4 K odi

4095 200 Jeigu mikroprogramoje yra ne daugiau 64 skirting odi, tada architektra galt bti tokia, kad mikroatmintyje yra adresai komand, kurios tais adresais yra saugomos nanoatmintyje: 0 ...

Mikroatmintis

0 ... 63

Nanoatmintis 64 odiai 200

4095 6

64 200 + 4095 6 = 12800 + 24576 = 37376 bit

33

KOMPIUTERI ARCHITEKTRA Taip susidaro 5% buvusio atminties dydio. ia isaugomos horizontalios struktros perdavim lygiagretumas ir vertikalios struktros atminties taupymas. Padidja procesoriaus ciklas, nes jis susideda i mikroatminties ir nanoatminties cikl Turint tiksl sumainti skirting mikrokomand skaii, labai svarbu turti valdymo perdavim santykiniais adresais. IF BIT(15, MBR) = 1 THEN SKIP n; vietoj IF BIT(15, MBR) = 1 THEN GOTO L; Mikroprograminis lygis gali bti orientuotas konkretaus interpretuojamo lygio efektyviam interpretavimui arba gali bti universalus mikroprograminis lygis, skirtas vairi architektr interpretavimui. Pagal nusistovjusias tradicijas kalb transliatoriai (ALGOL, FORTRAN,DL11, COBOL, PASCAL, C) perveda program tradicin asemblerin lyg, kuris vliau interpretuojamas. Maa yra pagrindo manyti, kad tradicinis asembleris yra optimali tarpin kalba tarp kompiliatoriaus ir interpretatoriaus. Kompiliatoriai naudoja apie 20% komand sugeneruotame kode. Mikroprogramavimo trkumas yra tas, kad efektyvumas yra maesnis apie 10 kart, o norint gauti duoto galingumo procesori, naudojant mikroprogramavim, jis turi bti 10 kart galingesnis, lyginant su aparatrine komand sistemos realizacija.

34

KOMPIUTERI ARCHITEKTRA

4. Mikroprocesoriaus Intel 8088 architektra


4.1. Mikroprocesoriaus architektros samprata

Mikroprocesoriaus architektr sudaro tos jo savybs, kurios naudojamos programavime. Mikroprocesoriaus Intel 8088 architektr sudaro aparatros ir mikroprogram visuma. Pakeitus mikroprogram rinkin, gautume nebe mikroprocesori Intel 8088, o kak kito. Mikroprocesoriaus Intel 8088 architektra realizuojama viena mikroschema su 40 ivad. Mikroprocesoriaus Intel 8088 architektra apibriama jo vidinmis savybmis ir sveika su iorinmis mikroprocesoriaus atvilgiu komponentmis. Tokiomis iorinmis kompnentmis yra: 1. Operatyvi atmintis. 2. Port (vedimo-ivedimo) sistema. 3. Adreso, duomen ir valdymo magistrals.

4.2.

Operatyvios atminties samprata

Operatyviosios atminties svoka nusakoma per priklausomyb nuo procesori, o ne savarankikai. Operatyvi atmint sudaro fizin tiesioginio prijimo tiesin adres erdv. Ji yra tiesiogiai prieinama i procesoriaus per adres magistral. Kadangi mikroprocesoriaus Intel 8088 adres magistrals plotis yra 20 bit, tai maksimali operatyvi atmintis yra 220 = 1 M. Tokiu bdu operatyvios atminties dydis priklauso ne tik nuo procesoriaus, bet ir nuo adres magistrals ploio. Pavyzdiui, mikroprocesorius Intel 80286 sudaro absoliut fizin adres 24 bituose. Todl is procesorius galet adresuoti fizin atminties erdv 224 = 16 M. Taiau realiai kompiuteryje su procesorium Intel 80286 yra realizuota 20 bit ploio adres magistral, todl tokie kompiuteriai teturi 1 M operatyvios atminties. Kalbant apie personalinius IBM kompiuterius, yra sakoma 640 K, 1 M, 2 M operatyvios atminties. Daniausiai tai yra nekorektikas pasakymas, nes ia kalbama ne apie vartotojui prieinamos operatyvios atminties dyd. Nekorektikumas yra dvejopas. Jeigu sakoma, kad yra 640 K operatyvios atminties, tai reikia, kad i ties yra 1 M tiesiogiai adresuojama atminties erdv. Jeigu yra sakoma, kad yra 1 M operatyvios atminties, tai reikia, kad vartotojui prieinama yra 640 K, 384 K atminties yra tik fizikai realizuota kaip operatyvi atmintis mikroschemomis, taiau architektrikai tai nra operatyvi atmintis. Informacija joje prieinama apsikeitimo, kaip su ioriniu renginiu, bdu, per tiesioginio prijimo prie atminties kontroler, tiesiogins atminties draiver. Personaliniuose kompiuteriuose IBM kontroleris vedimo-ivedimo specializuotas procesorius yra vadinamas adapteriu. Draiveris tai yra programa, modeliuojanti virtual iorin rengin, turint programuotojui patogi struktr. Tai yra abstrakti svoka, leidianti nusakyti

35

KOMPIUTERI ARCHITEKTRA bendravim su ioriniu reginiu programuotojui patogesniais terminais, palyginus su tais, kurie nusako, kokias komandas gali vykdyti iorinio renginio adapteris. Draiveris yra ta programa, kuri iveria, ireikia programuotojui patogesn komand kalb adapterio komand kalb. Tokiu bdu kompiuteris su procesoriumi Intel 80286 ir 24 bit adres magistrale gali turti 16 M operatyvi atmint, jeigu yra pakankamas pai operatyvios atminties mikroschem kiekis. Operatyvioje atmintyje maiausia adresuojama dalis yra 8 bit laukas baitas. Tokiu bdu operatyvios atminties adresin erdv yra bait adresin erdv nuo 0 iki 2N-1, kur ms atveju N = 20. Yra priimta baito viduje baitus numeruoti pagal pozicini skaiiavimo sistem pozicij, t.y., dvejet laipsnius. 7 6 5 4 3 2 1

alia informacijos grupavimo baitais, maininiame lygyje informacija gali bti grupuojama odiais: bet kurie greta esantys (gretimus adresus turintys baitai) sudaro od. Operatyvios atminties odio viduje yra priimtas toks atitikimas tarp bit ir odyje saugomos dvejetains reikms dvejeto laipsni: i 7 6 5 4 3 2 1 0 jaunesnysis baitas i+1 15 14 13 12 11 10 9 8

vyresnysis baitas

Mikroprocesoriaus Intel 8088 su operatyvia atmintimi susijs duomen magistrale, kurios plotis yra 8 bitai, t.y., vienu skaitymo i operatyvios atminties veiksmu arba vienu raymo operatyvi atmint veiksmu yra perduodamas vienas baitas. Procesori Intel 8086 ir Intel 80286 duomen magistrals plotis yra 16 bit, todl pastarosios architektros procesori greitis yra didesnis, nes esant vienodam daniui, vienu taktu yra perduodamas didesnis informacijos kiekis. Fizikai procesoriuje adres ir duomen ivadai yra tie patys, t.y., adres ir duomen magistral yra ta pati. Tokiu atveju magistral vadinama multipleksin. Valdaniosios magistrals vienas bitas nurodo skaitymo arba raymo operatyvi atmint veiksm.

4.3.

Port sistema

Panaiai kaip ir operatyvioji atmintis, kita fizin tiesin adres erdv sudaro vedimoivedimo port sistem. Procesorius su port sistema yra susietas adreso magistrale, duomen magistrale ir valdanija magistrale. Port adreso magistral yra 16 bit ploio, todl port adresin erdv yra 216 = 64 K. Procesoriaus ir port duomen magistral yra 8 bit ploio. Ivedimo-ivedimo portas tai yra turinti adres 8 bit magistral, jungianti port sistem su iorinio renginio adapteriu.

36

KOMPIUTERI ARCHITEKTRA Apsikeitimui informacija tarp procesoriaus ir port sistemos yra naudojamos dviej tip komandos: IN ir OUT. i komand vykdymo metu procesorius nuskaito arba perduoda bait. Port sistemos baito-porto adresas gali bti nurodytas komandos IN arba OUT operacijos kode arba operande. Portai su numeriais 0 255 yra nurodomi komandos operacijos kode. Tokiu bdu faktikai yra 255 skirtingos komandos IN bei 255 skirtingos komandos OUT ir dar po vien komand darbui su portais, turiniais adresus, didesnius u 255. Valdaniosios magistrals vienas bitas parodo skaitymo arba raymo port veiksm. Kaip ir operatyviojoje atmintyje, port sistemoje gretimi du baitai gali bti charakterizuojami kaip 16 bit portas ir apsikeitimo operacijoje viena komanda per du taktus perduodami du baitai. Tokiu bdu port sistema turi 64 K 8 bit portus arba 32 16 bit portus. vedimo-ivedimo port adresai gali bti sutapatinti su operatyviosios atminties adresais, t.y., adapterio magistrales pajungiant ne prie port sistemos, o prie operatyviosios atminties. Tuomet vedimo-ivedimo komandomis tampa bet kuri komanda, skaitanti arba raanti atmint. Darbe su portais (vedimu-ivedimu) atsiranda lankstumas, taiau prarandama dalis operatyviosios atminties. Pavyzdiui, monitoriaus adapterio portai, atitinkantys ekran, yra atvaizduojamo operatyvij atmint.

4.4.

Kompiuterio sandara

Greitaeigiai renginiai turi tiesiogin ry su operatyvija atmintimi. Operatyvioji atmintis ROM Read Only Memory

Diskai

Monitorius

RAM Random Access Memory

CP

Printeris

Klaviatra 37

KOMPIUTERI ARCHITEKTRA

Procesoriaus sveikos su iorinmis komponentmis schema

CP Operatyvioji atmintis

Port sistema p0 p1 adapteriai pn

valdymo magistral adreso magistral duomen magistral Stambiausiu planu mikroprocesorius Intel 8088 susideda i dviej komponeni: operacinio renginio ir interfeisinio renginio. Operacinis renginys atlieka komandose nurodytus informacijos pertvarkymo veiksmus procesoriaus viduje, o interfeisnis renginys pagal operacinio renginio poreikius atlieka apsikeitim su operatyvija atmintimi ir port sistema. Panagrinkime detaliau: Operatyvioji atmintis adreso magistral IP INST duomen magistral ON OFF INIT

38

KOMPIUTERI ARCHITEKTRA

4.5.

Mikroprocesoriaus Intel 8088 sandara

Mikroprocesorius Intel 8088 susideda i: 1. Registr; 2. Vykdomoju adreso formavimo aparato; 3. Absoliutaus adreso formavimo aparato; 4. Komand sistemos interpretatoriaus; 5. Steko; 6. Pertraukim sistemos. Registras yra renginys, susidedantis i rinkinio dvejetaini skirsni, kurie sugeba keisti ir isaugoti vien i dviej bsen. Registras IP (Instruction Pointer) saugo sekanios komandos, skaitomos i atminties vykdymui, adres. Ijungus kompiuter, pirmosios vykdomos komandos pradinis adresas INIT uraomas registr IP, kurio reikm paduodama adreso magistral, o valdaniojoje magistralje nustatoma 1, informacijos i atminties skaitymui. Nuskaitytos pirmosios komandos pirmas baitas patalpinamas registr INST, kuriame vykdomas komandos deifravimas. Komandos gali bti vairaus ilgio, pvz., keli bait ilgio. Pagal nuskaityt pirmj komandos bait nustatoma, ar jau nuskaityta visa komanda, t.y., ar komanda yra i vieno baito ar toliau reikia skaityti komand i atminties po bait registr INST. Taigi komand vykdymo cikle yra du etapai: komandos nuskaitymas ir komandos vykdymas. Komand nuskaitym atlieka interfeisinis procesoriaus renginys, o komand vykdym atlieka operacinis renginys. Operacinis renginys savo ruotu gali kreiptis interfeisin rengin operand persiuntimo atlikimui. Interfeisinis renginys ir operacinis renginys yra du skirtingi renginiai, kurie dirba lygiagreiai vienu metu ir savo darb sinchronizuoja per buferinius nuskaityt komand registrus arba per valdymo perdavimo komandas. Kai operacinis renginys uimtas operacij vykdymu, interfeisinis renginys preliminariai skaito i atminties toliau einanias komandas, kurios talpinamos buferiniame registre INST, kuris veikia eils FIFO (First In First Out) principu. Atsilaisvinus baitui buferyje INST, i atminties nuskaitomas toliau einantis baitas, taip pat yra atitinkamai modifikuojama registre IP esanti reikm. Taigi registre IP esanti reikm reikia ne einamuoju momentu vykdomos komandos adres, bet einamuoju momentu nuskaitomos i atminties komandos baito adres. Paprastai buferyje yra bent vienas baitas ir operaciniam renginiui nereikia laukti komandos i atminties nuskaitymo. Tik jeigu operacinis renginys vykdo valdymo perdavimo komand, tuomet interfeisinis renginys ataukia nuskaitytj komand eil buferyje, pakoreguoja registro IP reikm ir formuoja nauj komand eil pagal valdymo perdavimo adres. Jeigu operacinis renginys pareiklauja ryio su operatyvija atmintimi arba su port sistema, tai interfeisnis renginys pertraukia komand eils formavim ir atlieka veiksmus su operandu. Operacinis renginys naudodamas 16 bit adresinius registrus, operuoja vieno segmento adresine erdve, kurios dydis yra 216 = 64 K. Operacinio renginio 39

KOMPIUTERI ARCHITEKTRA suformuotas adresas vadinamas vykdomuoju adresu ir gali bti ymimas trumpiniu EA (Effective Address). Visa adresin erdv yra 220 = 1 M ir ji yra adresuojama interfeisiniu renginiu, kuris suformuoja absoliut adres pagal operacinio renginio efektyv adres ir segmento registr, kuris saugo segmento pradios paragrafo numer. Operatyviosios atminties adresin erdv yra suskirstyta paragrafais po 16 bait, t.y., kiekvienas adresas, kuris yra 16 kartotinis, yra paragrafo pradios adresas. Tokiu bdu i viso paragraf yra 220 : 24 = 216 . Todl paragrafo numeris telpa 16 bit segmento registre. Absoliutus adresas yra suskaiiuojamas taip: paragrafo numeris 24 + EA Tai reikkia, kad segmento registre esanti reikm pastumiama kair per keturias pozicijas ir sudedama su efektyviu adresu.
Paragrafo numeris

0000
Efektyvus adresas (EA) Absoliutus adresas (AA)

Mikroprocesorius Intel 8088 turi tris grupes registr: 1. Duomen registrai; 2. Adresiniai registrai; 3. Segmento registrai. Kaip operatyviosios atminties erdv gali bti nurodoma baitais arba odiais, taip ir duomen registrus galima traktuoti kaip keturis eiolikos bit registrus arba atuonis atuoni bit registrus. 7 07 0 000 = AX 011 = BX 001 = CX 010 = DX 15 Pagrindin registr paskirtis yra tokia: AX akumuliatorius, sumatorius; BX bazinis registras; CX cikl skaitliukas; DX duomen registras. Konkreti registr paskirtis yra apibriama komandose. AH = 100 BH = 111 CH = 101 DH = 110 AL = 000 BL = 011 CL = 001 DL = 010 0

40

KOMPIUTERI ARCHITEKTRA Adresiniai registrai Adresiniai registrai tai yra indeksiniai registrai ir nuorod registrai. Adresiniai registrai yra 16 bit. Indeksiniai registrai yra SI (Source Index) ir DI (Destination Index). SI = 110 15 0 15 DI = 111 0

ie registrai paprastai naudojami persiuniam eilui simboliams indeksuoti. Steko nuorodos registras SP (Stack Pointer) Registras SP naudojamas steko virnei indeksuoti. Bazs steke nuorodos registras BP (Base Pointer) SP = 100 15 BP = 101 0

15 0 Registras BP paprastai naudojamas operand adresavimui ne steko virnje, o steko viduje. Adresiniai registrai yra naudojami vykdomojo adreso formavimui: efektyviam adresui, kuris adresuoja virtuali adresin erdv viename segmente 216 = 64 K. Vykdomasis adresas bendru atveju gali bti suformuotas pagal tok princip: bazinis registras + indeksinis registras + poslinkis arba atskirus io principo atvejus. Baziniai registrai yra BX ir BP, indeksiniai registrai yra SI ir DI, o poslinkis yra vieno arba dviej bait adresin reikm, nurodyta paioje komandoje. Todl galimi adresavimo varinatai yra ie: BX + SI + poslinkis BX + DI + poslinkis BP + SI + poslinkis BP + DI + poslinkis SI + poslinkis DI + poslinkis BP + poslinkis BX + poslinkis adresavimas su bazavimu ir indeksavimu adresavimas tik su indeksavimu adresavimas tik su bazavimu

4.6.

Komand struktra

Mikroprocesoriaus Intel 8088 operandai gali bti trij tip: 1. Betarpiki operandai, kurie yra komandos sudtin dalis; 2. Operandai, kurie yra registruose; 3. Operandai, kurie yra operatyviojoje atmintyje. Betarpikas operandas gali bti 8 arba 16 bit ir jis yra ne adresas, bet reikm, kuri dalyvauja komandos veiksme. Komandos operandai skirstomi duomen ir rezultat operandus. Betarpikas operandas gali bti tik duomen operandu. Betarpiki operandai yra efektyvs komand atlikimo prasme. 41

KOMPIUTERI ARCHITEKTRA Registruose esantys operandai gali bti duomenys ir rezultatai. Jie taip pat pasiymi efektyvumu. Registras yra komandoje nurodomas registro numeriu. Jeigu registras yra identifikuojamas komandos operacijos kode, tai jis nra traktuojamas kaip operandas ir sakoma, kad komanda yra be operand. Apskaiiuojant efektyv adres yra naudojamas komandos sudt einantis adresavimo baitas. Komandoje gali tik vienas operandas bti nurodytas operatyviojoje atmintyje, t.y., negali abu bti abu operandai atmintyje. Eilutins komandos tai yra komandos be operand, t.y., beadresins komandos, nors jos uduoda bait persiuntim tarp dviej atminties srii. Yra naudojami terminai: operandas rezultatas (pirmas operandas) ir operandas duomuo (antras operandas). Opernadai yra interpretuojami arba pagal operacijos kod, arba pagal adresavimo bait. Pavyzdiui, betarpikas operandas nustatomas ne pagal adresavimo bait, bet pagal operacijos kod. Pati paprasiausia yra beadresin komanda, j sudaro vien tik operacijos kodas (sutrumpinimas OPK): OPK 7 0 Nra visikai aiku, k vadinti operacijos kodu. Pavyzdiui, nagrinkime komand , kuria patalpiname stek registre esani reikm: PUSH reg . Tai yra: 0 1 0 1 0 reg 7 0 Kyla neaikumas, ar tokiu atveju traktuoti, kad PUSH operacijos kodas yra 01010, o reg yra operandas. Ar, tarkime, 01010000 : PUSH AX yra komanda be operand? Tegul operacijos kodas bus tokia bit seka, kuri yra bendra homogenikam veiksmui nurodyti su tikslumu iki operando. Tokiu atveju operacijos kodas gali bti koduojamas: 1. Baito dalimi; 2. Pilnu baitu; 3. Vienu baitu ir sekanio baito dalimi; 4. Dviem baitais. Komandos gali bti: 1. Beadresins; 2. OPK reg; 3. OPK atmintis; 4. OPK betarpikas operandas, pvz.: RETURN poslinkis; 5. OPK reg reg; 6. OPK reg atmintis; 7. OPK reg betarpikas operandas; 8. OPK atmintis betarpikas operandas.

42

KOMPIUTERI ARCHITEKTRA Galimi atvejai: 1. Operandas komandoje; 2. Operandas registre (registro numeris nurodytas komandoje); 3. Operandas atmintyje (efektyvaus adreso formavimas nurodytas komandoje). Operando atmintyje adresas gali bti nurodytas paioje komandoje. Tuomet turime tiesiogin atminties adresavimo bd. Tiesiogin adresacija gali bti vienais atvejais identifikuojama pagal operacijos kod, kitais atvejais pagal adresavimo bait. Jeigu tiesiogin adresacija identifikuojama pagal operacijos kod, tai galimi tokie variantai: 1. Tiesiogin adresacija OPK adr.j.b adr.v.b adr.j.b adreso jaunesnysis baitas; adr.v.b adreso vyresnysis baitas. 2. Santykin adresacija OPK adresas

3. Absoliuti adresacija OPK adr.j.b adr.v.b segm.nr.j.b. segm.nr.v.b.

Esant tiesioginei adresacijai komandoje nurodytas adresas yra efektyvus adresas. Jeigu yra santykin adresacija, tai adresas traktuojamas kaip skaiius su enklu, kuris kinta intervale [-128; 127]. Tada EA = IP + adresas. Jeigu yra absoliuti adresacija, tai suformuojamas ne tik efektyvus adresas, bet ir absoliutus fizinis adresas atmintyje i 20 bit: segm.nr 24 + EA. Betarpikas operandas atskiriamas nuo tiesiogins atminties adresacijos priklausomai nuo operacijos kodo, jeigu pati tiesiogin adresacija identifikuojama pagal operacijos kod, o ne pagal adresavimo bait.

Adresavimo baitas mod reg r/m

OPK ipltimas

43

KOMPIUTERI ARCHITEKTRA

00 operandas r/m atmintyje, poslinkio nra; 01 operandas r/m atmintyje, vieno baito poslinkis; 01 mod = 10 operandas r/m atmintyje, dviej bait poslinkis; 10 11 operandas r/m registre; Daniausiai operacijos kode yra d (destination) ir w (width) bitai: 0 i procesoriaus registro atmint d= 1 i atminties procesoriaus registr 0 operandas baitas w= 1 operandas odis Lauko reg reikms: reg w=0 000 001 010 011 100 101 110 111 AL CL DL BL AH CH DH BH Registras w=1 AX CX DX BX SP BP SI DI d w reg r/m poslinkio j.b poslinkio v.b reg r/m poslinkis

44

KOMPIUTERI ARCHITEKTRA Lauko r/m reikms: r/m mod = 00 000 001 010 011 100 101 110 111 BX + SI BX + DI BP + SI BP + DI SI DI
tiesioginis adresas

mod = 01
poslinkis 1 baito

mod = 10
poslinkis 2 bait

mod = 11 w=0 w=1 AL CL DL BL AH CH DH BH AX CX DX BX SP BP SI DI

BX + SI + poslinkis BX + DI + poslinkis BP + SI + poslinkis BP + DI + poslinkis SI + poslinkis DI + poslinkis BP + poslinkis BX + poslinkis

BX

Kai mod = 00 ir r/m = 110, tuomet turime tiesiogin adresacij, kai tiesioginis 2 bait adresas-poslinkis segmente nurodomas po adresavimo baito, vietoje poslinkio, kadangi mod = 00. Tiesiogin adresavimo bd turime prarasdami adresavim BP.

4.7.

Adresavimo bdai

Nagrinsime operand atmintyje adresavimo bdus. Tiesiogin adresacija yra: 1. Pagal adresavimo bait. 2. Pagal operacijos kod: 1) paprasta tiesiogin adresacija; 2) santykin tiesiogin adresacija; 3) absoliuti tiesiogin adresacija. Tiesiogin adresacija yra tinkama tuomet, kai operand adresai yra inomi prie programos vykdym: programos sudarymo arba transliavimo metu, nes tiesioginis adresas yra komandos dalis. Norint tiesiogine adresacija programuoti masyvo apdorojim cikle, reikt modifikuoti komandas programos vykdymo metu, t.y., keisti komand adresin dal. Taiau tokios programos nra reenterabilios. iuolaikin programin ranga yra reenterabili. Tuo tikslu kintami adresai turi bti realizuojami ne komand adresini dali modifikavimo bdu, o panaudojant registrus, kuri reikms ir yra keiiamos programos vykdymo metu, o programos komandose tra pastovus registro numeris. Jeigu ciklo vykdymo metu yra tiesinis kintam adres kitimas, tai tokiam kitimui realizuoti pakanka vieno registro reikmi. T registr vadiname indeksiniu registru. Jeigu yra du ciklai su nepriklausomai kintaniais cikl parametrais, pavyzdiui, matricos apdorojime, tuomet tikslinga turti du indeksinius registrus kintamojo adreso reikmei skaiiuoti.

45

KOMPIUTERI ARCHITEKTRA Mikroprocesoriaus Intel 8088 architektroje yra numatyta galimyb apskaiiuoti efektyv adres pagal ablon reg + poslinkis , kur poslinkis atspindi kintamo adreso pastovi komponent, o reg kinta cikle pakartojimo metu. Taip pat efektyvus adresas gali bti skaiiuojamas pagal ablon reg1 + reg2 + poslinkis , k yra tikslinga naudoti esant netiesiniam kintamo adreso kitimui. Sudties veiksmai, atliekami efektyvaus adreso formavimo metu, leidia taupyti papildomas sudties komandas. Savaime aiku, kad jeigu indeks yra daugiau, t.y., dtj cikl skaiius yra didesnis, arba net ir esant dviems indeksams, kintamo adreso reikm bt galima apskaiiuoti papildomomis komandomis suskaiiuojant redukuot indeks ir nuvalyti operando adres viename registre. Reenterabilumas bt isaugomas, bet efektyvumas prarandamas. Registr panaudojimas operando adreso formavimui reikalingas ne tik dl kintam adres realizavimo reenterabilumo, bet ir dl programos relokavimo efektyvumo, t.y., dl galimybs program efektyviai patalpinti bet kuri atminties viet. ita problema gali bti sprendiama vedant bazinius registrus, kuriuose esanti reikm priklauso nuo programos vietos atmintyje, o komand adresins dalys, nurodomos bazini registr atvilgiu, yra santykins ir nuo programos vietos atmintyje nepriklauso, todl talpinant program kit atminties viet, pati programa, jos adresins dalys nesikeiia, iskyrus tam tikras iimtis. Mikroprocesoriuose Intel 8088 analogik vaidmen atlieka segment registrai, bet ne baziniai registrai. Baziniai registrai tarnauja kintam programos vykdymo metu adres formavimui ir yra analogiki indeksiniams registrams, iskyrus panaudojim atskirose komandose. Netiesiogin adresacija yra nusistovjusi svoka, kuri reikia, kad efektyviu adresu esanti reikm yra traktuojama kaip operando adresas, kuris ir dalyvauja operacijoje. Tuo tarpu daugelyje knyg netiesiogine adresacija vadinamas operando efektyvaus adreso formavimas pagal registro turin. Taiau tai yra tiesiog efektyvaus adreso formavimo bdas, skirtingas nuo tiesiogins adresacijos, bet tai nra netiesiogin adresacija. Segmentavimas yra vis pirma reikalingas kaip priemon, daranti program maai priklausom nuo jai iskirtos vietos atmintyje. Antras, labai svarbus, segmentavimo privalumas yra tas, kad sudarant program i keli moduli, ryi redaktoriui nereikia itiesinti vis moduli vien tiesin adres erdv. Pakanka tok tiesinim atlikti tik vieno segmento ribose, ir taip galima efektyviau atlikti ryi redagavimo darb. Mikroprocesorius Intel 8088 turi keturis segment registrus: CS, DS, SS ir ES. i registr reikmmis yra saugomi atitinkamai kodo, duomen, steko ir papildomo duomen segment paragraf numeriai. Segment registrai gali bti bet kaip idstyti atmintyje vienas kito ir atminties atvilgiu. Kodo segmento registras, panaudojant registr IP, yra naudojamas identifikuoti einamosios komandos absoliut adres atmintyje. Absoliutus adresas yra uraomas pora: < segmento numeris > : < EA >

46

KOMPIUTERI ARCHITEKTRA Operand atmintyje absoliuts adresai yra suformuojami pagal ablon: < DS > : < operando EA >, iskyrus tris iimtis: 1. Registro BP panaudojimas efektyvaus adreso formavimui iaukia registro SS panaudojim absoliutaus adreso formavime; 2. Visose komandose darbui su steku : PUSH, POP, CALL, RET suformuojamas absoliutus adresas steko segmente pagal SS : SP ; 3. Eilutinse komandose rezulatas turi bti suformuotas su absoliuiu adresu tik papildomame duomen segmente: ES : DI .

Komandos pamimas Komanda su steku Operandas atmintyje Eilut altinis Eilut gavjas BP bazinis registras

Nutyljimas CS SS DS DS ES SS

Variantai CS, SS, ES CS, SS, ES CS, DS, ES

Poslinkis IP SP EA SI DI EA

Segment registr numeriai: 00 ES 01 CS 10 SS 11 DS Segmento keitimo prefiksas: 001xx110, ia xx yra segmento registro numeris.

4.8.

Stekas

Maksimalus steko dydis yra 64 K bait. Virijant maksimal steko dyd operacijomis PUSH, t.y., mainant SP reikm ir jai tapus lygia , toliau vl imama maksimali SP reikm, t.y, stekas yra ciklinis. Stekas naudojamas laikinam reikmi saugojimui, ryi tarp paprogrami organizavimui, reikmi isaugojimui.

4.9.

Pertraukim sistema

Pertraukimas tai yra procesoriaus sugebjimas pristabdyti einamosios programos vykdym, sureaguoti vyk, vykdyti atitinkam program ir grti pristabdytos programos vykdym. Pertraukimai naudojami procesoriaus darbo efektyvumui padidinti, tam kad paiam procesoriui nereikt periodikai tikrinti iorini rengini bsenas. Procesorius be pertraukim btu panaus telefono aparat be skambuio: reikt vis kilnoti ragel ir klausyti, ar kas nors nenori pasikalbti.

47

KOMPIUTERI ARCHITEKTRA Taip pat pertraukim aparatas naudojamas kaip patogi priemon, leidianti kreiptis operacins sistemos kontroliuojamas utilitas veiksmams su iorinias renginiais atlikti. Tokiam kreipimuisi atlikti pakanka inoti pertraukimo numer ir nereikia inoti sistemins programos adreso, kuris gali priklausyti nuo operacins sistemos versijos ar panaiai. Petraukim aparatas leidia atlikti vedimo-ivedimo operacijas nepriklausomai nuo procesoriaus, betarpikai valdant kontroleriams (adapteriams). Dl elektronini ir mechanini komponeni greii didelio skirtumo, vedimo-ivedimo operacijos metu procesorius suspja atlikti kitus darbus, o operacijos pabaigoje iorinis renginys pranea apie tai procesoriui pastamu pertraukimo signalu. Procesorius gali sureaguoti pertraukim ne bet kuriuo laiko momentu, o tik baigs vykdyti einamj komand. Galimas ir toks procesoriaus darbo reimas, kai procesorius nereaguoja maskuojam pertraukim signalus. nemaskuojamus pertraukimus, nepriklausomai nuo procesoriaus darbo reimo, yra nedelsiant sureaguojama (nedelsiant reikia vykdius eilin komand). Mikroprocesoriaus Intel 8088 pertraukim sistemoje kiekvien pertraukimo tip atitinka kodas, j gali bti 256. Pertraukimai gali bti ioriniai ir vidiniai procesoriaus atvilgiu. Ioriniai pertraukimai generuojami ioriniuose procesoriaus atvilgiu renginiuose ir gali bti maskuojami arba nemaskuojami. Pertraukimai gali kilti ir procesoriaus darbo, vykdant program, rezultate tai yra vidiniai pertraukimai, kurie kyla procesoriui vykdant specialias pertraukim komandas INT, INTO, dalybos i 0 atveju, vykdant komandas ingsniniu reimu, vykdant komand CC adresas pertraukimas duotame take. Svarbiausias reikalavimas pertraukim sistemai yra tas, kad pratsus pristabdytos programos vykdym, toliau darbas vykt taip, lyg to pertraukimo i viso nebuvo. Tuo tikslu procesorius turi siminti vykdymo pratsimo adres (grimo adres), esant registruose PC ir CS. iuose registruose esanios reikms yra simenamos steke. Taip pat yra simenamas poymi registras, kuriame saugoma einamoji procesoriaus darbo bsena. Jeigu pertraukim apdorojanti procedra keiia koki nors kit registr reikmes, tai ji pati turi t registr reikmes darbo pradioje siminti, o darbo pabaigoje atstatyti.

48

KOMPIUTERI ARCHITEKTRA Bendroji pertraukim schema Nemaskuojami pertraukimai INT Pertraukim schema Pertraukim signalai i iorini rengini
Pertraukim kontroleris

NMI CP

INT n

Dalyba i 0

INTO

ingsninis reimas

Visi pertraukimai turi savo kodus nuo 0 iki 255. Vidiniai pertraukimai, priklausomai nuo j pobdio, turi fiksuot kod arba kodas yra uraomas komandoje. Vidini pertraukim negalima udrausti, iskyrus pertraukim ingsniniam komand vykdymui. Vidini pertraukim prioritetai yra auktesni u iorini pertraukim prioritetus (iskyrus ingsnin pertraukim). Pertraukim prioritetai: 1. Dalyba i nulio; 2. Programinis (vidinis) pertraukimas pagal komand INT; 3. Pertraukimas pagal komand INTO; 4. Nemaskuojamas iorinis pertraukimas; 5. Maskuojamas iorinis pertraukimas; 6. ingsninio apdorojimo vidinis pertraukimas. Pertraukim prioritetai veikia tada, kai vienu metu (tame tarpe ir atreagavimo pertraukim metu), t.y, kol bus baigta vykdyti eilin komanda, generuojami keli pertraukim signalai. Tada pagal pertraukim prioritetus nusprendiama, kuris pertraukimas bus apdorotas. Laukimas, kol bus baigta vykdyti eilin komanda, gali bti gana ilgas. Pavyzdiui, daugybos-dalybos komandos procesoriuje Intel 8088 realizuojamos madaug 150 takt. Pertraukimas Dalyba i nulio ingsninio reimo Nemaskuojamas iorinis Sustojimo tako (programinis pertraukimas pagal komand INT) Kodas 0 1 2 3

49

KOMPIUTERI ARCHITEKTRA Perpildymo (programinis pertraukimas pagal komand INTO) Operacins sistemos reikmms Vartotojo reikmms 4 5 31 32 - 255

Priklausomai nuo pertraukimo kodo, pagal pertraukimo vektorius, kuriuose nurodomi pertraukimo procedr adresai, ikvieiama pertraukim apdorojanti procedra. Pertraukim vektoriai yra idstyti operatyviosios atminties maesniuosiuose adresuose (0 3FF t.y., 4 256), kur kiekvien pertraukimo kod atitinka 4 bait pertraukimo vektorius su adresu: 4 kodas. i i+1 Adrese nurodoma: IP j.b v.b CS i+2 j.b jaunesnysis baitas; v.b vyresnysis baitas. Kadangi pertraukimo vekroriuje adresas nurodomas absoliutus: CS : IP, tai petraukimo apdorojimo programa gali bti idstyta bet kurioje operatyviosios atminties vietoje, nuo 0 220 = 1 M. Operatyvioji atmintis 0 4 4 baitai Dalyba i nulio ingsninis reimas OA Pertraukimo
apdorojimo programa

j.b i+3

v.b

OA Pertraukimo
apdorojimo programa

...

3FC = 4255

Vartotojo pertraukimas

OA Vartojo pertraukimo apdorojimo programa

Pertraukimo apdorojimo programa (procedra) pradeda dirbti procesoriaus reimu, kai pertraukimai neleidiami, taip pat neleidiamas ir ingsninis pertraukimas. Pertraukimo apdorojimo programa pati gali nustatyti procesoriaus reim, leidiant pertraukimus. Be to, pertraukimo apdorojimo procedros darb gali pertraukti nemaskuojamas iorinis pertraukimas arba pati procedra gali turti komand INT (vidinis pertraukimas), kuria pertraukia pati save. Bet kurie vidiniai pertraukimai gali pertraukti pertraukimo procedros darb ir perjungti nauj pertraukimo apdorojimo procedr. 50

KOMPIUTERI ARCHITEKTRA Baigiant pertraukimo procedros darb yra svarbu i steko atstatyti bsen, kuri buvo prie pertraukim. Pertraukimo procedroje yra tikslinga udrausti pertraukimus kritinje sekcijoje, nes prieingu atveju gali gautis neapibrti rezultatai. Kita vertus, udelsus sureaguoti iorin pertraukim, jis gali dingti. Iorinio pertraukimo apdorojimo programa pati nurodo ioriniam renginiui nuimti pertraukimo signal, tuo paiu fiksuojant, kad pertraukim yra sureaguota. Pertraukimai, iaukiami komanda INT n Pertraukimai, iaukiami komanda INT n, yra vadinami programiniais pertraukimais. Tuo paiu jie yra vidiniai pertraukimai. Tai yra analogas ankstesni kompiuteri komandai SCV, kurios pagalba vartotojika programa susiria su operacine sistema supervizoriumi. Esant dinaminiam atminties paskirstymui, kai program vieta atmintyje kinta, tuo paiu kinta ir pertraukimo apdorojimo program vieta atmintyje. Todl yra labai patogu pertraukimo programas ikviesti per pertraukimo kod, nepriklausant, nuo programos vietos atmintyje. Pertraukimo programai keiiant viet atmintyje, pakanka pakoreguoti pertraukimo vektori programos adres. Programiniai pertraukimai yra bdas pasinaudoti operacins sistemos paslaugomis, tai yra kreipiniai operacin sistem. Dalybos i nulio atveju, laikas sunaudotas atlikti tokio pertraukimo apdorojimo program turi bti priskirtas dalybos komandos veiksmui, tam, kad vertinti maksimal nepertraukiamos i iors komandos vykdymo laik. Dar kart pabrime, kad aparatrikai sureaguojant pertraukim, steke yra simenamas procesoriaus bsenos registras SF (Status Flag) ir CS : IP (sekanios komandos adresas), o procesoriaus reimai nustatomi taip: IF = 0 pertraukimai neleidiami; TF = 0 ingsninis pertraukimas neleidiamas. Grtant i pertraukimo reikia atstatyti i steko buvusi procesoriaus bsen ir grimo i pertraukimo adres. ingsninio reimo pertraukimas ingsninio pertraukimo reimas yra naudojamas program derinimui, stebint kiekvienos komandos vykdymo efekt. ingsninio pertraukimo bsenos TF poymio programuotojas tiesiogiai keisti negali, taiau yra netiesiogin galimyb t atlikti simenant procesoriaus poymi registr steke, tada poymius steke pakoreguoti, o po to i steko atstatyti procesoriaus poymi registr SF. Kontrolinio tako pertraukimas Kontrolinio tako pertraukimas INT su kodu 3 yra vieno baito komanda. Kit programini pertraukim komanda INT n uima du baitus atmintyje: INT ir kodas n. Tuo tarpu komanda INT 3 yra specialaus operacijos kodo komanda, kuri generuoja

51

KOMPIUTERI ARCHITEKTRA pertraukimo kod 3, o ne paima j i programos. Pagal t kod 3, yra nustatomas pertraukimo vektoriaus adresas (pertraukimo kodas 4 = t kod atitinkantis pertraukimo vektoriaus adresas), o tada nustatoma, kur yra pertraukimo apdorojimo programa (pertraukimo vektoriaus reikm yra pertraukimo programos adresas kur nors atmintyje). Komanda INT 3 yra dedama program toje vietoje, kuri vykdant norisi iaukti pertraukim. Taigi joks kontrolinio tako adresas nereikalingas, tai yra tiesiog paios komandos INT adresas, itos komandos operacijos kodas yra CC. Kontroliniai takai yra numatyti i anksto, sudarant program, stabils kontroliniai takai nra doms. Labai svarbu derinimo metu dinamikai ukoduoti kontrolinius takus, priklausomai nuo dinamins situacijos derinimo metu. Dinaminio kontrolinio tako adres nurodo vartotojas. Toks dinaminis kontrolinis takas yra realizuojamas tuo adresu esant bait pakeiiant komanda CC ir sudarant toki pertraukimo apdorojimo program, kuri simena pakeist bait, atstato procesoriaus bsen, grina t bait jo viet ir programos vykdymas yra tsiamas toliau. Pastaba. Pertraukimas fiksuojamas ne einamosios komandos pabaigoje, o kitos (toliau esanios) komandos pabaigoje iais atvejais: 1. Prefiksins komandos prefikso (pakartojimo, segmento keitimo, magistrals blokavimo) atveju. Taiau yra imintis WAIT ir eilutins komandos su pakartojimo prefiksu gali bti pertrauktos; 2. Po komand, keiiani segment registrus: MOV arba POP, nepertraukiamai vykdoma kita (toliau esanti) komanda tam, kad btu pilnai pakeistas absoliutus adresas. Vykdydamas pertraukim procesorius atlieka iuos veiksmus: 1. stek patalpinamas poymi registras SF; 2. Poymi TF ir IF reikms nustatomos lygios nuliui, tam kad bt udraustas ingsninis reimas ir iorinis pertraukimas; 3. stek patalpinamas registras CS; 4. Apskaiiuojamas pertraukimo vektoriaus adresas: 4 pertraukimo kodas; 5. Pertraukimo vektoriaus antras odis patalpinamas i registr CS; 6. stek patalpinama registro IP reikm; 7. Pertraukimo vektoriaus pirmas odis patalpinamas registr IP. Pertraukimo apdorojimo programa turi baigtis komanda IRET, kuri atlieka iuos (aukiau ivardintus) veiksmus atvirkia tvarka. Pastabos. Iorini pertraukim maskavimas gaunamas pasiuntus pertraukim kontrolerio registrui tam tikr informacij. NMI pertraukimas vyksta dl atminties klaid, maitinimo ijungimo ir pan. io pertraukimo kodas yra 2. NMI uklausimus procesorius simena. Pertraukim prioritetai naudojami tada, kai kyla pertraukimas kito pertraukimo apdorojimo metu, t.y., dirbant pertraukimo apdorojimo programai. Jeigu naujai kilusio pertraukimo prioritetas yra auktesnis negu einamuoju momentu apdorojamo pertraukimo prioritetas, tai pertraukimo apdorojimo programos darbas pertraukiamas ir persijungiama prie naujo pertraukimo apdorojimo programos vykdymo, inoma,

52

KOMPIUTERI ARCHITEKTRA atsivelgiant procesoriaus darbo reim dl maskuojam iorini pertraukim (jeigu jie yra udrausti, tai ir neprertauks). Vienu metu kylant keliems pertraukimo siganalams, yra sureaguojama t, kurio prioritetas aukiausias. Pavyzdiui, jeigu vykdant komand kyla vidinis dalybos i nulio pertraukimas ir tuo pat metu pasiuniami NMI arba maskuojami iorini rengini pertraukimo signalai, tai bus vykdytas vidinis dalybos i nulio pertraukimas. Po komand STI ir IRET, po segmento keitimo ir magistrals blokavimo prefiks, po MOV seg. reg. ir POP seg. reg. pertraukimas i karto nevyksta, o vyksta tik vykdius dar vien komand. Po komand keiiani segmento registro reikmes (MOV seg. reg. ir POP seg. reg.) pertraukimas kyla vykdius tik dar vien komand toks mechanizmas apsaugo program, kuri pereina prie naujo steko keiiant registr SS ir SP reikmes. Jeigu pertraukimas kilt pakeitus vien tik registro SS reikm, bet prie pakeiiant registro SP reikm, mikroprocesorius isaugot poymi registr SF, registrus CS ir IP netinkamoje atminties srityje, tai seka i to, kad teising steko padt apibria registr pora: SS ir SP. Jeigu pakeiiama tik registro SS reikm, tai turime nesuderint stekins atminties adresavimo registr por.

53

KOMPIUTERI ARCHITEKTRA Pertraukim vykdymo schema Ankstesns komandos pabaigimas


Patvirtinti pertraukim pertraukim kontroleryje

Nuskaityti pertraukimo tipo kod


Vidinis arba programinis pertraukimas?

taip
Stekas TEMP SF TF

ne
NMI?

taip

IF = 0 TF = 0

ne
Iorinis INT ?

taip

IF = 1 ?

taip

Stekas Stekas

CS IP

ne ne
TF = 1 ?

CS IP

vektorius 2 vektorius taip


NMI?

taip ne

ne Kitos komandos vykdymas

taip
TEMP = 1?

ne vykdyti pertraukimo procedr IP CS Stekas Stekas SF Stekas

54

KOMPIUTERI ARCHITEKTRA

4.10.

Duomen formatai

Duomen formatas yra tam tikras informacijos kodavimo bdas, kuris priklauso nuo procesoriaus komand sistemos. Duomen formatai yra komand sistemos atributas, apibrimo sudtin dalis. Duomen formatai tai yra svoka, kurios terminais apibriama komanda atliekamas informacijos atvaizdavimas. Tam atvaizdavimui nusakyti bitai yra grupuojami tam tikrus laukus. T lauk terminais nusakomas komanda atliekamas atvaizdavimas. Ta pati informacija, priklausomai nuo j apdorojanios komandos, gali bti skirtingais duomen formatais. Todl duomen formatai yra svoka, skirta komand sistemos paaikinimui. Duomen tipai ir duomen formatai yra maai k bendro turinios svokos. Duomen tipas nusako reikmi aib. Reikmei ukoduoti gali bti panaudoti vairs formatai. Tas pats formatas gali bti naudojamas vairi tip reikmms koduoti. Duomen formatai yra ie: 1. Skaiiai be enklo; 2. Skaiiai su enklu; 3. Deimtainiai supakuoti skaiiai; 4. Deimtainiai ipakuoti skaiiai; 5. Simbolinis formatas. Skaii be enklo formatu visi skaiiaus bitai yra interpretuojami kaip dvejetainis skaiius. Atliekant aritmetinius veiksmus tenka operuoti neigiamais skaiiais.Yra toks neigiam skaii kodavimas, kad vietoje atimties veiksmo galima naudoti sudties veiksm, t.y., galima apsieiti be aparatrins atimties komandos realizacijos, o naudoti tik sudties komand ir tinkam neigiam skaii kodavim. Pabrime, kad galima apsieiti tik su sudties veiksmu. Pavyzdiui, 5 + (-3) : nra aiku, kaip atlikti toki sudt. Sudtis nra apibrta algoritmikai skirting enkl skaiiams. Algoritmikai galtume apibrti atimt. Jeigu reikia atlikti veiksm vienet tikslumu, tai -3 ukodav 7, gausime (5 + 7) mod 10 = 2 . 7 yra atvirktinis elementas skaiiui 3 sudties moduliu 10 atvilgiu, kaip ir -3 bt atvirktinis elementas skaiiui 3 atimties atvilgiu. Neigiamiems skaiiams koduoti parenkamas tok teigiamas skaiius, kuris yra atvirktinis operacijos (sudties) mod 2n atvilgiu.

55

KOMPIUTERI ARCHITEKTRA 0 0000 0000 1 0000 0001 2 0000 0010 ... 27-1 0111 1111 27 1000 0000 27+1 1000 0001 28 1111 1110 28-1 1111 1111 0 1 2 127 -128 -127 -2 -1

Tokiu bdu neigiamiems skaiiams koduoti yra naudojami teigiami skaiiai ir yra atliekamos operacijos su teigiamais skaiiais, o neigiami skaiiai yra tik tam tikra interpretacija, nes algoritmikai veiksmai yra atliekami su teigiamais skaiiais. Pasakymas enklo bitai yra tik interpretacijos lygio terminas. Faktikai enklo i viso nra, o yra tik didesni reikmi diapazonas. Kodas, kuomet didesni reikmi diapazonas traktuojamas kaip neigiam reikmi diapazonas, yra vadinamas papildomu kodu iki 2n. Duomen formatas, kuriame didesni reikmi diapazonas traktuojamas kaip papildomas kodas, yra vadinamas skaii su enklu formatu. Ir skaiiai su enklu, ir skaiiai be enklo gali uimti vien arba du baitus. Skaiiai be enklo: baite 0 255 odyje 0 216-1 Skaiiai su enklu: baite -128 127 odyje -32768 32767 Dvejetainis formatas yra ekvivalentus eioliktainiam formatui, todl apie eioliktainius skaiius be enklo ar su enklu arba dvejetainius skaiius be enklo ar su enklu atskirai nra kalbama. eioliktainiai skaiiai naudojami patogumo, tame tarpe ir urao trumpumo, sumetimais. Skaii be enklo ir skaii su enklu formatas vadinamas fiksuoto kablelio formatu. Skaiiai be enklo ir skaiiai su enklu priklauso gana ribotam diapazonui. Jeigu reikia operuoti didesniais skaiiais, tada yra naudojami deimtainiai skaiiai arba slankaus kablelio skaiiai. Slankaus kablelio skaiiai yra tik koprocesoriuje 8087, bet ne Intel 8088. Taigi lieka tik deimtainiai skaiiai, kurie gali bti supakuoti arba ipakuoti. itas formatas yra viename baite, o diapazonai yra tokie: ipakuotas formatas: 0 9 ;
1 baitas

09 zona

56

KOMPIUTERI ARCHITEKTRA

supakuotas formatas: 0 99 1 baitas 0 ... 9 9 0

Deimtainiai skaiiai nenaudoja kombinacij A, B, C, D, E ir F, o tik skaitmenis 0 9, keturiose dvejetainse pozicijose (pusbaityje). ia prarandamas saugojimo talpumas, taiau kompensuojama panaumu simbolin format. Dl io panaumo ivengiama snaud transformavimui i simbolinio formato dvejetain ir atvirkiai. Reikiamas tikslumas pasiekiamas skiriant pakankamai vietos deimtainiui skaiiui pavaizduoti. Veiksmai su deimtainiais skaiiais yra maiau efektyvs negu veiksmai su dvejetainiais skaiiais. Supakuoti deimtainiai skaiiai saugomi baite po du skaitmenis, taip kad vyresniuose bituose yra vyresnis skaitmuo. Galima bt didelius skaiius vaizduoti ir dvejetainiu formatu, panaudojant kelis odius, bet tam reikia pervesti deimtain skaii dvejetain, keli odi formate. Veiksmuose su deimtainiais skaiiais komandos taikomos vienam baitui. Veiksmas su keliais baitais atliekamas kelis kartus pritaikant komand, kurios operandas yra vieno baito, keiiant operacijoje dalyvaujant bait. Ipakuoti deimtainiai skaiiai saugomi po vien skaitmen baite. Pats skaitmuo saugomas jaunesniuose bituose. Kai kurios komandos (daugybos, dalybos) reikalauja, kad vyresniuose bituose bt nuliai. Kai kurios komandos (sudtis, atimtis) vyresniuosius baito bitus ignoruoja. Pavyzdiui, skaitmen simboliniame kodavime vyresniuose bituose yra 3, o jaunesniuose bituose pats skaiius, pvz.:
1 baitas

1
skaicius 1

31 vieneto ASCII kodas

Kai reikia atlikti veiksmus su tokiais skaiiais, dirbame su skaii ireikianiu pusbaiiu, o kai veiksmai atliekami su simboliais, tada dirbame su visu baitu. Atliekant veiksmu yra naudojamos tos paios komandos kaip ir su dvejetainiais skaiiais, tik po to reikalinga korekcija, tam kad gauti korektik rezultat.

57

KOMPIUTERI ARCHITEKTRA Pavyzdiui:


+ +

09 08 1116 6 17

sudties rezultatas DAA deimtainis skaiius

Deimtainj sistemoje skaiiaus svoris yra eiais maesnis negu eioliktainje sistemoje, todl prie gauto rezultato dar pridedame 6.
+ +

07 04 0B16 6 11

sudties rezultatas DAA deimtainis skaiius

Simbolinis formatas naudojamas simboliams ukoduoti vieno baito kodu. I viso galima ukoduoti 28 = 256 simboli. Kiekvienas simbolis turi standartin grafin pavaizdavim. Kompiuteriuose IBM PC naudojamas standartinis simbolinis formatas ASCII (American Standard Code for Information Interchange). Kompiuteryje IBM 360/370 yra naudojamas standartinis simbolinis formatas EBCDIC (Extended Binary Coded Decimal Intechange Code). Asembleris gali apdoroti simbolius tik i diapazono 20H 0FFH . Kodai i diapazono 00H 01FH gali bti uduoti ne kaip simboli eilut, bet kaip skaitmeninis 8 bit kodas. ASCII kod lentel nuo 00H iki 7FH vadinama pagrindine, kurioje, pvz.: eioliktainis (hex) kodas Simbolis 20 tarpas (space) 21 ! ... 2F / 30 0 31 1 ... 39 39 ... 41 A 42 B ... 4F O 50 P

58

KOMPIUTERI ARCHITEKTRA 5A 61 62 6F 70 7A ... Z ... a b ... o p ... z ...

Kodai i diapazono 00H 1FH yra vadinami valdaniaisiais. Kodai 080H 0FFH yra standartinio 7 bit ASCII kodo ipltimas personaliniams kompiuteriams. Iplstinje kod lentelje yra vairi abecli raids, matematiniai simboliai, pseudografika (nei lietuvika, nei rusika abecl standartin kod neeina).

4.11.

Poymi registras SF

Poymi registras SF (Status Flag) neturi numerio, nra adresuojamas, o jo panaudojimas yra susietas su konkreiomis komandomis. Tai yra paskutinis i nagrinjam registr, jis yra 16 bit, i kuri ne visi yra naudojami. Visas registras dalyvauja tik dviejose operacijose: dti SF stek ir paimti SF i steko, o visos kitos komandos operuoja su atskirais registro SF bitais, kurie turi individualius vardus ir yra vadinami poymiais. Kai kurie i bit fiksuoja vykdyt komand slygos kodus, pagal kuriuos organizuojamas slyginis valdymo perdavimas, kiti bitai parodo einamj procesoriaus bsen. 15 x 14 x 13 x 12 X 11 10 OF DF 9 IF 8 TF 7 SF 6 ZF 5 x 4 AF 3 x 2 PF 1 x 0 CF

Poymius jaunesniuose bituose nustato aritmetins logins komandos. CF PF AF ZF SF TF IF DF OF Carry Flag Parity Flag Auxiliary Carry Flag Zero Flag Sign Flag Trap Flag Interrupt Flag Direction Flag Overflow Flag perneimo poymis lyginumo poymis papildomo perneimo poymis nulio poymis enklo poymis spast poymis pertraukimo leidimo poymis krypties poymis perpildymo poymis

59

KOMPIUTERI ARCHITEKTRA

Registras SF: 0-inis bitas CF Carry Flag perneimo poymis, naudojamas didesnio tikslumo aritmetiniuose veiksmuose. Paprastai aritmetiniai veiksmai atliekami su duomenimis 8 arba 16 bit. Taiau kartais reikia apdoroti skaiius, didesnius u 216. Didesni skaiiai gali bti saugomi keliuose odiuose, specialiai suformuojant tokius skaiius keliuose odiuose. Aritmetiniai veiksmai su didesniais skaiiais atliekami irgi specialiais veiksmais programiniu bdu, remiantis veiksm su odiais komandomis. Sudedant du 16 bit odius, rezultatas gali netilpti 16- bit, nes jo saugojimui gali reikti 17 bit. Tokio, 17-tojo bito, vaidmen atlieka poymis CF. Be to yra specialus ADD komandos variantas ADC, kuriuo prie operand susumuoja CF bito reikm ir taip pat formuoja poym CF. Poymis CF yra naudojamas ir atimties komandoje SUB tam, kad atspindti pasiskolinimo fakt, jeigu pirmasis operandas 16-oje bit yra maesnis u antr operand. Komanda SBB atima ne tik antr operand i pirmojo, bet dar atima ir poym CF, taip skaitant pasiskolinim. Poymis CF galt bti naudojamas reikmi palyginimui jas atimant. Toks palyginimo poymis tinka skaiiams be enklo. Skaiiams su enklu palyginti reikalingi papildomi poymiai. 1-as bitas Nenaudojamas 2-as bitas PF parodo rezultato vienetini bit skaiiaus lyginum. PF = 1, jei rezultato vienetini bit skaiius yra lyginis. 3-as bitas Nenaudojamas 4-as bitas AF Auxiliary Carry Flag papildomo perneimo poymis, naudojamas atliekant aritmetinius veiksmus su deimtainiais skaiiais. is poymis negali bti panaudotas slyginio valdymo perdavimo komandose. Deimtain aritmetika panai arba tiesiog atitinka simbolin informacij, kuria operuoja mogus, kuri jis veda kompiuter ir priima i kompiuterio. Todl taikymuose, kur skaiiavimai yra nesudtingi, netikslinga eikvoti laik ir resursus pervedimui i simbolinio formato fiksuoto kablelio dvejetain vidin format ir atvirkiai. Be to, deimtainiai skaiiai gali bti naudojami kaip alternatyva slankaus kablelio skaiiams, kai neleistinas netikslumas, atsirandantis dl dvejetains sistemos nesugebejimo tiksliai ireikti deimtaines reikmes. inoma, t pat bt galima atlikti ir fiksuoto kablelio skaiiais, pervedant trupmeninius skaiius sveik skaii

60

KOMPIUTERI ARCHITEKTRA mstel. Tai atliekama padauginant trupmenin skaii i 10n, kur n yra trupmeniniame skaiiuje skaitmen po kablelio skaiius. Tada programoje kablelis tegali bti menamas, programos turimas omeny. Aritmetiniams veiksmams su deimtainio formato skaiiais naudojamos tos paios fiksuoto kablelio skaii komandos. Taiau j pagalba gautas rezultatas gali bti nekorektikas deimtaini skaii formato prasme. Vis pirma, pusbaityje gali gautis eioliktain reikm, netenkinanti formato (A F). Tokiu atveju tam, kad gauti korektik rezultat, reikia pridti 6. Atliekant sudties veiksm, rezultate gali vykti perneimas i jaunesniojo pusbaiio vyresnyj. To perneimo svoris yra 16 (sistemos pagrindas), o tuo tarpu deimtainje sistemoje perneimo svoris yra 10. Todl tam, kad perneim btu galima traktuoti kaip deimtain, turime pridti 6. Taigi jei buvo perneimas per pusbait, tai reikia pridti 6, o jei nebuvo, tada nebereikia nieko pridti. Perneimo per pusbait fakt ir fiksuoja papildomo perneimo poymis AF. Veiksmai su deimtainiais skaiiais atliekami po vien bait. Paprastos bait sudties korekcij deimtainio formato prasme atlieka komanda DAA, kuri prideda 6, jeigu poymis AF = 1, arba jeigu pusbaityje yra gautas eioliktainis skaiius, netenkinantis formato (A F). Atimties atveju poymis AF yra formuojamas pasiskolinimo atveju, o komanda DAS atlieka deimtains atimties korekcij pagal nustatyt poym atima 6. ia buvo kalbama apie supakuotus deimtainius skaiius, kuomet viename baite saugomi du deimtainiai skaitmenys. Poymis AF taip pat naudojamas ipakuot deimtaini deimtaini skaii sudties ir atimties operacij fiksuoto kablelio komandomis gaut rezultat koregavimui. Tokios komandos yra AAA (sudiai) ir AAS (atimiai). iomis komandomis formuojami skaiiai diapazone 0 9, viename baite, t.y., 30H 39H ASCII kodais. 5-tas bitas Nenaudojamas 6-tas bitas ZF Zero Flag parodo, ar paskutins operacijjos rezultatas yra nulinis. ZF = 1, jei rezultatas = 0. 7-tas bitas SF Sign Flag parodo, koks yra paskutins operacijos rezultato vyriausias bitas (poymis nustatomas po aritmetini ir logini operacij). 8-tas bitas TF Trap Flag ingsninio komand vykdymo (spst) poymis. Jeigu jis yra nustatytas, tai po kiekvienos komandos (iskyrus tuos atvejus, kai pertraukimas leidiamas tik vykdius kit, toliau esani komand, t.y., prefiksini komand ir komand, keiiani segmento registr reikmes; plaiau tai yra aprayta skyrelyje

61

KOMPIUTERI ARCHITEKTRA apie pertraukim sistem) vyksta pertraukimas su kodu 4. is poymis negali bti tiesiogiai valdomas komandomis. 9-tas bitas IF Interrupt Flag pertraukimo poymis. Jeigu IF = 1, tai yra leidiami ioriniai maskuojami pertraukimai. Nemaskuojams iorinis pertraukimas su kodu 2 kyla dl operatyviosios atminties klaid. Jeigu IF = 0, tada ioriniai pertraukimai neleidiami. Poymis IF veikia i karto visus iorini rengini maskuojamus pertraukimus. renginiai yra pajungti prie pertraukim kontrolerio, kuris yra iorinis renginys mikroprocesoriaus atvilgiu. Galima sisti informacij i mikroprocesoriaus pertraukimo kontrolerio portus mikroprocesoriaus komandomis OUT. Pertraukimo kontroleris yra tais portais susijs su renginiais, kurie gali pasisti pertraukimo signal. Jeigu reikia maskuoti tik kai kuri rengini pertraukimus, tai pertraukimo leidim arba draudim galima valdyti per pertraukimo kontrolerio port, kuris sieja t konkret rengin su pertraukim kontroleriu. Tokiu atveju pertraukimas nuo konkretaus renginio yra umaskuojamas pertraukimo kontrolerio lygyje, t.y., jis nra perduodamas mikroprocesori. Pastebsime, kad prastu atveju pertraukimo maskavimas yra atliekamas mikroprocesoriuje, t.y., pertraukim kontroleris perduoda mikroprocesoriui pertraukimo signal, kur gauna i renginio, o tada mikroprocesorius, priklausomai nuo poymio IF reikms, j reaguoja arba ne. 10-bitas DF Destination Flag krypties poymis yra naudojamas eilutinse komandose, indeksini registr reikmi keitimui. Jeigu DF = 0, tai indeksiniai registrai yra didinami vienetu arba dviem, priklausomai nuo to, ar operuojame baitais ar odiais. Jeigu DF = 1, tai indeksiniai registrai yra mainami vienetu arba dviem, priklausomai nuo to, ar operuojame baitais ar odiais. Ar indeksinius registrus reikia didinti ar mainti, nusprendiame pagal situacij. Pavyzdiui.: Jeigu taip, inkrementuodami, kopijuosime, sugadinsime altin.

altinis (source)

Tikslas (destination)

altinis (source)

Taip kopijuojant ir dekrementuojant altinis nepaeidiamas.

Tikslas (destination)

62

KOMPIUTERI ARCHITEKTRA

11-tas bitas OF Overflow Flag perpildymo poymis. Tai yra vienintelis bitas vyresniajame poymi registro baite, formuojamas aritmetinse komandose. Perpildymo bitas naudojamas skaiiams su enklu (papildomu kodu), panaiai kaip perneimo bitas CF yra naudojamas deimtainio formato skaiiams. Tiek skaiiams be enklo, tiek skaiiams su enklu, aritmetikai sudti naudojama ta pati komanda, kuri abiem atvejais duoda teisinga rezultat, iskyrus t atvej, kai sudedant du skaiius su enklu, gautas rezultatas netelpa skaii su enklu diapazone: -128 127 arba -32768 32767. 12-tas, 13-tas, 14-tas, 15-tas bitai Nenaudojami

63

KOMPIUTERI ARCHITEKTRA

5. Komand sistema
Intel architektrai bdinga savyb naudojama vienoda mnemonika visikai skirtingoms komandoms. d krypties (destination) bitas, jis nurodo, ar operacijos kryptis yra i procesoriaus atmint, ar i atminties procesori; 0 i procesoriaus registro atmint d= 1 i atminties procesoriaus registr w - ploio (width) bitas, jis nurodo operacijoje dalyvaujanio lauko ilg; 0 operandas baitas w= 1 operandas odis mod lauko reikms: 00 operandas r/m atmintyje (r/m = m), poslinkio nra; mod = 01 operandas r/m atmintyje (r/m = m), vieno baito poslinkis; 10 operandas r/m atmintyje (r/m = m), dviej bait poslinkis; 11 operandas r/m registre (r/m = r); bet.op. betarpikas operandas. j.b v.b

adr.j.b. adreso jaunesnysis baitas adr.v.b. adreso vyresnysis baitas sreg segmento registras; 00 ES; sreg = 01 CS; 10 SS; 11 DS; portas porto numeris diapazone 0 255 posl.j.b. poslinkio jaunesnysis baitas posl.v.b. poslinkio vyresnysis baitas seg.rer.j.b. segmento registro jaunesnysis baitas seg.reg.v.b. segmento registro vyresnysis baitas

64

KOMPIUTERI ARCHITEKTRA

5.1.

Bendrosios mikroprocesoriaus komandos

MOV MOVe persiuntimas 1. registras registras / atmintis; 1000 10dw mod reg r/m [poslinkis]; d=0: d = 1: reg r / m r / m reg

2. betarpikas operandas registras / atmintis; 1100 011w mod 000 r/m [poslinkis] bet.op1 [bet.op.2, jei w = 1] Krypties bito nra, nes kryptis jau yra apibrta. Laukas reg nereikalingas, jis yra naudojamas kaip operacijos kodo ipltimas. Poslinkis suformuojamas priklausomai nuo lauko mod reikms. 3. betarpikas operandas registras 1011 w reg bet.op.1 [bet.op.2, jei w = 1] 4. atmintis akumuliatorius 1010 000w adr.j.b adr.j.b adr.v.b. Komandos formatas yra toks, kad registras ir operandas betarpikai nenurodyti. I operacijos kodo yra inoma, kad registras yra akumuliatorius. 5. akumuliatorius atmintis 1010 001w adr.j.b adr.j.b adr.v.b. Pastaba. Atvej 4. ir 5. negalima sujungti vien 101000 d w adr.j.b adr.j.b adr.v.b. , nes bitas d apibia prieingos krypties perdavim, negu yra nurodyta 4. ir 5. atvejais. 6. registras / atmintis segmento registras 1000 11d0 mod 0 sreg r/m [poslinkis] sreg negali bti lygus 01, nes negalima nusisti reikms registr CS, nes prieingu atveju priskyrimo veiksmu pakeistume CS registro reikm, o ji gali bti pakeista tik valdymo perdavimo komandomis. Nra w bito, nes operandas visada 2 bait. PUSH djimas stek. Prie raant stek reikia sumainti steko rodykl : SP = SP - 2 (steke operuojame odiais). 1. registras / atmintis stekas 1111 1111 mod 110 r/m [poslinkis] 65

KOMPIUTERI ARCHITEKTRA Tai yra vieno operando komanda, laukas reg yra naudojamas kaip operacijos kodo ipltimas. 2. registras 0101 0reg stekas

Nra varianto, ar registras baitinis ar odinis, nes vienareimikai jis yra odinis. 3. segmento registras 000 sreg 110 stekas

POP pamimas i steko. Pamus i steko reikia padidinti steko rodykl : SP = SP + 2 (steke operuojame odiais). 1. stekas registras / atmintis 1000 1111 mod 110 r/m [poslinkis] 2. stekas registras 01011 reg 3. stekas segmento registras 000 sreg 111 sreg negali bti lygu 01, nes tada pakeistume CS registro reikm, o ji gali bti pakeista tik valdymo perdavimo komandomis. XCHG eXCHanGe apsikeitimas reikmmis. 1. registras / atmintis registras 1000 011w mod reg r/m [poslinkis] 2. registras 10010 reg akumuliatorius

Nra w bito, nes ia komanda vykdomas apsikeitimas tarp akumuliatoriaus AX ir dviej bait registro, reg = { AX, CX, DX, BX, SP, BP, SI, DI } Komanda XCHG AX, AX yra ekvivalenti NOP, t.y., operacijos kodas yra 1001 0000, t.y., 90h. OUT ivedimas port. 1. Fiksuotas portas. 1110 011w portas;

66

KOMPIUTERI ARCHITEKTRA Registre AL (jei w = 0) arba registre AX (jei w = 1) esanti reikm nusiuniama port, nurodyt komandoje porto numeriu. 2. Kintamas portas. 1110 111w Porto numeris yra imamas i registro DX, todl galima nurodyti 65 536 skirtingus portus. Vykdant komand, reikm i AL (jei w = 0) arba i AX (jei w = 1) yra siuniama port. IN nuskaitymas i porto. 1. Fiksuotas portas. 1110 010w portas Vykdant komand, i porto su nurodytu numeriu padedama reikm registr AL (jei w = 0) arba registr AX (jei w = 1). 2. Kintamas portas. 1110 110w Porto numeris yra imamas i registro DX, todl galima nurodyti 65 536 skirtingus portus. Vykdant komand, reikm i porto uraoma registr AL (jei w = 0) arba AX (jei w = 1). Kai atliekamas veiksmas yra odinis, tai tie 2 baitai yra imami ne i dviej gretim port, bet abu i to paio porto, skaitant i jo per du taktus. XLAT transLATe kodo pamimas pagal poslink. 1101 0111 Komanda naudojama duomen perkodavimui. Registre BX esantis adresas rodo perkodavimo lentel. Imamas registre AL esantis baitas ir jis traktuojamas kaip poslinkis nuo perkodavimo lentels pradios. Vykdant komand, reikm, esanti perkodavimo lentelje su poslinkiu, nusiuniama registr AL. AL Perkodavim lentel

BX

...

67

KOMPIUTERI ARCHITEKTRA

LEA Load Effective Address pakrauti (patalpinti) vykdomj adres. 1000 1101 mod reg r/m [poslinkis] Komanda atlieka vykdomojo (efektyvaus) adreso nusiuntim registr. reg yra bet kuris 16 bit registras, iskyrus segmento registrus. Kadangi antras operandas btinai yra atmintis, mod negali bti lygus 11. LDS Load ponter using DS bendro registro ir DS upildymas. 1100 0101 mod reg r/m [poslinkis] Komanda atlieka atminties dvigubo odio jaunesnij adresu dviej bait nusiuntim registr, nurodyt lauke reg, ir vyresni adres dviej bait nusiuntim registr DS. jaunesnysis odis vyresnysis odis registras, nurodytas lauke reg registras DS

Kadangi antras operandas btinai yra atmintis, mod negali bti lygus 11. Komandos lauku r/m [poslinkis] nurodomas dvigubo odio lauk atmintyje; operando adresas suformuojamas panaudojant registr DS : DS + efektyvus adresas . LES Load pointer using ES bendro registro ir ES upildymas. 1100 0100 mod reg r/m [poslinkis] Komanda LES yra panai komand LDS: atlieka atminties dvigubo odio jaunesnij adresu dviej bait nusiuntim registr, nurodyt lauke reg, ir vyresni adres dviej bait nusiuntim registr ES. jaunesnysis odis vyresnysis odis registras, nurodytas lauke reg registras ES

Kadangi antras operandas btinai yra atmintis, mod negali bti lygus 11. Komandos lauku r/m [poslinkis] nurodomas dvigubo odio lauk atmintyje; operando adresas suformuojamas panaudojant registr DS (ne registr ES !) : DS + efektyvus adresas. LAHF Load AH status Flag registro AH upildymas registro SF jaunesniuoju baitu. 1001 1111

68

KOMPIUTERI ARCHITEKTRA SAHF Save AH status Flag registro AH nusiuntimas registro SF jaunesnj bait. 1001 1110 Pastaba: Intel 8080 procesoriuje buvo komandos LAHF ir SAHF. Intel 8088 komand sistem jos trauktos tam, kad veikt programos, kurios buvo raytos senesniam, Intel 8080, procesoriui. PUSHF PUSH status Flag registro SF nusiuntimas stek. 1001 1100 POPF POP status Flag registro SF upildymas i steko virns. 1001 1101 Tai yra vienintel komanda, kuri pakeiia vis registre SF esani reikm i karto. Kitomis komandomis galima keisti atskirus bitukus.

5.2.

Aritmetins komandos

ADD sudtis 1. registras + registras / atmintis 0000 00dw mod reg r/m [poslinkis] 2. registras / atmintis + betarpikas operandas 1000 00sw mod 000 r/m [poslinkis] bet.op.j.b. [bet.op.v.b] Jeigu s:w = 01, tada betarpikas operandas yra imamas i 16 komandos bit. Jeigu s:w = 11, tada betarpikas operandas yra imamas i 8 komandos bit ir ipleiamas iki 16 bit pagal enklo pltimo taisykl: jeigu vyriausiame bite buvo 1, tada ipleiame vienetais, o jeigu vyriausiame bite buvo 0, tada ipleiame nuliais. Jeigu w = 0, tai s gali bti lygu 0 arba 1 betarpikas operandas bus vieno baito. 3. akumuliatorius + betarpikas operandas 0000 010w bet.op.j.b [bet.op.v.b., jei w = 1] ADC ADd with Carry sudtis, skaitant perneimo bit CF. Komanda yra analogika komandai ADD, tik papildomai pridedamas CF: operandas1 + operandas2 + CF 1. registras + registras / atmintis 0001 00dw mod reg r/m [poslinkis] 2. registras / atmintis + betarpikas operandas 1000 00sw mod 010 r/m [poslinkis] bet.op.j.b. [bet.op.v.b] 69

KOMPIUTERI ARCHITEKTRA Jeigu s:w = 01, tada betarpikas operandas yra imamas i 16 komandos bit. Jeigu s:w = 11, tada betarpikas operandas yra imamas i 8 komandos bit ir ipleiamas iki 16 bit pagal enklo pltimo taisykl: jeigu vyriausiame bite buvo 1, tada ipleiame vienetais, o jeigu vyriausiame bite buvo 0, tada ipleiame nuliais. Jeigu w = 0, tai s gali bti lygu 0 arba 1 betarpikas operandas bus vieno baito. 3. akumuliatorius + betarpikas 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 uraomas pirmj. 0010 10dw mod reg r/m [poslinkis] Nors atimt realizuoja sudtis su prieingu 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 - betarpikas operandas 1000 00sw mod 101 r/m [poslinkis] bet.op.j.b. [bet.op.v.b] Jeigu s:w = 01, tada betarpikas operandas yra imamas i 16 komandos bit. Jeigu s:w = 11, tada betarpikas operandas yra imamas i 8 komandos bit ir ipleiamas iki 16 bit pagal enklo pltimo taisykl: jeigu vyriausiame bite buvo 1, tada ipleiame vienetais, o jeigu vyriausiame bite buvo 0, tada ipleiame nuliais. Jeigu w = 0, tai s gali bti lygu 0 arba 1 betarpikas operandas bus vieno baito. 3. akumuliatorius - betarpikas operandas 0010 110w bet.op.j.b. [bet.op.v.b.,w = 1] SBB SuBtraction with Borrow atimtis su pasiskolinimu Komanda yra analogika komandai SUB, tik papildomai atimamas CF: operandas1 - operandas2 CF

70

KOMPIUTERI ARCHITEKTRA 1. registras / atmintis ~ registras Abu operandai gali bti pirmu arba antru operandu. Rezultatas uraomas pirmj. 0001 10dw mod reg r/m [poslinkis] 2. registras / atmintis - betarpikas operandas 1000 00sw mod 011 r/m [poslinkis] bet.op.j.b. [bet.op.v.b] Jeigu s:w = 01, tada betarpikas operandas yra imamas i 16 komandos bit. Jeigu s:w = 11, tada betarpikas operandas yra imamas i 8 komandos bit ir ipleiamas iki 16 bit pagal enklo pltimo taisykl: jeigu vyriausiame bite buvo 1, tada ipleiame vienetais, o jeigu vyriausiame bite buvo 0, tada ipleiame nuliais. Jeigu w = 0, tai s gali bti lygu 0 arba 1 betarpikas operandas bus vieno baito. 3. akumuliatorius - betarpikas operandas 0001 110w bet.op.j.b. [bet.op.v.b., w = 1] DEC DECrement sumainimas 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 poymi formavimui, veikia panaiai kaip ir komanda SUB, taiau nesimena rezultato. Poymi formavimas: Jeigu operandai yra skaiiai be enklo: OF N N N SF N N N ZF 0 1 0 CF 0 0 1

op.1 > op.2 op.1 = op.2 op.1 < op.2 op. operandas; N nesvarbu.

Jeigu operandai yra skaiiai su enklu:

71

KOMPIUTERI ARCHITEKTRA OF 0/1 0 0/1 SF 0/1 0 0/1 ZF 0 1 0 CF N N N

op.1 > op.2 op.1 = op.2 op.1 < op.2

op. operandas; N nesvarbu. 0 / 1 0 arba 1, priklausomai, nuo konkrei lyginam reikmi.

Skaii su enklu palyginimas, diapazone -128 127 : SF 0 1 1 0 OF 0 1 0 1

0 < A B <= 127 A B > 127 -128 <= A B < 0 A B < -128

Taigi A > B, kai : A < B, kai :

1. OF = 0; SF = 0 2. OF = 1; SF = 1 1. OF = 1; SF = 0 2. OF = 0; SF = 1

,t.y., kai OF lygu SF ,t.y., kai OF nelygu SF

Algoritmas poymiui OF nustatyti: Vyriausij baito bit paymkim s, taip pat stebsime bit, einant po bito s (vyresn u bit s), j paymkime x. Skirkime du atvejus: 1. I operandas > II operandas, t.y., rezultatas teigiamas: jeigu x = 0 ir s = 0, tada OF = 0; jeigu x = 0 ir s = 1, tada OF = 1. 2. I operandas < II operandas, t.y., rezultatas neigiamas: jeigu x = 1 ir s = 1, tada OF = 0; jeigu x = 1 ir s = 0, tada OF = 1. Pavyzdiai: 1. 10 - 5 (10)10 = (1010)2 (5)10 = (101)2 ,

0000 0101 1111 1010 + 1 1111 1011 = (-5)10 0000 1010

72

KOMPIUTERI ARCHITEKTRA 1111 1011 10000 0101 2. 100 - (-101) (100)10 = (1100100)2 (101)10 = (1100101)2 0110 0100 0110 0101 1100 1001
+

OF = 0, SF = 0

OF = 1, SF = 1

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

0000 0011 1111 1100 + 1 1111 1101 = (-3)10 0000 0111 1111 1000 + 1 1111 1001 = (-7)10
+

(7)10 = (111)2,

1111 1101 1111 1001 11111 0110

OF = 0, SF = 1

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

0110 0101 1001 1010 + 1 1001 1011 = (-101)10 0110 0100 1001 1011 + 1 1001 1100 = (-100)10 1001 1011 1001 1100 10011 0111

(100)10 = (110010)2

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 - betarpikas operandas 1000 00sw mod 111 r/m [poslinkis] bet.op.j.b. [bet.op.v.b.] Jeigu s:w = 01, tada betarpikas operandas yra imamas i 16 komandos bit. Jeigu s:w = 11, tada betarpikas operandas yra imamas i 8 komandos bit ir ipleiamas iki 16 bit pagal enklo pltimo taisykl: jeigu vyriausiame bite buvo 1, tada ipleiame vienetais, o jeigu vyriausiame bite buvo 0, tada ipleiame nuliais. Jeigu w = 0, tai s gali bti lygu 0 arba 1 betarpikas operandas bus vieno baito. 3. akumuliatorius - betarpikas 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 reikm operandas 2 Jeigu dauginami odiai, tai: registre AX esanti reikm operandas 2 registras AX registrai [DX, AX]

Jeigu daugybos ruzultato vyresnioji pus yra nulin, tada CF = 0 ir OF = 0, prie6ingu 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 reikm operandas 2 Jeigu dauginami odiai, tai: registre AX esanti reikm operandas 2 registras AX registrai [DX, AX]

Jeigu daugybos rezultato vyresniosios puss kiekvieno bito reikm lygi jaunesniosios puss vyriausiam bitui, t.y., daugybos rezultato vyresnioji pus yra tik jaunesniosios puss enklo ipltimas, tada rezultatas tilpo jaunesniojoje pusje, todl CF = 0 bei OF = 0. Prieingu 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 reikm : operandas 2 dalmuo registre AL liekana registre AH

74

KOMPIUTERI ARCHITEKTRA Jeigu w = 1, tada daliklis yra odis, ir: registruose[DX, AX] esanti reikm : operandas 2 dalmuo registre AX 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 reikm : operandas 2 dalmuo registre AL liekana registre AH dalmuo registre AX liekana registre DX

Jeigu w = 1, tada daliklis yra odis, ir: registruose[DX, AX] esanti reikm : operandas 2

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 analogikas rezultatui, kur gautume atlik tok veiksm: 0 - operandas operandas Faktikai, pritaikius komand NEG, operand gauname papildomu kodu.

5.3.

Veiksmai su deimtainio formato skaiiais

Tai yra veiksm, atlikt bendrosiomos komandomis patikslinimas, kad rezultatas bt korektikas. Pastaba. Poymis AF fiksuoja perneim i jaunesnio pusbaiio, o poymis CF fiksuoja perneim i baito. AAA Ascii Adjust for Addition 0011 0111 ASCII tai yra simbolinis kodavimas, kuriam yra ekvivalents deimtainio nesupakuoto formato skaiiai, nes vienas toks skaiius uima vien bait. Komanda yra koreguojama reikm, esanti registre AL, kuri pertvarkoma teising deimtain nesupakuot skaii, kurios vyresnis pusbaitis yra 0h, o jaunesniajame pusbaityje yra skaiiai i diapazono 0h 9h. 75

KOMPIUTERI ARCHITEKTRA Jeigu korekcijos rezultatas yra didesnis u 9h, nra kaip to ufiksuoti deimtainiu nesupakuotu skaiiumi, todl komanda AAA suformuoja poym CF = 1 ir registre AH esani reikm padidina vienetu. Komandos AAA veikimas priklauso nuo registro SF poymio AF. Veikiant komandai AAA, poymis AF yra numetamas, nes baigus vykdyti komand, it poym jau yra sureaguota. Komandos AAA veikimo algoritmas:
if ( (AL AL AH AF CF else AF CF endif AL := AL and 0Fh) > 9 or (AF = 1) ) then := AL + 6 := AH + 1 := 1 := 1 := 0 := 0 and 0Fh

Pavyzdiai: 1. 3 + 7 = 0A 10 00 Komandos AAA veikimo rezultate, skaiiaus A reikm yra padidinama eiais dl pagrind skirtumo: sudedant pozicijos svoris yra 16, o norime gauti reikm, kurios pozicijos svoris yra 10. Taiau teisingas deimtainis nesupakuotas skaiius vyresniame pusbaityje turi turti nul, todl rezultatas yra dar koreguojamas iki 00. Gautas rezultatas buvo didesnis u 9, todl nustatomas poymis CF = 1, ir registre AH esanti reikm padidinama vienetu. 2. 8 + 9 = 11 17 07 1-ame pavyzdyje koregavome rezultat 0A, poymis AF buvo lygus 0. Tarkime, kad po sudties gavome 11, tada papildomo perneimo poymis AF nustatomas lygus 1. Skaii 11 padidiname eiais ir gauname 17. Kadangi vyresniame pusbaityje turi bti 0, tai i reikm pakoreguojama 07. Nustatomas poymis CF = 1, registre AH esanti reikm padidinama vienetu, numetamas poymis AF.

DAA Decimal Adjust for Addition 0010 0111 Komanda yra koreguojama reikm, esanti registre AL, kuri pertvarkoma teising deimtain supakuot skaii diapazone. Jeigu po korekcijos rezultatas virija 99, tai nustatomas poymis CF = 1

Komandos AAA veikimo algoritmas: 76

KOMPIUTERI ARCHITEKTRA
if ( (AL AL AF endif if ( (AL AL CF endif and 0Fh) > 9 or (AF = 1) then := AL + 6 := 1 > 9Fh) or (CF = 1) ) then := AL + 60h := 1

Pavyzdiai: 1. 24 + 27 = 4B 51 Sudties rezultat 4B gauname naudodami esam sudties komand. Komanda DAA prideda 6, ir turime korektik deimtain supakuot skaii-rezultat: 51. 2. 29 + 28 = 51 57 51 bt teisingas deimtainis supakuotas skaiius, bet atliekant sudt buvo fiksuotas perneimas vyresn pusbait: poymis AF = 1, todl yra pritaikoma komanda DAA. 3. 62 + 64 = C6 26 Koreguojant sudties rezultat C6, gauname 126, o tai yra daugiau u 99 ir virija deimtaini supakuot skaii diapazon. Todl yra nustatomas poymis CF = 1. 4. 66 + 65 = CB D1 31 Koreguojant sudties rezultat CB, gauname D1, o tai irgi yra neteisingas deimtainis skaiius, todl komanda DAA koreguoja dar kart, taip gaunamas 131, o tai yra daugiau u 99 ir virija deimtaini supakuot skaii diapazon. Todl yra nustatomas poymis CF = 1. 5. 46 + 55 = 9B A1 01 Koreguojant sudties rezultat 9B, gauname A1, o tai yra vis dar neteisingas deimtainis skaiius, todl komanda DAA koreguoja dar kart, taip gaunamas 101, o tai yra daugiau u 99 ir virija deimtaini supakuot skaii diapazon. Todl yra nustatomas poymis CF = 1. AAS Ascii Adjust for Substraction 0011 1111 Komanda yra koreguojama reikm, esanti registre AL, kuri pertvarkoma teising deimtain nesupakuot skaii, kurios vyresnis pusbaitis yra 0h, o jaunesniajame pusbaityje yra skaiiai i diapazono 0h 9h. Jeigu korekcijos rezultatas yra daugiau u 9, tai komanda AAS registro AH reikm sumaina vienetu ir nustato poym CF = 1, prieingu atveju, CF = 0. Atimties, kurios rezultat koreguojame komanda AAS, operandai yra i diapazono 0 9, todl po atimties turime : 1. rezultatas >= 0: 0 <= rezultatas <= 9 Korekcija nereikalinga. 2. rezultatas < 0 : -9 <= rezultatas < 0 -9 = F7 <= rezultatas <= FF = -1 77

KOMPIUTERI ARCHITEKTRA F7 <= rezultatas <= FF -6 1 <= rezultatas <= 9 , AH sumainama vienetu. Komandos AAS veikimo algoritmas:
if ( (AX AL AH AF CF else AF CF endif AL := AL and 0Fh) > 9 or (AF = 1) ) then := AL - 6 := AH - 1 := 1 := 1 := 0 := 0 and 0Fh

Pavyzdys: 5 - 8 (5)10 = (101)2 , (8)10 = (1000)2

0001 0000 1110 1111 + 1 1111 1000 = (-8)10


+

(1)5 - 8 = 7 FD F7 07 Rezultatui FD reikalinga korekcija, atimama 6. Nesupakuoto deimtainio skaiiaus vyresiame pusbaityje turi bti nulis, todl F7 koreguojame ir turime rezultat 7. Tokios korekcijos eigoje komanda AAS vienetu sumaino registre AH esani reikm. DAS Decimal Adjust for Subtraction 0010 1111 Komanda yra koreguojama reikm, esanti registre AL, kuri pertvarkoma teising deimtain supakuot skaii diapazone. Jeigu po korekcijos rezultatas virija 99, tai komanda DAS nustato poym CF = 1, prieingu atveju, CF = 0. Atimties, kurios rezultat koreguojame komanda DAS, operandai yra i diapazono 0 99. Po atimties gauname reikm xy ir tikriname: 1. Ar CF = 1? 2. Ar AF = 1? 3. Ar x yra teisingas deimtainis skaitmuo? 4. Ar y yra teisingas deimtainis skaitmuo? Tada elgiamasi taip: 1. Jeigu AF = 1 arba y yra neteisingas deimtainis skaitmuo, tai xy = xy - 6. 2. Jeigu CF = 1 arba x yra neteisingas deimtainis skaitmuo, tai xy = xy - 60.

0000 0101 1111 1000 1111 1101 = (FD)16

78

KOMPIUTERI ARCHITEKTRA

Pavyzdys: 11 - 19 i kart atlikime skaiiavimus eioliktainje sistemoje: 11 19 F8 6 F2 60 92 (1)11 19 = 92 F8 F2 92 Skaiiuojant rezultat F8 nustatytas poymis AF = 1, todl j koreguojame atimdami 6, gauname F2. F yra neteisingas deimtainis skaiius, o ir CF nustatytas lygus vienam, todl atimame 60, gauname 92. Komandos DAS veikimo algoritmas:
if ( (AL AL AF endif if ( (AL AL CF endif and 0Fh) > 9 or (AF = 1) then := AL - 6 := 1 > 9Fh) or (CF = 1) ) then := AL 60h := 1

AAM Ascii Adjust for Multiplication 1101 0100 0000 1010 Komanda yra taikoma po dviej deimtaini nesupakuot skaii baitins daugybos, kai sandauga yra registre AX, o iuo atveju, t.y., kai yra dauginami du deimtainiai nesupakuoti skaiiai, rezultatas telpa registre AL (maksimalus rezultatas yra 9 9 = 81). Komanda AAM padalina registre AL esani reikm i 10, tada dalmen urao registr AH, o liekan registr AL:
AH := AL div 10 AL := AL mod 10

Taip du skaiiai yra atskiriami, ir registruose AH ir AL turime teisingus deimtainius nesupakuotus skaiius, kai vyresniame pusbaityje yra nulis, o jaunesniame pusbaityje yra skaitmuo i diapazono: 0h 9h. Pavyzdys: jeigu dalybos rezultate gauname 79, tai po komandos AAM suveikimo, registre AH yra 7, o registre AL yra 9.

79

KOMPIUTERI ARCHITEKTRA Pastaba. Supakuotiems deimtainiams skaiiams nra daugybos korekcijos komandos. AAD Ascii Adjust for Division 1101 0101 0000 1010 Komanda atlieka dalybos rezultato korekcij deimtainiams nesupakuotiems skaiiams. i korekcijos komanda skiriasi nuo kit korekcijos komand tuo, kad ji yra taikoma ne rezultatui, o paruoia duomenis deimtaini nesupakuot skaii dalybai. Deimtaini nesupakuot skaii dalybos korekcijos komanda taria, kad dalmuo yra registre AX kaip dviej bait deimtainis nesupakuotas skaiius, kurio vyresnis skaitmuo yra registre AH, kurio vyresnis pusbaitis yra nulis. Komanda atlieka tokius veiksmus:
AL := AH * 10 + AL AH := 0

Tada yra atliekama dalybos komanda DIV. Pastaba. Supakuotiems deimtainiams skaiiams nra dalybos korekcijos komandos.

5.4.

Konvertavimas

CBW Convert Byte to Word 1001 1000 i komanda yra taikoma skaiiams su enklu, tokiems kurie yra baito diapazone, t.y., -128 127. Registro AL vyriausiasis bitas yra iskleidiamas registr AH. Taip reikm baite yra pervedama reikm odyje. CWD Convert Word to Double word 1001 1001 i komanda yra taikoma skaiiams su enklu, tokiems, kurie yra dviej bait odio diapazone, t.y., -32768 32767. Registro AX vyriausiasis bitas yra iskleidiamas registr DX. Taip reikm baite yra pervedama reikm odyje. Komanda gali bti naudojama, pvz., dalybos veiksmo IDIV paruoimui, nes odyje esani reikmi dalyba reikalauja, kad pirmas operandas bt keturiuose baituose, t.y., registruose [DX, AX].

80

KOMPIUTERI ARCHITEKTRA

5.5.

Logins komandos

NOT loginis paneigimas. 1111 011w mod 010 r/m [poslinkis] Vykdant komand, lauko bitai yra invertuojami. SHL / SAL SHift logical Left / Shift Arithmetic Left loginis postmis kair / aritmetinis postmis kair. 1101 00vw mod 100 r/m [poslinkis] Jeigu v = 0, tai pastumiama kair per vien pozicij. Jeigu v = 1, tai postmio skaitliukas yra registro CL reikm. Deinieji (jaunesnieji) atsilaisvin bitai yra upildomi nuliais. Jeigu postmyje per vien bit enklo bitas nekeiia reikms, tai OF = 0, prieingu atveju, OF = 1. Jeigu postmis yra per kelis bitus, tada poymis OF yra neapibrtas. SHR SHift logical Right loginis postmis dein. 1101 00vw mod 101 r/m [polinkis] Jeigu v = 0, tai pastumiama dein per vien pozicij. Jeigu v = 1, tai postmio skaitliukas yra registro CL reikm. Vyresnieji atsilaisvin bitai yra upildomi nuliais, kiekvienam istumtam bitui. Jeigu postmyje per vien bit vyriausias bitas nekeiia reikms, tai OF = 0, prieingu atveju, OF = 1. Jeigu postmis yra per kelis bitus, tada poymis OF yra neapibrtas. SAR Shift Arithmetic Right aritmetinis postmis dein. 1101 00vw mod 111 r/m [poslinkis] Jeigu v = 0, tai pastumiama dein per vien pozicij. Jeigu v = 1, tai postmio skaitliukas yra registro CL reikm. Vyresnieji atsilaisvin bitai yra upildomi nuliais arba vienetais, taip, kad bt isaugotas enklas. Jeigu postmyje per vien bit enklo bitas nekeiia reikms, tai OF = 0, prieingu atveju, OF = 1. Jeigu postmis yra per kelis bitus, tada poymis OF yra neapibrtas.

81

KOMPIUTERI ARCHITEKTRA Pastaba. Postmyje dein loginis ir aritmetinis postmis nra tas pats, nes loginiame atsilaisvin, atsirad istumtj vietoje, bitai yra upildomi nuliais, o aritmetiniame postmyje atsilaisvin bitai yra upildomi enklo bitais. ROL ROtate Left ciklinis postmis kair. 1101 00vw mod 000 r/m [poslinkis] Jeigu v = 0, tai pastumiama dein per vien pozicij. Jeigu v = 1, tai postmio skaitliukas yra registro CL reikm. Stumiant per vien bit kair, vyriausias bitas upildo jauniausio bito reikm. Jeigu postmis yra daugiau nei per vien pozicij, tai atitinkamai daugiau vyresnij bit perneama jaunesnius. Jeigu postmyje per vien bit vyriausias bitas nekeiia reikms, tai OF = 0, prieingu atveju, OF = 1. Vyriausias bitas uraomas i poym CF. ROR ROtate Right ciklinis postmis dein. 1101 00vw mod 000 r/m [poslinkis] Jeigu v = 0, tai pastumiama dein per vien pozicij. Jeigu v = 1, tai postmio skaitliukas yra registro CL reikm. Stumiant per vien bit dein, jauniausias bitas upildo vyriausio bito reikm. Jeigu postmis yra daugiau nei per vien pozicij, tai atitinkamai daugiau jaunesnij bit perneama vyresnius. Jeigu postmyje per vien bit vyriausias bitas nekeiia reikms, tai OF = 0, prieingu atveju, OF = 1. Jauniausias bitas uraomas i poym CF. RCL Rotate Left through Carry perstumti ciklikai kair, panaudojant perneimo bit CF. 1101 00vw mod 010 r/m [poslinkis] Jeigu v = 0, tai pastumiama dein per vien pozicij. Jeigu v = 1, tai postmio skaitliukas yra registro CL reikm.

CF

82

KOMPIUTERI ARCHITEKTRA

RCR Rotate Right through Carry perstumti ciklikai dein, panaudojant perneimo bit CF. 1101 00vw mod 011 r/m [poslinkis] Jeigu v = 0, tai pastumiama dein per vien pozicij. Jeigu v = 1, tai postmio skaitliukas yra registro CL reikm.

CF

AND loginis ir. Komanda naudojama formuoti nuliniams laukams. 1. registras / atmintis registras 0010 00dw mod reg r/m [poslinkis] 2. betarpikas operandas registras / atmintis 1000 00sw mod 100 r/m [poslinkis] bet.op.j.b [bet.op.v.b.] Jeigu s:w = 01, tada betarpikas operandas yra imamas i 16 komandos bit. Jeigu s:w = 11, tada betarpikas operandas yra imamas i 8 komandos bit ir ipleiamas iki 16 bit odio, pagal enklo pltimo taisykl. 3. betarpikas operandas akumuliatorius 0010 010w bet.op.j.b. [bet.op.v.b., jei w = 1] OR loginis arba. Komanda naudojama formuoti vienetiniams laukams. 1. registras / atmintis registras 0000 10dw mod reg r/m [poslinkis] 2. betarpikas operandas registras / atmintis 1000 00sw mod 001 r/m [poslinkis] bet.op.j.b [bet.op.v.b.] Jeigu s:w = 01, tada betarpikas operandas yra imamas i 16 komandos bit. Jeigu s:w = 11, tada betarpikas operandas yra imamas i 8 komandos bit ir ipleiamas iki 16 bit odio. 3. betarpikas operandas akululiatorius

83

KOMPIUTERI ARCHITEKTRA 0000 110w bet.op.j.b. [bet.op.v.b., jei w = 1] XOR eXclusive OR iimtinis arba Operacijoje su vienetiniu lauku, komanda operando bitus keiia prieingus. Operacijoje su nuliniu lauku, operando lauko bitai yra isaugomi. 1. registras / atmintis ^ registras 0011 00dw mod reg r/m [poslinkis] 2. betarpikas operandas ^ registras / atmintis 1000 00sw mod 110 r/m [poslinkis] bet.op.j.b [bet.op.v.b.] Jeigu s:w = 01, tada betarpikas operandas yra imamas i 16 komandos bit. Jeigu s:w = 11, tada betarpikas operandas yra imamas i 8 komandos bit ir ipleiamas iki 16 bit odio. 3. betarpikas operandas ^ akumuliatorius 0011 010w bet.op.j.b. [bet.op.v.b., jei w = 1] TEST patikrinimas Atliekama operacija, analogika operacijai AND, taiau rezultatas nra isaugomas, o formuojami poymi bitai: 1. CF = 0 ir OF = 0; 2. AF neapibrtas; 3. PF, SF, ZF j reikms keiiamos pagal rezultato reikm. Komanda yra naudojamas su valdymo prie valdymo perdavimo komandas 1. registras / atmintis ~~ registras 1000 010w mod reg r/m [poslinkis] 2. betarpikas operandas ~~ registras / atmintis 1111 011w mod 000 r/m [poslinkis] bet.op.j.b [bet.op.v.b., jei w = 1] 3. betarpikas operandas ~~ akumuliatorius 1010 100w bet.op.j.b. [bet.op.v.b., jei w = 1]

5.6.

Eilutins komandos

REP REPeate pakartoti (pakartojimo prefiksas, priedas prie eilutins komandos). Pakartojimo prefiksas slygoja sekanios komandos pakartojim, jeigu ZF = 1 (t.y., yra nulis arba lygu, pagal situacij) ir registre CX esanti reikm nelygi nuliui. Sinonimai: REP / REPZ / REPE REPeate / REPeate if Zero / REPeate if Equal pakartoti / pakartoti, jei yra nulis / pakartoti, jei lygu. 84

KOMPIUTERI ARCHITEKTRA 1111 0011 z bitas, kuris yra lygus 1, ZF = z Registro CX reikm keiia eilutin komanda. Komanda su pakartojimo prefiksu, kuris iaukia ciklin vykdym: REP komanda . REP komanda vykdymas gali bti pertrauktas. Pertraukimas simena tik vien prefiks ir j atstato. Prefiksas REP turi bti betarpikai prie komand, kuri yra kartojama. Jeigu yra panaudoti papildomai vienas arba du prefiksai (segmento keitimo, magistrals blokavimo), tai po pertraukimo ie prefiksai nebeatstatomi, ir pratsus vykdym rezultatai gali bti nekorektiki. Todl prie tok prefiksin veiksm su pakartojimu reikia udrausti pertraukimus, o atlikus veiksma vl juos leisti. Kita vertus, gali gautis neleistinai ilgas laiko tarpas, kai pertraukimai neleidiami. Pastaba. Prefikso bitas z neturi takos eilutinms komandoms MOVS, LODS, STOS. Neturi takos ir neeilutinms komandoms, formaliai prie jas pritaikius pakartojimo prefiks, taiau tos komandos nemaina registre CX esanios reikms, todl tokia pora pakartojimo prefiksas ir neeilutin komanda, maa turi prasms. REPNZ / REPNE REPeate if Not Zero / REPeate if Not Equal pakartoti, jei yra ne nulis / pakartoti, jei nelygu . Pakartojimo prefiksas slygoja sekanios komandos pakartojim, jeigu ZF = 0 (t.y., yra ne nulis arba nelygu, pagal situacij) ir registre CX esanti reikm nelygi nuliui. 1111 0010 z bitas, kuris yra lygus 1, ZF = z Registro CX reikm keiia eilutin komanda. Pastaba. Pakartojimo prefikso bitas z neturi reikms komandoms MOVS, LODS, STOS, o tik toms eilutinms komandoms, kuriomis atliekamas lyginimas arba skanavimas. Eilutins komandos su pakartojimo prefiksu vykdymo schema: Pastaba. Veiksm: CX CX - 1 atlieka eilutin komanda, jeigu ji yra su pakartojimo prefiksu. Pastaba. Pakartojimo prefiksas gali bti prie bet koki komand. DF 0 1 0 1 z 1 0 DELTA +1 -1 +2 -2

Baitas Baitas odis odis Prefiksas REP / REPE / REPZ REPNE / REPNZ

85

KOMPIUTERI ARCHITEKTRA

vykdyta ankstesn komanda ne

Ar yra prefiksas?

taip
CX = 0 ?

taip

ne
Pertraukimas ?

taip

Pertraukimo apdorojimas

ne CX CX - 1

vykdyti operacij panaudojant SI ir DI Pakoreguoti SI ir DI pagal DELTA

CMPS arba SCAS ?

taip

ZF = z ?

ne

ne taip

taip

Pakartojimo prefiksas?

ne Sekanti komanda

86

KOMPIUTERI ARCHITEKTRA MOVS MOVe String eiluts persiuntimas. 1010 010w Komanda yra persiuniamas baitas arba odis. Jeigu DF = 0, tai indeksiniai registrai SI ir DI yra padidinami baitu (padidinama vienetu) arba odiu (padidinama dviem). Jeigu DF = 1, tai indeksiniai registrai SI ir DI yra sumainami baitu (sumainama vienetu) arba odiu (sumainama dviem). altinio lauko adres nurodo registras SI, rezultato lauko adres nurodo registras DI. Adresai yra segmento viduje (ribose). Absoliutus rezulato lauko adresas suformuojamas naudojant registrus ES ir DI. Absoliutus altinio adresas gali bti formuojamas pasirinktinai naudojant registrus: CS, SS arba ES, ir DI. CMPS CoMPare String eilui palyginimas. 1010 011w Vienu palyginimo veiksmu yra lyginami baitai arba odiai, i altinio lauko atimant rezultato lauk. Suformuojami slygos poymiai, operandai nra keiiami, taiau modifikuojamos registr SI ir DI reikms, pagal indeksini registr modifikavimo taisykl priklausomai nuo poymio DF (aprayta prie komandos MOVS). SCAS SCAn String simboli paieka eilutje. 1010 111w Paieka yra atliekama palyginimu atmimo bdu: akumuliatorius - laukas, adresuojamas DI Akumuliatorius registras AL arba registras AX. Laukas, adresuojamas DI atitinkamai baito arba odio laukas, kurio adresas segmente yra nurodytas registre DI. Atliekant komand, atmimo rezultate, yra suformuojami poymiai ir modifikuojamas registras DI, pagal indeksini registr modifikavimo taisykl priklausomai nuo poymio DF (aprayta prie komandos MOVS). . LODS LOaD String eiluts uraymas akumuliatori. 1010 110w Baito laukas, nurodytas registru SI, uraomas akumuliatori registr AL. odio lauk, nurodytas registru SI, uraomas akumuliatori registr AX. Registras SI yra modifikuojamas pagal pagal indeksini registr modifikavimo taisykl priklausomai nuo poymio DF (aprayta prie komandos MOVS).

87

KOMPIUTERI ARCHITEKTRA STOS STOre String registro siminimas eilutje. 1010 101w Priklausomai nuo to, ar bitas w yra 0 ar 1, registre AL arba AX esanti reikm yra simenama eilutje, nurodytoje registru DI. Po to registras DI yra modifikuojamas, pagal indeksini registr modifikavimo taisykl priklausomai nuo poymio DF (aprayta prie komandos MOVS). . Pastaba. iai komandai segmento registras visada yra ES, o nurodius segmento keitimo prefiks, jis yra ignoruojamas.

5.7.

Valdymo perdavimo komandos

CALL paprograms (programos) ikvietimas Komanda perduoda valdym nurodytu adresu ir steke simena grimo adres. Valdymo perdavimo adresas nurodomas operandu. Procedr ikvietimas skirstomas pagal segmentin atminties organizacij: 1. Ikvietimas segmento viduje (NEAR); 2. Ikvietimas kitame segmente (FAR). Priklausomai nuo procedros ikvietimo bdo, grimo adresas simenamas steke dvejopai: pirmu atveju kaip IP, antru kaip IP : CS . 1. Vidinis tiesioginis (segmento viduje). 1110 1000 adr.j.b. adr.v.b. Dviej bait adresu galima nurodyti bet kuri viet segmente, bet komandoje nurodomas tiesioginis adresas atvilgiu einamosios IP reikms. Veiksmai: 1. SP SP - 2. 2. Steko virn IP. steko virn raome IP reikm, taip isaugomas grimo adresas komandos, einanios po CALL, adresas. 3. IP tiesioginis adresas, nurodytas komandoje kaip operandas + IP. Tiesioginis adresas yra skaiius su enklu odyje, adres diapazonas: -32768 32767. Valdymo perdavimo adresas apskaiiuojamas sudedant IP ir tiesiogin adres.

IP
Segmentas

X vieta, kur norim perduoti valdym C poslinkis X = IP + C

88

KOMPIUTERI ARCHITEKTRA X

X
Segmentas

X vieta, kur norim perduoti valdym C poslinkis X = IP + (-C)

C IP

2. Vidinis netiesioginis (segmento viduje) 1111 1111 mod 010 r/m posl.j.b. [posl.v.b.] Valdymo perdavimo adreso reikm yra imama i registro arba atminties, kuri yra nurodyta komandoje. Jeigu mod nelygu 11, tada: Atmintis CALL adresas IP RET Pagal adres, nurodyt komandoje, i atminties lauko yra paimama reikm ir ji yra traktuojama kaip adresas, kuriuo reikia perduoti valdym (adresas yra odis). Jeigu mod = 11, tada registre esanti reikm nusiuniama registr IP, ir tokiu bdu ji yra traktuojama kaip adresas, kuriuo reikia perduoti valdym. 3. Iorinis tiesioginis (u segmento rib). 1001 1010 adr.j.b. adr.v.b. seg.reg.j.b. seg.reg.v.b. Laukas seg.reg.j.b. seg.reg.v.b. yra nusiuniamas registr CS. Laukas adr.j.b. adr.v.b. yra nusiuniamas registr IP (tokiu bdu yra traktuojamas kaip poslinkis segmente). Veiksmai: 1. SP SP - 2. 2. Stekas CS.

Kita komanda

89

KOMPIUTERI ARCHITEKTRA 3. 4. 5. 6. SP SP - 2. Stekas IP. CS segmento registro reikm. kuriame yra kvieiamoji procedra. IP poslinkio segmente reikm, kur yra kvieiamoji procedra.

Kvieiama procedra gali bti bet kurioje operatyvios atminties vietoje. 4. Iorinis netiesioginis. 1111 1111 mod 011 r/m [poslinkis] Operandu nurodomas dviej odi laukas atmintyje. Komandos laukas mod negali bti lygus 11.

Stekas

Operandu nurodomas dviej bait laukas atmintyje

IP

CS

Vykdant komand, nurodyto lauko vyresnysis odis nusiuniamas registr CS, o jaunesnysis odis nusiuniamas registr IP. Taip yra atliekamas valdymo perdavimas. stek padedamos einamosios, prie valdymo perdavim buvusios, registr CS ir IP reikms (einamoji IP registro reikm rodo komand, esani po tuo metu vykdomos, iuo atveju po CALL), todl i procedros grtama teisingai. RET RETurn grimas i paprograms. Tai yra beadresin komanda, yra skirtingi atvejai grimo segmento viduje ir iorje. 1.Vidin be steko ilyginimo. 1100 0011

90

KOMPIUTERI ARCHITEKTRA Veiksmai: 1. IP 2. SP Stekas. SP + 2.

2. Vidin su steko ilyginimu. 1100 0010 bet.op.j.b. bet.op.v.b. Veiksmai: 1. IP 2. SP 3. SP Stekas. SP + 2. SP + betarpikas operandas.

Pastaba. Betarpikas operandas yra odis. 3. Iorinis be steko ilyginimo. 1100 1011 Veiksmai: 1. IP 2. SP 3. CS 4. SP Stekas. SP + 2. Stekas. SP + 2.

4. Iorinis su steko ilyginimu. 1100 1010 bet.op.j.b. bet.op.v.b. Veiksmai: 1. IP Stekas. 2. SP SP + 2. 3. CS Stekas. 4. SP SP + 2. 5. SP SP + betarpikas operandas.

JMP JuMP beslyginis perjimas. Kaip ir paprograms ikvietimo komanda, JMP komandos skiriasi priklausomai nuo to, ar perjimas yra segmento viduje ar iorje. Skirtumas yra tas, kad nra isaugomas grimo adresas. Be to yra galimas valdymo perdavimas baito su enklu ribose. 1. Vidinis artimas. 1110 1011 poslinkis Poslinkis traktuojamas kaip skaiius su enklu baite, diapazone: -128 127.

91

KOMPIUTERI ARCHITEKTRA Skaiiuojant valdymo perdavimo adres, baitas yra ipleiamas iki odio ir sudedamas su registre IP esania reikme. 2. Vidinis tiesioginis. 1110 1001 posl.j.b. posl.v.b. Poslinkis traktuojamas kaip skaiius su enklu odyje, diapazone: -32768 32767. Skaiiuojant valdymo perdavimo adres, poslinkis yra sudedamas su registre IP esania reikme. Valdymo perdavimas atliekamas pridedant arba atimant atitinkam reikm, kurios diapazonas: -32768 32767, yra pakankamas perduoti valdym bet kuri viet segmente. 3. Vidinis netiesioginis. 1111 1111 mod 100 r/m [poslinkis] Tiesiogin adresacija komandoje JMP yra ireikiama poslinkiu, o netiesioginje adresacijoje valdymo perdavimo adresas yra imamas i registro arba atminties odio ir nra sudedamas su registre IP esania reikme. Valdymo perdavimo adresas traktuojamas kaip skaiius be enklo odyje, todl valdymo perdavimas galimas bet kuri viet segmente. 4. Iorinis tiesioginis. 1110 1010 adr.j.b. adr.v.b. seg.reg.j.b. seg.reg.v.b. Laukas seg.reg.j.b. seg.reg.v.b. yra nusiuniamas registr CS. Laukas adr.j.b. adr.v.b. yra nusiuniamas registr IP (tokiu bdu yra traktuojamas kaip poslinkis segmente). Adresas ia yra traktuojamas kaip skaiius be enklo ir jis yra siuniamas registr IP, neatliekant sudjimo su buvusia registro IP reikme, kaip vidinio tiesioginio valdymo perdavimo atveju. 5. Iorinis netiesioginis. 1111 1111 mod 101 r/m [poslinkis] Operandu nurodomas dviej bait laukas atmintyje. Komandos laukas mod negali bti lygus 11. Vykdant komand, nurodyto lauko vyresnysis odis nusiuniamas registr CS, o jaunesnysis odis nusiuniamas registr IP.

92

KOMPIUTERI ARCHITEKTRA

5.8.

Slyginis valdymo perdavimas

Yra 17 slyginio valdymo perdavimo komand. T komand formatas:

OPK 1 baitas

poslinkis 1 baitas

Vykdant komand yra tikrinami poymiai arba registro CX reikm ir, priklausomai nuo to tikrinimo rezultat, jei slyga yra patenkinta, tai prie registre IP esanios reikms yra pridedamas poslinkio baitas, kuris yra traktuojamas kaip skaiius su enklu ir prapleiamas iki odio. Komanda
JA JNBE JAE JNB JNC JB JNAE

Iplstinis pavadinimas
Jump if Above Jump if Not Below nor Equal Jump if Above or Equal Jump if Not Below Jump if Not Carry Jump if Below Jump if Not Above nor Equal Jump if Carry Jump if Below or Equal Jump if Not Above Jump if Equal Jump if Zero Jump if CX is Zero Jump if Greater Jump if Not Less nor Equal Jump if Greater or Equal

Paaikinimas
Pereiti, jeigu virija Pereiti, jeigu ne maiau ir ne lygu Pereiti, jei virija arba lygu Pereiti, jei ne maiau Pereiti, jeigu nra perneimo Pereiti, jeigu maiau Pereiti, jeigu nevirija ir nelygu Pereiti, jeigu perneimas Pereiti, jeigu maiau arba lygu Pereiti, jeigu nevirija Pereiti, jeigu lygu Pereiti, jeigu nulis Pereiti, jeigu CX = 1 Pereiti, jeigu daugiau Pereiti, jeigu ne maiau ir nelygu Pereiti, jeigu daugiau arba lygu

Operacijos kodas
77

Tikrinama slyga
CF = 0 ir ZF = 0

73

CF = 0

72

CF = 1

JC JBE JNA JE JZ JCXZ JG JNLE JGE

76

CF = 1 arba ZF = 1

74

ZF = 1

E3 7F

CX = 0 ZF = 0 ir SF = OF

7D

SF = OF

93

KOMPIUTERI ARCHITEKTRA
JNL JL JNGE Jump if Not Less Jump if Less Jump if Not Greater nor Equal Jump if Less or Equal Jump if Not Greater Jump if Not Equal Jump if Not Zero Jump if Not Overflow Jump if Not Parity Jump if Parity Odd Jump if Parity Jump if Parity Even Jump if Overflow Jump if No Sign Pereiti, jeigu ne maiau Pereiti, jeigu maiau Pereiti, jeigu ne daugiau ir nelygu Pereiti, jeigu maiau arba lygu Pereiti, jeigu ne daugiau Pereiti, jeigu nelygu Pereiti, jeigu ne nulis Pereiti, jeigu ne perpildymas Pereiti, jeigu nra lyginumo Pereiti, jeigu bit suma nelyginin Pereiti, jeigu yra lyginumas Pereiti, jeigu bit suma lygin Pereiti, jeigu perpildymas Pereiti, jeigu enklo bitas yra nulis Pereiti, jeigu enklo bitas yra vienetas

7C

SF nelygu OF

JLE JNG JNE JNZ JNO JNP JPO JP JPE JO JNS

7E

ZF = 1 arba SF nelygu OF

75

ZF = 0

71 7B

OF = 0 PF = 0

7A

PF = 1

70 79

OF = 1 SF = 0

JS

Jump if Sign

78

SF = 1

5.9.

Cikl komandos

LOOP ciklas. E2 poslinkis Poslinkis yra vieno baito. Pakartojimas vykdomas tiek kart, kokia yra registro CX reikm. Vykdant yra mainama registro CX reikm: CX CX - 1. Jeigu registre CX esanti reikm nelygi nuliui, tai sekanti komanda nustatoma taip: einamasis IP + poslinkis, paimtas i komandos : IP IP + poslinkis. Jeigu registre CX esanti reikm lygi nuliui, tai vykdoma kita, toliau esanti, komanda.

94

KOMPIUTERI ARCHITEKTRA Ciklo komanda valdymas gali perduodamas per -128 127 baitus. Maksimalus ciklo pakartojimo skaiius yra 65 536. LOOPE LOOP if Equal pakartoti jeigu lygu. E1 poslinkis Poslinkis yra vieno baito. Pakartojimas vykdomas tiek kart, kokia yra registro CX reikm. Vykdant yra mainama registro CX reikm: CX CX - 1. Jeigu registre CX esanti reikm nelygi nuliui ir poymis ZF = 1, tai sekanti komanda nustatoma taip: einamasis IP + poslinkis, paimtas i komandos : IP IP + poslinkis. Jeigu registre CX esanti reikm lygi nuliui, tai vykdoma kita, toliau esanti, komanda. Ciklo komanda valdymas gali perduodamas per -128 127 baitus. Maksimalus ciklo pakartojimo skaiius yra 65 536. Alternatyvi ios komandos mnemonika LOOPZ LOOP if Zero pakartoti, jeigu nulis. LOOPNE LOOP if Not Equal pakartoti jeigu nelygu. E0 poslinkis Poslinkis yra vieno baito. Pakartojimas vykdomas tiek kart, kokia yra registro CX reikm. Vykdant yra mainama registro CX reikm: CX CX - 1. Jeigu registre CX esanti reikm nelygi nuliui ir poymis ZF = 0, tai sekanti komanda nustatoma taip: einamasis IP + poslinkis, paimtas i komandos : IP IP + poslinkis. Jeigu registre CX esanti reikm lygi nuliui, tai vykdoma kita, toliau esanti, komanda. Ciklo komanda valdymas gali perduodamas per -128 127 baitus. Maksimalus ciklo pakartojimo skaiius yra 65 536. Alternatyvi ios komandos mnemonika LOOPNZ LOOP if Not Zero pakartoti, jeigu ne nulis.

5.10.

Pertraukim komandos

INT INTerrupt programinis pertraukimas. CD tipas Atliekami veiksmai: 95

KOMPIUTERI ARCHITEKTRA 1. SP SP - 2 2. Stekas SF 3. SP SP - 2 4. Stekas CS 5. SP SP - 2 6. Stekas IP 7. IF 0 8. TF 0 9. CS tipas 4 + 2 10. IP tipas 4 9-tu ir 10-tu veiksmais yra perduodamas valdymas pertraukimo apdorojimo program. CD 3 sustojimo tako pertraukimas yra ekvivalentus specialiai pertraukimo komandai i vieno baito CC. Komanda asembleriu uraoma INT 3, o maininiai kodai CD 3 ir CC yra ekvivalents: CS 3 4 + 2 = CC + 2 IP 3 4 = CC Komanda INT 4, kurios kodas yra CD 4, ekvivalenti komandai INTO INTerrupt if Overflow pertraukimas jeigu yra perpildymas. Pertraukimas vyksta, jeigu OF = 1, ir : CS 4 4 + 2 = 10h + 2 IP 4 4 = 10h

IRET INTerrupt Return grimas i pertraukimo apdorojimo programos. CF Atliekami veiksmai: 1. IP Stekas 2. SP SP + 2 3. CS Stekas 4. SP Sp + 2 5. SF Stekas 6. SP SP + 2

96

KOMPIUTERI ARCHITEKTRA

5.11. Procesoriaus bsenos valdymas ir sinchronizavimas


Yra septynios komandos poymi CF, DF ir IF valdymui. CLC CLear Carry flag ivalyti perneimo poym: CF 1111 1000 STC SeT Carry flag nustatyti perneimo poym: CF 1111 1001 CMC CoMplement Carry flag invertuoti poym CF 1111 0101 CLD CLear Direction flag ivalyti krypties poym: DF 1111 1100 STD SeT Direction flag nustatyti krypties poym: DF 1111 1101 CLI CLear Interrupt flag ivalyti pertraukimo poym: IF 1111 1010 STI SeT Interrupt flag nustatyti pertraukimo poym: IF 1111 1011 HLT HaLT sustabdyti. 1111 0100 Komanda perveda procesori sustojimo bsen, i kurios procesorius gali ieiti iais atvejais: 1. RESET signalas CLR. 2. Operatorinis pertraukimas NMI. 3. Iorinis pertraukimas, jeigu jis neudraustas, t.y., IF = 1. Komanda HLT yra perjimas pertraukimo laukimo bsen. WAIT laukti. 1001 1011 Komanda kas penki taktai tikrina signal TEST. Sulauks signalo TEST, pradeda vykdyti kit komand, esani po WAIT komandos. 1 1 0 0 1 0

97

KOMPIUTERI ARCHITEKTRA WAIT komandos paskirtis yra procesoriaus pristabdymas, kol iorinis renginys baigs darb. Jeigu TEST = 1, tada komanda WAIT yra nurodytas laukimas, o jeigu TEST = 0, tai vykdoma kita komanda. Signal TEST valdo ioriniai renginiai, tame tarpe ir koprocesorius 8087. Mikroprocesorius laukimo metu gali sureaguoti pertraukimus, kuriuos vykds vl grta laukimo bsen. LOCK LOCK the bus udaryti magistral. 1111 0000 itas prefiksas gali bti panaudotas prie bet koki komand. Jis priveria procesori Intel 8088 blokuoti magistral tos komandos vykdymo metu, kad joks kitas procesorius negalt naudoti magistrals. Magistral sujungia procesori 8088 su iore: tai yra multikpleksin adreso/duomen magistral. Bendra magistral gali bti valdoma savu kontroleriu. Procesorius Intel 8088 gali dirbti dviem reimais: 1. Valdaniosios magistrals signalus generuoja pats 8088 procesorius. 2. Magistral valdo magistrals kontroleris speciali mikroschema. Komanda LOCK monopolizuoja prijim prie atminties, tam kad netrukdyt kiti sistemos procesoriai. ESC ESCape nubgti. 1101 1xxx mod yyy r/m [poslinkis] ios komandos pagalba koprocesorius 8087 gauna savo komandas ir operandus procesoriaus 8088 darbo metu. Pats procesorius 8088 tuo metu nieko nedaro, tik i atminties paima operand ir j nusiunia magistral. Procesoriaus 8088 komandos skaitymo i atminties metu, koprocesorius 8087 nuolat stebi magistral ir pasigauna komand ESC. Po to koprocesorius 8087 kontroliuoja magistral ir pasigauna adresavimo bait. Bitai xxx ir yyy i komandos ESC pirm dviej bait traktuojami kaip koprocesoriaus operacijos kodas. Kuomet procesorius 8088 nusiunia operando adres magistral (jeigu komandos operandas buvo atmintis), koprocesorius t operando adres pagauna ir pratsia pradtos koamndos vykdym. procesoriaus Intel 8088 registrus tada niekas nepatenka. Jeigu laukas mod = 11, tai operandas yra registre, todl procesorius 8088 nieko nedaro. Pavyzdys. DED9 1101 1110
ESC xxx

1101 1001
mod yyy r / m

Procesori 8088 ir 8087 registrai vienas kitam nra prieinami, ir informacij jie gali perduotit tik per atmint. Jeigu laukas mod = 11, tada komanda ESC mikroprocesoriuje veikia kaip NOP. Komandos ESC prasminis operandas yra operandas atmintyje, o komand su operandu registre mikroprocesorius vykdo kaip NOP. Ar operandas yra baitas ar odis, priklauso nuo koprocesoriaus operacijos xxx yyy.

98

KOMPIUTERI ARCHITEKTRA

6. Koprocesorius Intel 8087


Koprocesorius yra skirtas mikroprocesoriaus Intel 8088 galimybi ipltimui: arimetini veiksm su slankiu kableliu atlikimui. Koprocesorius yra pavaldus mikroprocesoriui ir paiame mikroprocesoriuje Intel 8088 yra atsivelgta 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 iorikai. Mikroprocesorius negali kreiptis koprocesoriaus registrus ir atvirkiai. 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 analogika 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 raymui. 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 iplstin artimetini duomen tip rinkin, su kuriais yra atliekamos aritmetins operacijos.

99

KOMPIUTERI ARCHITEKTRA Mikroprocesorius atlieka veiksmus su baitais arba odiais, traktuodamas skaiius kaip skaiius su enklu arba be enklo, taip pat turi deimtainius supakuotus ir ipakuotus skaiius. Koprocesorius turi septynis duomen tipus, i kuri ei yra bdingi tik koprocesoriui, t.y., j nra mikroprocesoriuje. Keturi koprocesoriaus duomen formatai yra skirti darbui su su sveikais skaiiais, vienas i j yra iplstinis deimtainis formatas. Lik trys formatai skirti veiksm su realiais skaiiais atlikimui.

6.1.

Koprocesoriaus duomen formatai

1. Sveikas odis, dvejetainiu papildomu kodu. s 15 enklo bitas 2. Sveikas trumpas, dvejetainiu papildomu kodu. s 31 30 4 baitai enklo bitas 3. Sveikas ilgas, dvejetainiu papildomu kodu. s 63 62 8 baitai enklo bitas 4. Supakuotas deimtainis iplstas. Vienas deimtainis skaitmuo uima keturis bitus. s 79 x 72 10 bait enklo bitas di deimtainis skaitmuo; s jeigu s = 0, tai skaiius teigiamas, jeigu s = 1, tai skaiius neigiamas; x bitai, neturintys takos. 100 d17 d16 ... d1 d0 1 0 ... ... 1 0 ... 1 0 ... 1 2 baitai 0

KOMPIUTERI ARCHITEKTRA Raant supakuoto deimtainio iplsto formato duomenis i atminties koprocesoriaus registr, bitai x yra nepaibrti, o uraant toki reikm i registro atmint, x bitai yra nuliniai. Atuoniolika deimtaini skaitmen uima devynis baitus, dar vienas baitas yra enklo baitas (jis reikalingas enklo bitui), todl i viso reikia deimties bait. 5. Trumpas realus 8 bitai s 31 enklo bitas Kiekvien skaii z galima ireikti tokia forma: z = (-1)s 2eil 0, mantis , arba : z = (-1)s 2eil 1, mantis ; s abiejose formose yra enklo bito reikm. Dauguma kit procesori naudoja pirmj form, kurioje naudojama 0, mantis , taiau Intel procesoriai naudoja antrj form: 1, mantis . Eils diapazonas yra -127 127 (reikm -128 naudojama specialioms reikmms). Charakteristika yra pastumta eil: charakteristika = eil + 7Fh , (7Fh = 12710). 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 utenka juos perirti i kairs dein, ir taip efektyviai suinoti, kurio charakteristika yra didesn. Jeigu vieno skaiiaus charakteristika yra didesn, tai jis akivaizdiai yra didesnis; jeigu charakteristikos lygios, tai tikrinami i kairs dein mantiss bitai. Eil, tuo tarpu, yra skaiius su enklu, ir lyginimas, naudojant j, bt maiau 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: (-1)s 2 char - 127 1, mantis Skaiius 0 yra iimtinis atvejis. Nulinis skaiius yra: 0 0
31

charakteristika 23 4 baitai

mantis 0

00000
23
-127

000
0

Taiau pagal trumpo realaus format tai yra (-1)0 2 -127 1,0 = 2 maiausias io formato skaiius yra (-1)0 2 -127 1,00..01 .
23 skaitmenys

. Todl

101

KOMPIUTERI ARCHITEKTRA Taigi maiausias galimas formato skaiius yra: 6. Ilgas realus. 11 bit s 63 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 = 102310) 7. Vidinis realus 15 bit s 79 enklo bitas Laikinas realus formatas yra skirtas saugoti reikmms, kurioms reikia dar didesnio tikslumo, negu gali utikrinti 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 reikms nra normalizuotos, t.y., yra denoramlizuotos, todl jos negali bti saugomos atmintyje, o tik koprocesoriaus registruose. Charakteristika yra eil, perstumta per 3FFFh = 1638310, t.y., eil = charakteristika 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 maesni adres dalyje yra maesns bit reikms. enklo bitas visada yra operando lauke su vyriausio baito adresu. charakteristika I mantis charakteristika 52 8 baitai mantis 0 0 0
31

00000
23

001
0

64 63 10 bait

102

KOMPIUTERI ARCHITEKTRA Sveiko odio formatas yra identikas mikroprocesoriaus formatui: odiniam formatui su enklu, ir yra apibriamas programoje operatoriumi DW (Define Word). Tokio formato diapazonas yra -32768 32767. Sveik trump format apibria operatorius DD (Define Double Word). Jo reikms yra keturi bait lauke, diapazone: -231 231-1 . DD pagalba galima apibrti por: segmentas : poslinkis . Jeigu operandas yra adresas, tai pagal operatori DD asembleris sukuria por segmentas : poslinkis. Jeigu operandas yra reikm, tai operandas yra trumpo sveiko formatas. Skaii sveiko ilgo (keturgubas odis) formato apibrimui naudojamas operatorius DQ (Define Quadruple). Tokio formato skaii diapazonas yra -263 263-1. Operatorius DQ gali apibrti konstant . Operatoriais DB (Define Byte), DW (Define Word), DD (Define Double word), DQ (Define Quadruple) galima rezervuoti atitinkamo dydio laukus, asembleriu po j nurodius ?. Panaudojus dar ir operatori DUP (DUPlicate), laukai yra dublikuojami. Skaii supakuotas deimtainis iplstinis formatas yra analogikas mikroprocesoriaus supakuotam deimtainiui formatui, tik veiksmai i karto atliekami su atuoniolika skaitmen devyniuose baituose, o deimtas baitas skirtas enklo bitui. Deimtainio formato laukas apibriamas operatoriumi DT (Define Ten), toks laukas uima 10 bait. Operuojant supakuotom deimtainm reikmm asembleriu, reikia jas nurodyti eioliktaine sistema. Jeigu operatoriaus DT operando lauke bus paraytas deimtainis skaiius, tai jis bus paverstas dvejetainiu skaiiumi, o ne supakuotu deimtainiu skaiiumi. Kadangi teigiami deimtainiai supakuoti skaiiai vizualiai nesiskiria nuo eioliktaini, pakanka po tokio skaiiaus prirayti h .Uraant neigiam deimtainio supakuoto formato skaii, prie j reikia parayti 80 ir irti, kad bendras skaitmen skaiius bt dvideimt, o gale turi bti h. Pavyzdiui, -1234 yra uraomas taip: DT 80 000 00000 00000 01234

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 atuoni bitai yra skiriami eilei. Eils diapazonas bt -128 127, taiau eils reikm -128 yra rezervuota neapibrtai reikmei fiksuoti ir todl yra negalima. Todl realiai eils diapazonas yra -128 127. Eil yra saugoma padidinta per 127, ir tada yra vadinama charakteristika. Charakteristika nra skaiius papildomu kodu, kur didesnis diapazonas reikia neigiam skaii kodavim

103

KOMPIUTERI ARCHITEKTRA Pavyzdiui: Eil -127 -1 0 1 127 Charakteristika 0 07Eh 7Fh 080h 0FEh

Btent toks eils saugojimas yra susijs su efektyvesniu skaii lyginimu: didesnis skaiius turi didesn charakteristikos lauko reikm. Jeigu charakteristikos yra lygios, tai skaiiai palyginami pagal mantis. Bet kokiu atveju, skaii lyginimas pabiiui i kairs dein, pradjus nuo vyriausio bito, leidia nustatyti, kuris skaiius yra didesnis. Dvideimt trijuose mantiss bituose didiausia reikm, kuri galima saugoti yra: 111...111 < 223 = 8 M 8 000 000 || 23 10000..00 23 Todl dvideimt trijuose mantiss bituose galima saugoti skaii, tikslumu ei septyni deimtaini skaitmen (visus eiaenklius skaiius ir dal septyniaenkli) . Skaii diapazonas yra slygojamas charakteristikos ir yra 10-38 1038 . Pats vyriausias bitas nurodo skaiiaus enkl, o kitas, po jo esantis bitas, nurodo eils enkl. Dvigubo tikslumo realaus skaiiaus formatas i atuoni bait mantisei skiria 52 bitus. Tai atitinka penkiolikos eiolikos deimtaini skaitmen tikslum. Vienuolikos bit eils laukas slygoja eils diapazon: 2-1023 - 21023 . Deimtainje formoje tai atitinka diapazon: 10-307 10307 . 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 ei duomen formatai (sveikas odis, sveikas trumpas, sveikas ilgas, supakuotas deimtainis iplstas, trumpas realus, ilgas realus) yra ioriniai koprocesoriaus atvilgiu, t.y., simindamas duomenis atmintyje, koprocesorius juos simena vienu i t ei format, taip pat ir skaityti i atminties gali vienu i i ei format. Paiame procesoriuje vis ei format duomenys saugomi koprocesoriaus vidiniu formatu. Taigi pirmi ei formatai naudojami tik duomen saugojimui, bet ne operavimui jais koprocesoriuje.

104

KOMPIUTERI ARCHITEKTRA Vidinis realus duomen formatas turi didiausi tikslum (mantis) ir didiausi diapazon (eil). Jis fiksuojamas deimtyje bait. eiasdeimt keturi bit mantis slygoja galim devyniolikos deimtaini 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 diapazon: 2-16383 - 216383 , t.y., 10-4932 104932 . Kadangi reikm vidiniu formatu gali bti denormalizuota, tai kairioji diapazono riba gali pasislinkti kair per 264 , taiau tikslumo mantisje sskaita. Asembleriu galima apibrti keturi, atuoni ir deimties 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 0

2. Trumpas sveikas. 7
+0 +1 +2 +3

s 31 24

3. Ilgas sveikas. 7
+0 +1 +2 +3 +4 +5 +6 +7

s 63 56 +4 d9 d8 +5 d11 d10 +6 d13 d12 +7 d15 d14 +8 d17 d16 +9 s x

4. Supakuotas deimtainis. +0 +1 +2 +3 d3 d5 d7 d1 d0 d2 d4 d6

105

KOMPIUTERI ARCHITEKTRA

5. Trumpas realus. 7
+0 +1

0 mantis
23 22

eil

+2 +3

s 31 24 charakteristika

6. Ilgas realus. +0 7 +1 15 +2 23 +3 31 +4 39 +5 47 +6 55 51 0 8 16 24 32 40 48 56 +7 s 62

mantis 6. Vidinis realus. charakteristika +0 7 +1 15 +2 23 +3 31 +4 39 +5 47 +6 55 +7 63 I 62 56 +8 71 +9 s 78 64 72

16

24

32

40

48

mantis

106

KOMPIUTERI ARCHITEKTRA

6.3.
79
enklas

Koprocesoriaus architektra
78
Eil

64 63
Mantis

0 0 1

Duomen stekas 15 Valdantysis registras Bsenos registras Komandos skaitliukas Duomen skaitliukas 19 0 0

Poymis

Koprocesorius turi keturis specialius registrus ir atuoni registr stek aritmetiniams duomenims saugoti. Steko elementas turi 80 bit ir atitinka vidin koprocesoriaus format. Duomenys, esantys bet kuriame i ei iorini format, yra atvaizduojami vidiniu formatu. Steke registrai neturi nuosav, fiksuot numeri. Jie yra numeruoti steko virns atvilgiu, kuri, dirbant su steku, kinta. Raoma visada steko virn. Prie raant, steko virn yra padidinama. Istumiant i steko, steko rodykl yra sumainama. Pastebjimas. Sveikojo formato duomenys yra atvaizduojami real vidin format. Poymi registras fiksuoja, kurie i steko element yra laisvi, kurie yra uimti, o bandant patalpinti duomenis uimt steko element, fiksuojama ypatinga situacija nepriimtina komanda. Koprocesoriuje yra skaitymo ir raymo komandos. Duomenys yra patalpinami steko virn registr, skaitant i atminties registr, ir i steko virns uraomi 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 virn. atmint rezultatas gali bti uraomas atskira raymo komanda.

Valdantysis odis Valdantysis registras dar yra vadinamas valdaniuoju odiu. Koprocesorius turi du 16 bit registrus: valdantj ir bsenos. Valdantysis registras reikalingas valdaniojo odio saugojimui, bsenos registras bsenos odio saugojimui. Valdantysis registras leidia programuotojui nustatyti koprocesoriaus darbo reimus. Sutrumpinimuose raid M reikia Mask maskavim. Jeigu atitinkamas maskavimo bitas yra 0, tai pertraukimai leidiami, o jei maskavimo bitas yra 1, tai pertraukimai yra draudiami. IM DM ZM OM UM PM IEM PC RC IC
Illegal Mask nepriimtinos operacijos maskavimas Denormalization Mask operando denormalizacijos maskavimas Zero Mask dalybos i nulio maskavimas Overflow Mask perpildymo maskavimas Underflow Mask reikmingumo inykimo (eils praradimo) maskavimas Precision Mask tikslumo maskavimas nenaudojama Interrupt Enable Mask pertraukim maskavimas Precision Control tikslumo valdymas Round Control apvalinimo valdymas Infinity Control begalybs valdymas

1 2 3 4 5 6 7 8 9 v 10
11 12 13 14 15

nenaudojama

PC tikslumo valdymas: 00 01 10 11

24 bitai rezervuota 53 bitai 64 bitai

108

KOMPIUTERI ARCHITEKTRA RC apvalinimo valdymas: 00 01 10 11

iki artimiausio lyginio apvalinimas emyn apvalinimas auktyn nukirtimas link nulio

IC begalybs valdymas: 0 1

projektyvin afinin

Koprocesorius gali fiksuoti ypatingas situacijas ir pagal jas generuoti pertraukim. Valdaniuoju odiu programuotojas gali valdyti, kokias situacijas apdoroti aparatriniu pertraukimu nuo procesoriaus 8087 ir kokias situacijas analizuoti programikai, 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 reikm -128 yra rezervuota kitoms reikmms, ir yra vadinama NAN Not A Number neapibrta reikm. Apvalinimo valdymas (Round Control) naudojamas reikms perrinkimui, kai nepakanka tokio tikslumo, kok leidia naudojamas formatas. Galimi pasirinkimai yra: 1. Kitas didesnis. 2. Kitas maesnis. 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 reime su anksiau sudarytomis procedromis mainoms su maesniu 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 reikmms fiksuoti + ir - . Pagal nutyjim yra projektyvin begalyb, kai + ir - nesiskiria. Afinin begalyb yra, kai + ir - skiriasi.

109

KOMPIUTERI ARCHITEKTRA

Bsenos odis Bsenos registras yra dar vadinamas bsenos odiu. Bsenos odis saugo einamj koprocesoriaus bsen. 0 1 2 3 4 5 6 7 8 9 v 10
11 12 13 14 15

IE DE ZE OE UE PE IR C0 C1 C2 ST C3 B

Illegal Exeption neegzistuojanti komanda Denormalization Exeption denormalizuotas operandas Zero Exeption dalyba i nulio Overflow Exeption perpildymas Underflow Exeption reikmingumo inykimas (eils praradimas) Precision Exeption tikslumas nenaudojama Interrupt Request pertraukim reikalavimas

Slygos kodai

STack steko rodykl

Slygos kodas uimtas

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 prieast. Bsenos odyje yra bitas B, kuris parodo, ar koprocesorius yra uimtas ar laisvas, t.y., jis vykdo komand ar ne. Bito B reikm yra lygi iorinio signalo TEST reikmei, 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. Daniausiai naudojama bsenos odio dalis yra slygos kodas. Slygos kodo keturis bitus galima nustatyti koprocesoriaus komandos. Du i i bit tiesiogiai atitinka mikroprocesoriaus poymi registro SF poymius CF ir ZF. Tie poymiai yra idstyti tose paiose pozicijose bituose, kaip ir registro SF jaunesniojo baito poymiai CF ir ZF, t.y.:

110

KOMPIUTERI ARCHITEKTRA CF (nulinis bitas) ZF (etas bitas) C0 C3

Tokio idstymo patogumas yra tas, kad uraius bsenos od atmint, o vliau patalpinus vyresnj bait registr AH, i kurio komandos SAHF pagalba galima suformuoti registro SF jaunesnj bait su poymiais ZF ir CF, pagal koprocesoriaus komandos vykdymo rezultat. Kadangi koprocesoriuje skaiiai yra reals su enklu, tai i dviej poymi pakanka bet kuri dviej skaii palyginimui. Kiti du slygos kodo bitai yra naudojami specialia koprocesoriaus komanda, kuri tikrina specialias ypatingas skaitmenines reikmes, kurias ino koprocesorius. Kadangi tokios specialios reikms yra ypatingai apdorojamos, tai slygos kodas leidia painti tokias specialias reikmes.

6.4.

Koprocesoriaus Intel 8087 komand sistema

Steko registr adresacija yra atliekama santykinai steko virns atvilgiu. Asembleriu steko virn yra nurodoma ST(0) arba ST. Kiti elementai, tolstant nuo virns, yra ST(1), ST(2), ..., ST(7). Pavyzdiui, FADD ST(0), ST(3) :

ST(0) ST(1) ST(2) ST(3) ST(4) ST(5)

A B C D E 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 persiunrimo komandos

i grup sudaro trys pagrindins komandos. Pakrovimo komanda patalpina reikm steko virn. 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, deimtainio, slankaus. Asembleris atskiria operando lauko ilg: 4, 8, 10 bait, taiau neatskiria formato: sveikas ar realus, deimtainis ar vidinis. Duomen formatas Sveikas odis Sveikas trumpas Sveikas ilgas Deimtainis supakuotas Trumpas realus Ilgas realus Vidinis realus Lauko ilgis 16 bit 32 bitai 64 bitai 80 bit 32 bitai 64 bitai 80 bit Pakrovimo komanda FILD

FBLD FLD

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 vartotojikos steko perpildymo apdorojimo programos, tai standartin programa patalpinam reikm payms kaip neapibrt ir, toliau naudojant toki reikm, rezultato neapibrtumas 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 virn, kartu padidinant steko rodykl: FLD ST(0) dubliuojama steko virn; FLD ST(3) treiasis steko elementas kopijuojamas steko virn, 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 uimti 2, 3, arba 4 baitus, priklausomai nuo lauko mod reikms. Pakrovimo komand variantai: 1. sveikas/slankus ST(0) (i atminties ST(0) ) ESC MF 1 mod 000 r/m [j.b. v.b.] 112

KOMPIUTERI ARCHITEKTRA Pastaba. ESC = 11011 MF = 00, 01, 10, 11, 32-j bit slankus trumpas realus 32-j bit sveikas trumpas sveikas 64-i bit slankus ilgas realus 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. deimtainis supakuotas ST(0) ESC 111 mod 100 r/m [j.b. v.b.] 5. ST(i) ST(0) ESC 001 11 000 ST(i) Uraymo komandos turi du variantus. Pirmasis komandos variantas urao atmint, nekeiiant steko, o antrasis komandos variantas urao atmint, kartu istumiant i steko. Pastarasis variantas yra platesnis, tuo tarpu pirmajame dalyvauja ne visi formatai, o keturi, kuriuos galima nurodyti bitais MF: Duomen formatas Sveikas odis Sveikas trumpas Trumpas realus Ilgas realus Uraymo 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) Lauko ilgis 16 bit 32 bitai 32 bitai 64 bitai Uraymo komanda FIST FST

113

KOMPIUTERI ARCHITEKTRA Antrasis komandos variantas su istmimu i steko: FSTP, FISTP, FBSTP. Duomen formatas Sveikas odis Sveikas trumpas Sveikas ilgas Deimtainis supakuotas Trumpas realus Ilgas realus Vidinis realus Lauko ilgis 16 bit 32 bitai 64 bitai 80 bit 32 bitai 64 bitai 80 bit Uraymo komanda FISTP

FBSTP FSTP

Pastaba. Tiktai pakrovimo ir uraymo (siminimo) komandos palaiko visus duomen formatus. Kitos komandos apsiriboja keturiais formatais, kuriuos galima nurodyti bitais MF: 00, 32-j bit trumpas slankus 01, 32-j bit trumpas sveikas 10, 64-i bit ilgas slankus 11, 16-os bit sveikas odis Uraymo komandos su istmimu i steko formatai: MF = 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) deimtainis ( 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 virn su steko registru: ST(0) ST(i) ESC 001 11 001 ST(i) Kitos duomen persiuntimo komandos naudojamos nusiuniant jas ST(0), suprantama, vidiniu formatu. Komandos mnemonika FLDZ Reikm 0 Komandos formatas
ESC001 1110 1110

konstant

formavimui,

eioliktainis kodas D9 EE

114

KOMPIUTERI ARCHITEKTRA FLD1 FLDPI FLDL2T FLDL2E FLDLG2 FLDLN2 1 Log210 Log2 e Log10 2 Loge 2
ESC001 1110 1000 ESC001 1110 1011 ESC001 1110 1001 ESC001 1110 1010 ESC001 1110 1100 ESC001 1110 1101

D9 E8 D9 EB D9 E9 D9 EA D9 EC D9 ED

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

14 bait

94 baitai

FINIT INITiate inicializuoti koprocesori (registr ivalymas) FENI ENable Interrupts leisti pertraukimus ~ STI FDISI DISable Interrupts udrausti 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 FSTENV STore ENVironment siminti koprocesoriaus darbin aplink atmintyje FLDENV LoaD ENVironment pakrauti koprocesoriaus darbin aplink i atminties FSAVE siminti koprocesoriaus bsen atmintyje FRSTOR ReSTORe pakrauti koprocesoriaus bsen i atminties FINCSTP INCrement Stack Pointer padidinti steko rodykl FDECSTP DECrement Stack Pointer sumainti steko rodykl FFREE atlaisvinti steko registr FNOP No OPeration nieko nedaryti FWAIT analogika komandai WAIT

Koprocesoriaus darbin aplink sudaro visi procesoriaus 8087 registrai, iskyrus steko registrus. Aplinka susideda i 14 bait. Darbo aplink atmint galima urayti taip: 15
Valdantysis odis Bsenos odis Steko poymi odis

0 +0 +2 +4 +6 +8 xxx + 10 + 11

Komandos rodykl

IP 15 0 IP 19 -16 0 Operacijos kodas

4 bitai Operando rodykl


OP 19 16

yyy

ESC
OP 15 0

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 uima 94 baitus atmintyje. Steko registrai yra simenami po aplinkos, pradedant ST(0), simenami visi ir lik registrai: ST(1), , ST(7).

116

KOMPIUTERI ARCHITEKTRA Steko rodykl ir steko registr poymiai kinta skirtingai. Komandos FINCSTP ir FDECSTP keiia steko rodykl, bet nekeiia steko registr poymi. Duomen buvim steke rodo steko registr poymiai. Komanda FFREE atlaisvina steko registr nurodant steko registr poymyje, kad tas registras yra laisvas. Taiau FFREE nekeiia steko rodykls. Aritmetins komandos veikia pagal steko princip.

Komandos mnemonika FINIT FENI FDISI FLDCW FSTCW FSTSW FCLEX FSTENV FLDENV FSAVE FRSTOR FINCSTP FDECSTP FFPEE FNOP FWAIT

Komandos formatas ESC 011 1110 0011 ESC 011 1110 0000 ESC 011 1110 0001 ESC 001 mod 101 r/m [poslinkis] ESC 001 mod 111 r/m [poslinkis] ESC 101 mod 111 r/m [poslinkis] ESC 011 1110 0010 ESC 001 mod 110 r/m [poslinkis] ESC 001 mod 100 r/m [poslinkis] ESC 101 mod 110 r/m [poslinkis] ESC 101 mod 100 r/m [poslinkis] ESC 001 1111 0111 ESC 001 1111 0110 ESC 101 11 000 ST(i) ESC 001 1101 0000 1001 1011

eioliktainis kodas DB E3 DB E0 DB E1 D9 xx D9 xx D9 xx DB E2 D9 xx D9 xx DD xx DD xx D9 F7 D9 F6 DD Cx D9 D0 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. Aukiau 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) FADD ST(0), ST(i) FADD ST(i), ST(0) ST(0) ST(0) ST(i) ST(0) + 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 virn ST(0) istumiama. Todl ji negali bti rezultato registru. Jeigu ST(i) yra ST(1), tai turime klasikin stekin operacij (imami du virutiniai steko elementai, sudedami, istumiami i steko, o gautas rezultatas uraomas steko virnje). 3. FADD real ST(0) ST(0) + real mem 118

KOMPIUTERI ARCHITEKTRA real tai trumpas arba ilgas realus skaiius. real mem reikia, 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 deimtainio ir vidinio relaus formato. Prie atliekant veiksmus su jais, reikt i format duomenis nusisti koprocesoriaus stek. Duomen formatas Sveikas odis Sveikas trumpas Trumpas realus Ilgas realus Lauko ilgis 16 bit 32 bitai 32 bitai 64 bitai Sudties komanda FIADD FADD

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= P= 0, 1, 0, 1, rezultatas yra ST(0) rezultatas yra ST(i) virutinio steko elemento po operacijos nereikia atlaisvinti virutinis steko elementas po operacijos atlaisvinamas

Atimties komandos variantai: 1. FSUB 2. FSUBP su istmimu i steko. 3. FSUBR operandai atvirkia tvarka. 4. FISUB operandai sveiki atmintyje. 5. FISUBR operandai sveiki atmintyje, atvirkia tvarka, su istmimu i steko.

Duomen formatas Sveikas odis Sveikas trumpas Trumpas realus Ilgas realus

Lauko ilgis 16 bit 32 bitai 32 bitai 64 bitai

Atimties komanda FISUB, FISUBR FSUB, FSUBR

119

KOMPIUTERI ARCHITEKTRA

Atimties komandos formatai: 1. ST(0) operandas1 - operandas2 ESC MF 0 mod 10 R r/m [poslinkis] R= 2. 0, 1, rezultatas operacija altinis altinis operacija rezultatas

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

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

Duomen formatas Sveikas odis Sveikas trumpas Trumpas realus Ilgas realus

Lauko ilgis 16 bit 32 bitai 32 bitai 64 bitai

Daugybos komanda FIMUL FMUL

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 Sveikas odis Sveikas trumpas

Lauko ilgis 16 bit 32 bitai

Dalybos komanda FIDIV, FIDIVR

120

KOMPIUTERI ARCHITEKTRA Trumpas realus Ilgas realus 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) 32 bitai 64 bitai FDIV, FDIVR

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 poymiai: C3 ir C0. Palyginime dalyvauja steko virn arba steko registras. C3 0 0 C0 0 1 Santykis ST(0) > altinis ST(0) < altinis

121

KOMPIUTERI ARCHITEKTRA 1 1 0 1 ST(0) = altinis ST(0) nepalyginamas su altiniu

Po tokio palyginimo bsenos od reikia siminti atmintyje, vyresnij dal nusisti registr AH ir, panaudojant komand SAHF, registro AH reikm nusisti registr SF. Skaiiai yra nepalyginami, kai bent vienas i j yra NAN (Not A Number) arba viena i begalybs reikmi.

Duomen formatas Sveikas odis Sveikas trumpas Trumpas realus Ilgas realus Palyginimo komandos formatai:

Lauko ilgis 16 bit 32 bitai 32 bitai 64 bitai

Palyginimo komanda FICOM, FICOMP FCOM, FCOMP

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 paalinimas 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 paalinimas i steko du kartus: 1. ESC 110 1101 1001 IV. Komanda FTST ST(0) ir 0 palyginimas: 1. ESC 001 1110 0100 Palyginimo komand pavyzdiai: 1.
CODE SEGMENT ASSUME CS : CODE, DS : CODE WORD_INTEGER LABEL WORD SHORT_INTEGER LABEL DWORD SHORT_REAL LABEL DWORD

122

KOMPIUTERI ARCHITEKTRA
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.
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 CODE

Palyginimo komandos formuoja bsenos odio bitus (ypatingas situacijas). Jeigu ie bitai yra nesvarbs, reikt ivykdyti komand FCLEX ivalyti poymius. Yra ir speciali palyginimo komanda FXAM, kuri pagal steko virnje esani reikm suformuoja keturis slygos poymius (C0, C1, C2, C3) ir parodo, kokio tipo skaiius yra steko virnje: C3 0 0 0 0 0 0 0 0 1 C2 0 0 0 0 1 1 1 1 0 C1 0 0 1 1 0 0 1 1 0 C0 0 1 0 1 0 1 0 1 0 ST(0)
+ nenormalozuotas + NAN - nenormalizuotas - NAN + normalizuotas + begalyb - nenormalizuotas - begalyb +0

123

KOMPIUTERI ARCHITEKTRA 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1
tuia -0 tuia + denormalizuota tuia - denormalizuota tuia

Paprastai komandos FXAM nereikia naudoti, ji reikalinga, kai dirbama ant tikslumo ribos. Begalyb reikkia, kad eil yra per didel. Nenormalizuotas (denormalizuotas) skaiius yra tada, kai eil yra per maa tam, kad ji bt urayta korektikai, ir todl rezultatas uraomas denormalizuotai, mantiss sskaita. FXAM: ESC 001 1110 0101 Paprastos funkcijos FSQRT kvadratin aknis i ST(0) ESC 001 1111 1010 FSCALE ST(0) matabavimas pagal ST(1) ESC 001 1111 1101 Komanda atlieka klim laipsniu: ST(0) 2 ST(1) FPREM liekana ST(0) / ST(1) ESC 001 1111 1000 Komanda atlieka veiksm: ST(0)

ST(0) mod ST(1)

FRNDINT ST(0) ilyginimas iki sveiko (apvalinimo taisykl pagal sveik od) ESC 001 1111 1100 FXTRACT trupmenin dalis nuo ST(0) uraoma nauj steko virn ESC 001 1111 0100 Komanda atlieka charakteristikos ir mantiss iskyrim. FABS ST(1) tai skaiiaus absoliuti reikm buvusios ST(0) dvejeto laipsniu ESC 001 1110 0001 FCHS enklo keitimas ESC 001 1110 0000 Trigonometrins funkcijos

124

KOMPIUTERI ARCHITEKTRA FPTAN argumentas ST(0) skaiius radianais: 0 < < / 4 Rezultatas y / x = tg y uima steko virn, o paskui x uraomas nauj steko virn. ESC 001 1111 0010 FPATAN ST(0) arctan y/x = arctan ST(1) / ST(0) ST(0) = x istumiamas i steko , o FPATAN uraomas vietoje y. ESC 001 1111 0011 Transcendentins funkcijos F2XM1 = 2 ST(0) 1 ESC 001 1111 0000 FYL2X = ST(1) log 2 [ST(0)] ESC 001 1111 0001 FYL2XP1 = ST(1) log 2 [ST(0) + 1] 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

You might also like