PROGRAMAVIMO PAGRINDAI

PROGRAMAVIMO PAGRINDAI

Kompiuterinės matematikos pradžių pradžia ir pagrindų pagrindas – du skaičiai: nulis ir vienetas

1. Dvejetainė logika
1.1. Skaičiavimo sistemos

Skaičiavimo sistema yra visuma būdų ir priemonių, leidžianti užrašyti ar kitaip pateikti skaičius. Skaitmens reikšmė priklauso nuo užimamos vietos (pozicijos) skaičiuje.
Skaičiavimo sistemos pagrindu laikomas skaičius, kuris parodo kiek kartų padidėja arba sumažėja vieno ir to paties skaitmens reikšmė, kai jis perkeliamas į vieną iš šalia esančių pozicijų. Bet kokį skaičių galima pateikti formule:

čia: Nq – pateikiamasis skaičius;

q – skaičiavimo sistemos pagrindas;

n+1 – skaitmenų kiekis skaičiuje, nes mažiausioji dešinė skaičiaus skiltis žyymima ne vienetu, o nuliu.
Jeigu skaičius trupmeninis, tai jo išraiškoje:

trumpesnė dalis žymima neigiamais n. Kiekvieno skaitmens reikšmė trupmeninėje dalyje q kartų mažesnė už prieš jį einantį tokį pat skaitmenį :

Šiuo metu kompiuterijoje neįmanoma apsieiti be trijų skaičiavimo sistemų: dešimtainės (q = 10), dvejetainės (q = 2) ir šešioliktainės (q = 16).
Dešimtainė skaičiavimo sistema naudojama, kaip visuotinai priimta ir pripažinta sistema, turinti dešimt skirtingų simbolių skaitmenims pažymėti.
Dvejetainė skaičiavimo sistema teturi tik du simbolius. Tai 0 ir 1. Ji yra elektroninių schemų pagrindas, nes tik tokia sistema leidžia skkaitinėmis reikšmėmis nustatyti elektroninių schemų būvį. Elektros krūvio buvimas tam tikruose schemos taškuose gali būti laikomas vienetu, o nebuvimas – nuliu (arba atvirkščiai).
Kad žmogui būtų suprantami kompiuterio apdorojimui pateikiami skaičiai bei apdorojimo rezultatai, ir kad kompiuteris galėtų atlikti tokį apdorojimą, būtina sk

kaičius iš dešimtainės skaičiavimo sistemos galėti pervesti į dvejetainę ir atvirkščiai, iš dvejetainės į dešimtainę skaičiavimo sistemą. Toks skaičių pervedimas nėra paprastas ir patogus, todėl naudojama tarpinė šešioliktainė skaičiavimo sistema, o šešioliktainiai simboliai gali būti tiesiogiai perkeliami į dvejetainę skaičiavimo sistemą.
q16 q2 q10
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
A 1010 10
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15

Tiesioginis šešioliktainio skaičiaus pervedimas į dvejetainį skaičių reiškia, kad šešioliktainio skaičiaus, pavyzdžiui, 1F3 kiekvienas skaitmuo bus išreiškiamas atitinkama dvejetainio skaičiaus tetrada (keturių dvejetainių skaitmenų grupė):

arba 1F316 = 0001111100112 = 1111100112.

Dešimtainis skaičius 6783 pertvarkomas į šešioliktainį paprastos dalybos ir atimties veiksmais:

6783 : 16 = 423 ir liekana 15 = F

423 : 16 = 26 ir liekana 7

26 : 16 = 1 ir liekana 10 = A.

Tai reiškia, kad

678310 = 1A7F16 = 11010011111112 .

Ir atvirkščiai – šešioliktainis skaičius 1A7F pertvarkomas į dešimtainį taip pat paprasta daugybos ir sudėties seka:

1 x 16 = 16,

16 + A = 26,

26 x 16 = 416,

416 + 7 = 423,
423 x 16 = 6768,
6768 + F = 6783 10.

Aštuntainė skaičiavimo sistema yra analogiška šešioliktainei ir taip pat gali tarnauti tiesioginiam skaičių pertvarkymui iš dešimtainės į dvejetainę bei iš dvejetainės į dešimtainę skaičiavimo siistemas. Aštuntainės sistemos skaitmenys pervedami į dvejetainę sistemą triadomis (grupėmis po tris dvejetainius skaitmenis) :

q8 0 1 2 3 4 5 6 7 10 11
q2 000 001 010 011 100 101 110 111 001000 001001
q10 0 1 2 3 4 5 6 7 8 9

Tegu duotas aštuntainis skaičius 763, tai dvejetainis skaičius bus:

,

tai 7638 = 1111100112.

Nesunku pastebėti, kad 1F316 ir 7638 yra toks pat dvejetainis skaičius 1111100112, tad 1F316 = 7638 .
Pervedus 1F316 ir 7638 į dešimtainę skaičiavimo sistemą gaunama:

1 x 16 = 16 7 x 8 = 56

16 + F = 31 56+ 6 = 62
31 x 16 = 496 62 x 8 = 496

496+ 3 = 49910 496+ 3 =49910

Nežiūrint į tai, kokioje skaičiavimo sistemoje pateiktas skaičius, jo didumas lieka toks pat:

49910 = 1F316 = 7638 = 1111100112 .

Trupmenos iš dešimtainės į dvejetainę sistemą pervedamos kiek kitaip nei sveikieji skaičiai .
Tegu duota trupmena 0.25710:

.257  16 = 4.112 = 4+ .112,
.112  16 = 1.792 = 1 + .792,
.792  16 = 12.672 = C + .672,
.672  16 = 10.752 = A + .752,
.752  16 = 12.032 = C + .032,
——————————————-
.25710 = .41CAC.16 = .100 0001 1100 1010 11002.

Gautą šešioliktainę trupmeną .41CAC16 pervesime vėl į

dešimtainę trupmeną:

12 : 16 = .75,

10 + .75 = 10.75;
10.75 : 16 = .671875,

12+.671875 = 12.671875,
12.671875 : 16 = .791992188

1+.791992188 = 1.791992188,
1.791992188 : 16 = .111999512,

4+.111999512 = 4.111999512,
4.111999512 : 16 = .25699997  .25710 .

Pervedant dešimtaines trupmenas į šešioliktaines, pervedimas gali būti labai ilgas (kol trupmeninė dali bus lygi nuliui) todėl dažniausiai tenka pervedimą užbaigti, kai pasiekiamas norimas tikslumas.
Pervedant šešioliktaines trupmenas į dešimtaines, dažniausiai tenka apvalinti trupmenas, nes pervedimas gali tęstis neribotai.
Pervedant iš vienos skaičiavimo sistemos į kitą skaičius, kuriuos sudaro sveikoji ir trupmeninė dalys, ir sveikoji ir trupmeninė dalis pervedamos atskirai.
Skaičių pervedimas tesudaro tik nedidelę viso manipuliavimo skaitmeniniais duomenimis dalį.
Svarbiausias vaidmuo tenka dvejetainei aritmetikai ir Bulio algebrai.

1.2. Dvejetainė aritmetika
Dvejetainės aritmetikos pagrindas – tai sudėties, atimties ir daugybos veiksmai parodyti lentelėje:

Sudėtis Atimtis Daugyba
0 + 0 = 0 0 – 0 = 0 0  0 = 0
1 + 0 = 1 1 – 0 = 1 1  0 = 0
0 + 1 = 1 1 – 1 = 0 0  1 = 0
1 + 1 = 10 10 – 1 = 1 1  1 = 1

Sudedant skaičius vieneto pernešimas vyksta į didesniąją (į kairę) tada, kai sudedama 1+1=10.

(1011 + 1010= 10101)2 , (B + A = 15)16 , (11 + 10 = 21)10 .

Neturėtų kelti abejonių B + A = 15, nes

q16 . A B C D E F 10 11 12 13 14 15 .
q10 . 10 11 12 13 14 15 16 17 18 19 20 21 .

Skaičius atimant, prireikus vyresniosios skilties vienetą pernešti į dešiniąją skiltį (pasiskolinti), pastarojoje skiltyje atsiranda du vienetai (t.y. 10), o tarpinėse nulinėse skiltyse – po vieną vienetą, nes kitas vienetas “keliauja” iki mažiausiosios skilties į kurią skolinamasi. Todėl pastarojoje skiltyje prieš atimant atsiranda du dvejetainiai vienetai.

(16 – 9 = D)16 , (10110 – 1001 = 1101)2 , (22 – 9 = 13)10 .

Dvejetainių skaičių daugybos ir dalybos veiksmai analogiški dešimtainių skaičių daugybos ir dalybos veiksmams.

1101
+ 101 (D x 5 = 41)16

1101

0000 (13 x 5 = 65)10

1101

1000001 6510 = 4116

1000110 111 (46 : 7 = A)16

111 1010

111 (70 : 7 = 10)10

111

0 1010 = A16 .

Po pirmojo atimties veiksmo iš penktos dalijamojo skilties nukeliamas vienetas, bet 11 nepakanka dalijimui iš 111. Todėl nulį įrašome į dalmens antrąją skiltį ir paimame dar vienetą iš dalijamojo šeštos skilties. Likusį nulį iš septintos dalijamojo skilties tiesiai pernešame į dalmenį, t.y. visi veiksmai yra analogiški dešimtainių skaičių da

alybos veiksmams.

1.3. Loginės operacijos
Iš 1.1. ir 1.2. poskyrių matyti, kad bet kuriam šešioliktainiui skaitmeniui užrašyti pakanka keturių dvejetainių skilčių arba tetrados. Bet tetradoje kitokių ženklų užrašyti neįmanoma, nes jų niekaip negalėtume atskirti nuo šešioliktainių skaitmenų. Todėl raidėms, matematiniams simboliams ir kitokiems ženklams užrašyti skiriama dar viena tetrada. Taigi skaičiams ir kitokiems simboliams užrašyti naudojami aštuonios dvejetainės skiltys, kurie vadinami bitais, o visa aštuonių bitų struktūra vadinama baitu. Baite gali tilpti bet kokios 0 ir 1 kombinacijos nuo 00000000 iki 11111111, t.y. nuo 0016 iki FF16 arba 1+255=25610 , nes FF16 = 25510 .
Akivaizdu, kad neskaitiniams simboliams apdoroti dvejetainė aritmetika netinka. Tam naudojamos loginės operacijos. Pagrindinės loginių operacijų kategorijos yra : tiesa, teisinga, kurios žymimos skaičiumi 1, ir netikra, netiesa, melas – skaičiumi 0.
Loginės operacijos vadinamos ARBA (loginė sudėtis, disjunkcija), IR (loginė daugyba, konjunkcija), IŠSKIRTINĖ ARBA (neekvivalentumas), NE (loginis neiginys, inversija).
Šiame poskyryje apsiribosime keturių loginių operacijų analize, nors tokių operacijų yra ir daugiau (NEIŠSKIRTINĖ ARBA, implikacija ir kt.).
Nors pabrėžėme, kad dvejetainiams simboliams vienareikšmiškai apibrėžti keturių dvejetainių ženklų struktūros (tetrados) per maža, loginių operacijų esmės analizei to pilnai pakanka.
Loginės operacijos žymimos simboliais:

ARBA – v, IR – , IŠSKIRTINĖ ARBA – , Ne –  .

Loginių operacijų esmė atskleidžiama lentelėje:

Loginių operacijų lentelė 1.1.

Operacijų pavadinimai: ARBA IR IŠSKIRTINĖ ARBA NE
Žymėjimai : v   
Operacijos :

0101
v 1001

1101 0101
 1100

0100 1010
 1100

0110
 0101

1010

Visoms loginėms operacijoms bendra yra tai, kad tarp savęs lyginami vienodai nuo skaičiaus pradžios atitolę bitai ir jų pa

alyginimo rezultatas visada arba 1 arba 0 ir niekada, kaip dvejetainėje aritmetikoje, jis nepereina į aukštesnę skiltį. Taigi loginės operacijos rezultatas gali būti tik tiesa (1) arba netiesa (0) ir joks kitoks būti negali.
Pažymėtini loginių operacijų tarpusavio skirtingumai.
Loginėje operacijoje ARBA, kitaip dar vadinamoje sudėtimi arba disjunkcija, bitų palyginimo rezultatas visais atvejais yra vienetas, išskyrus tuos atvejus, kai tarp savęs lyginami nuliai. Pastarojo palyginimo rezultatas – nulis.
Loginė operacija IR, kitaip dar vadinama logine daugyba arba konjunkcija, visais bitų palyginimo atvejais rezultatai yra nuliai, išskyrus tą atvejį, kai tarp savęs lyginami vienetai. Pastaruoju atveju rezultatas yra vienetas.
Loginėje operacijoje IŠSKIRTINĖ ARBA lyginami skirtingi bitai rezultatą turi vienetą, o vienodi – nulį. Kitaip ši operacija dar vadinama, kaip jau buvo minėta, neekvivalentumu.
Loginis neiginys NE operuoja su vienu dvejetainiu simboliu, jį paversdamas taip vadinamu atvirkščiu simboliu. Tai reiškia, kad rezultato analogiškose vietose vienetai yra pakeičiami nuliais, o nuliai vienetais.
Lentelėje 1.1 pateiktos operacijos naudoja keturženklius dvejetainius skaičius vizualinio aiškumo sumetimais. Praktikoje tokios operacijos gali būti atliekamos su bet kokio didumo dvejetainiais skaičiais ar simboliais, turinčiais vienodą arba skirtingą bitų kiekį.
Loginių operacijų esmę sudaro tai, kad jos įgalina sužinoti apie dvejetaines struktūras ir prireikus jas tinkamai pakeisti. Tai ypač svarbu, nes kompiuterio atmintyje esančių dvejetainių struktūrų tiesiogiai vizualiai matyti neįmanoma. Tai atliekama operacijai pateikiant taip vadinamą šabloną, t.y. iš anksto žinomą dvejetainę struktūrą.
Toliau pateiksime loginių operacijų panaudojimo pavyzdžių. Tegu viename baite užrašoma tam tikrų procesų valdymo informacija. Tai reiškia, kad įjungus, t.y. įrašius į tam tikras baito skiltis vienetus procese tas bitas dalyvauja, o jeigu bitas nulinis, tai ta skiltis konkrečiame procese nedalyvauja. Taigi, kaip buvo anksčiau minėta, baitas gali turėti iš viso 256 įvairias procesų valdymo perjungėjų padėtis nuo padėties HEX ’00’ iki padėties HEX ’FF’. Raidės HEX reiškia šešioliktainį skaičių (angliškai – hexadecimal). Apostrofuose nurodytas pats šešioliktainis skaičius. Visoms operacijoms naudojama ta pati duomenų pateikimo forma :

Baitas prieš operaciją HEX ‘00’ 0000 0000

?
Baitas – šablonas HEX ‘00’ 0000 0000

Baitas po operacijos HEX ‘00’ 0000 0000

Čia pateikiami šešioliktainiai skaičiai : baito turinys prieš operaciją, baitas – šablonas ir baito turinys po operacijos. Be to kiekvienas skaičius pateikiamas dvejetaine forma, kuri padeda vizualiai suvokti sprendžiamo uždavinio procesą. Baitas – šablonas tai duomenys parinkti taip, kad būtų galima išspręsti konkretų uždavinį, esant tam tikram pradiniam baito būviui ir naudojant loginę operaciją, kurios žymėjimo simbolis įrašomas vietoj simbolio “?”.

Operacijos ARBA.
1) Pakeiskite pirmojo bito turinį į vienetą (padėtį “Įjungta”) taip, kad kiti bitai nepasikeistų.

Baitas prieš operaciją HEX ‘0F ’ 0000 1111

v
Baitas – šablonas HEX ‘80’ 1000 0000

Baitas po operacijos HEX ‘8F ’ 1000 1111

2) Įjunkite du perjungėjus HEX ‘28’, nors prieš operaciją tebuvo įjungtas tik vienas iš jų HEX ‘20’.
Baitas prieš operaciją HEX ‘20’ 0010 0000

v
Baitas – šablonas HEX ‘08’ 0000 1000

Baitas po operacijos HEX ‘28 ’ 0010 1000

3) Nustatykite tik žemesniosios (dešinės) baito tetrados turinį.
Baitas prieš operaciją HEX ‘49 ’ 0100 1001

v
Baitas – šablonas HEX ‘F0’ 1111 0000

Baitas po operacijos HEX ‘F9 ’ 1111 1001

Operacijos IR.
1) Išjunkite perjungėjus HEX ‘26’.
Baitas prieš operaciją HEX ‘FF ’ 1111 1111


Baitas – šablonas HEX ‘D9 ’ 1101 1001

Baitas po operacijos HEX ‘D9 ’ 1101 1001

2) Išjunkite visus perjungėjus, kurie buvo įjunkti.
Baitas prieš operaciją HEX ‘92 ’ 1001 0010


Baitas – šablonas HEX ‘00 ‘ 0000 0000

Baitas po operacijos HEX ‘00 ’ 1111 1001

Operacijos IŠSKIRTNĖ ARBA

1) Tegu turime atliktą IŠSKIRTINĘ ARBA operaciją :
Baitas prieš operaciją HEX ‘7D ’ 0111 1101


Baitas – šablonas HEX ‘FF ‘ 1111 1111

Baitas po operacijos HEX ‘82 ’ 1000 0010

Šią operaciją su pateikiamu šablonu HEX ‘FF ’ galime naudoti, kai norime sužinoti, ar prieš operaciją baitas nebuvo nulinis : HEX ‘FF’. Taip pat šia operacija galima pakeisti pradinio baito turinį atvirkščiu t.y nuliniai bitai keičiami vienetais, o vienetiniai nuliniais.

2) Perjunkite aukštesniąją baito tetradą į atvirkštinį būvį, žemesniąją tetradą palikus nepakitusia.

Baitas prieš operaciją HEX ‘96 ’ 1001 0110


Baitas – šablonas HEX ‘F0 ‘ 1111 0000

Baitas po operacijos HEX ‘66 ’ 0110 0110

Loginių operacijų naudojimas duomenų paieškoje.
Tegu turime tam tikrą sąrašą asmenų, kurie charakterizuojami baito turiniu:

1 bitas Vyras / ne 1 / 0,
2 bitas Vedęs / ne 1 / 0,
3 bitas 25 metų / daugiau 1 / 0,
4 bitas Aukštasis mokslas / n e 1 / 0,
5 bitas Gimęs Lietuvoje / ne 1 / 0,
6 bitas Neturi savo namo / turi 0 / 1,
7 bitas Neturi vairuotojo teisių / turi 0 / 1,
8 bitas Lietuvis / ne 1 / 0.

Žinodami kiekvieno bito kiekviename sąrašo baite reikšmę, galime tinkamai parinkti baitą – šabloną, kad sužinotume kiek yra sąraše asmenų, turinčių reikalingas savybes. Jeigu baitą šabloną parinksime HEX ‘80’, tai logiškai daugindami (operacija IR – ) jį iš vieno sąrašo baito, rezultato baite gausime HEX ‘80’, tai reiškia, kad tame sąrašo baite buvo charakterizuojamas vyras. Jeigu sąrašo baite aprašoma moteris, tai rezultato baitas bus HEX ‘00’. Logiškai dauginant kiekvieną sąrašo baitą iš šablono ir po kiekvienos daugybos veiksmo rezultato baitą sudedant su dvejetainiu žodžiu a= HEX ’0000’, pabaigę veiksmus su sąrašu, žodyje a gausime skaičių, kuris parodo, kiek sąraše yra vyrų.
Panašiai elgdamiesi, visus sąrašo asmenis, pagal jų savybes, galime sugrupuoti į 256 sąrašus ir apskaičiuoti kiek asmenų yra kiekviename iš tų sąrašų.
Jeigu asmenų sąrašo baitas HEX ‘00’, tai reiškia, kad šiame baite charakterizuojama: moteris, nevedusi, daugiau, kaip 25 metų, neturinti aukštojo mokslo, gimusi ne Lietuvoje, neturinti savo namo, neturinti vairuotojo teisių, nelietuvė. Jeigu sąrašo baitas HEX ‘FF’, tai reiškia, kad šiame baite charakterizuojamas asmuo turi tokias savybes: vyras, vedęs, 25 metų, turintis aukštąjį išsilavinimą, gimęs Lietuvoje, turintis savo namą, turintis vairuotojo teises, lietuvis. Norint sužinoti visas minėtas asmens savybes tenka pateikti baitą – šabloną HEX ‘FF’ ir atlikti loginę operaciją IR. Akivaizdu, kad pateikus baite – šablone bet kokią kitą bitų kombinaciją, nustatysime ar turi analizuojamas asmuo tokias savybes, ar tik dalį tų savybių.
Loginės daugybos rezultatų sumavimui parinkta dviejų baitų vieta a todėl, kad galėtume joje sukaupti didesnį analizuojamų asmenų skaičių negu 255, kurie telpa viename baite. Dviejuose baituose tilps skaičius FFFF16, t.y. 6553510.
Naudodamiesi loginėmis aritmetinėmis operacijomis, reikiamai parinkdami operacijų vykdymo eiles, parinkdami įvairiausius šablonus, t.y. operacijų vykdymo parametrus ir kintamuosius, turime praktiškai neribotas manipuliavimo dvejetainiais duomenimis galimybes. Todėl šiuolaikiniai kompiuteriai, naudojantys dvejetainę logiką turi irgi tokias pat galimybes.

1.4. Dvejetainės operacijos diskrečiuose kompiuterio elementuose
Šiame poskyryje parodoma principinė aritmetinių ir loginių operacijų atlikimo galimybė kompiuteryje. Operacijų demonstravimui į kompiuterio fizinę realizaciją neatsižvelgiama. Kompiuterio elementai nuolat kinta, tobulėja, o dvejetainių operacijų matematika lieka ta pati. Kad dvejetainių operacijų demonstravimas diskrečiame kompiuterio elemente būtų akivaizdesnis ir lengviau suvokiamas, tas elementas vaizduojamas schema, kurią sudaro elektros grandinė, susidedanti iš magnetinių (a ir b) ir elektromagnetinių įtaisų (A ir B), kontaktų ir elektros srovės šaltinio ir išėjimo arba operacijos rezultato taško C (pav. 1.1).

Pav. 1.1. Diskretus kompiuterio elementas

Dvejetainė informacija schemai pateikiama elektros srovės buvimu arba nebuvimu A ir B taškuose. Jeigu taškuose A ir B srovės nėra, tai kontaktus veikia magnetai a ir b, o jei yra, tai kontaktus veikia stipresni elektromagnetai taškuose A ir B. Jeigu abu kontaktai susijungia, tai rezultato (išėjimo) taške C įtampa yra, o jei bent vienas kontaktas nesujungtas, tai taške C įtampos nėra. Įtampos buvimas taškuose A, B ir C reiškia vienetą (1), o nebuvimas – nulį (0).
Tegul į taškus A ir B pateikiami duomenys dvejetainėmis kombinacijomis:

A  0101, B  0011,

o taške C parodoma rezultatinė informacija priklausys nuo schemos, realizuojančios operacijas v, ,  ir .
Pradiniai duomenys ir jų dvejetainės sąveikos rezultatas schemose visada vaizduojami vienodai nutolę nuo visų trijų dvejetainių skaičių pradžios.
Žemiau pateikiamos pagrindinių loginių operacijų techninės realizacijos principinės schemos, vaizduojamos kaip diskretūs kompiuterio elementai.

Pav. 1.2. Operacijos ARBA (disjunkcijos) schema.

Pav. 1.3. Operacijos IR (konjukcijos) schema.

Pav. 1.4. Operacijos NE (inversijos) schema

Operacija IŠSKIRTINĖ ARBA yra žymiai sudėtingesnė ir paprastose schemose, kurios čia buvo pateiktos, negali būti realizuota todėl, kad vienu metu ir abiejų nulių ir abiejų vienetų operacijų rezultatas turi būti toks pat, t.y. lygus nuliui.
Operacija IŠSKIRTINĖ ARBA gali būti atlikta sujungus į vieną sistemą ar tam tikrą diskrečių elementų rinkinį keletą diskrečių elementų, kuriuos galima išreikšti formule:

(m  n)  [ (m  n)] (1.1)
Čia m ir n yra bet kurie keturženkliai dvejetainiai skaičiai. Operacija ARBA (m v n) parodo, kuriose m ir n skiltyse sutampa nuliai. Ten rezultatas bus nulis. Operacija IR (m  n) parodo, kuriose m ir n skiltyse sutampa vienetai. Jei tokių sutapimų nebūtų, visos operacijos esmė vis vien nesikeistų. Operacija NE, taikoma operacijos IR rezultatui (loginei sandaugai) ir pakeičia jį atvirkštiniu. Tai reiškia, kad abu gautieji dvejetainiai skaičiai turi nulius tose skiltyse, kur du pradiniai duomenys buvo vienodi, t.y. arba vienetai, arba nuliai. Taigi šiuos gautuosius dvejetainius skaičius dar kartą logiškai sudauginus gaunami vienetai tose skiltyse, kur pradiniai duomenys buvo skirtingi. Tai ir yra operacijos IŠSKITINĖ ARBA rezultatas (žiūr. lentelę 1.1).
Tegu m = 0101, o n = 0011, tai

(m  n)  [ (m  n)] =
(0101  0011)  [ (0101  0011)]=
= 0111 ( (0001)) = 0111 1110 = 0110.

Skaičius 0110 yra toks pat, kuris gaunamas, jeigu būtų atlikta operacija IŠSKIRTINĖ ARBA iš pat pradžių:

m  n = 0101  0011 = 0110.

Diskrečius kompiuterio elementus, pateiktus pav. 1.2, 1.3 ir 1.4 sujungus į tam tikrą rinkinį pagal formulę (1.1) gaunama operacijos IŠSKITRINĖ ARBA schema (pav. 1.5).
Nesunku įsitikinti, kad panašiai konstruojant schemas, kaip tai buvo padaryta operacijų ARBA, IR, NE, ir ypač IŠSKIRTINĖS ARBA atlikimui, galima sudaryti schemas bet kokios aritmetinės ar loginės operacijos realizavimui. Tai ypač akivaizdu, kai diskretūs elementai sudaromi elementarioms (daugiau nedalomoms) dvejetainėms procedūroms. Tokioje operacijoje dalyvauja tik du dvejetainiai vienženkliai skaičiai. Tokių dvejetainių operacijų bei jų schemų su dviem dvejetainiais vienženkliais skaičiais pakanka turėti penkiolika, kad būtų galima sudaryti bet kokios aritmetinės ar loginės operacijos atlikimo schemas (pav. 15).
Elementarių operacijų 1, 2, 3 ir 4 (žiūr. lent. 1.2)pradiniai duomenys sudaro visas įmanomas dvejetaines kombinacijas, o jų rezultatai yra lygūs nuliams. Tokių pat kombinacijų rezultatai lygūs vienetams (operacijos 5, 6, 7 ir 8). Operacijos 9 ir A yra inversijos. Operacijos B, C, D ir E nėra kai kurių 1 – 8 operacijų pakartojimas, nes čia operacijos rezultatai siejami su vieneto ar nulio padėtimi, tai reiškia, kad rezultatas priklauso nuo to, kuris iš operandų (pirmas ar antras) yra vienetas arba nulis.
Operacija F prie elementarių operacijų priskiriama tik sąlyginai, nes ją galima realizuoti tik sudėtingesne diskrečia kompiuterio elemento schema. Šią operaciją jungiant su kitomis nuo 1 iki E elementariomis operacijomis, galima atlikti bet kuriuos anksčiau pateiktus aritmetinius veiksmus.
Kadangi elementarių operacijų kiekiai bei jų integravimo kombinacijų įvairovė šiuolaikiniuose kompiuteriuose praktiškai mažai ribojami, tai įmanoma įvairiausias schemas integruoti taip, kad jos galėtų atlikti bet kokį reikiamą kiekį ir reikiamo sudėtingumo logines – matematines procedūras.
Anksčiau pateiktos aritmetinės ir loginės operacijos leidžia suvokti dvejetainio manipuliavimo duomenimis esmę ir parodo šio proceso neribotas manipuliavimo duomenimis galimybes. Kita vertus, pateiktasis aritmetikos ir logikos realizavimo būdas gali būti visiškai kitoks. Tai reiškia, kad duomenų baite vienetas gali būti visiškai kitaip pateiktas, negu buvo pateikta poskyryje 1.1. Svarbu, jog fizinė schema “suvoktų”, kad ji turi reikalą su vienokiu ar kitokiu skaičiumi ar simboliu ir galėtų jį reikiamai apdoroti, pagal savo pačios paskirties funkciją.

Pav. 1.5. Operacijos IŠSIKRTINĖ ARBA schema.

Elementarių operacijų lentelė 1.2.

Operacijos kodai 1 2 3 4 5 6 7 8 9 A B C D E F
Pradiniai duomenys 0 0 1 1
0 1 0 1 0 0 1 1
0 1 0 1
1 0 1 0
0 1 1 0
0 1 1
1
Operacijos rezultatai 0 0 0 0 1 1 1 1 0 1 0 0 1 1 1 0

Praktikoje naudojamos įvairios skaičių, raidžių ar kitokių simbolių dvejetainio kodavimo sistemos. Net kai kurie skirtingų gamintojų kompiuteriai turi skirtingus vidinius kodus. Tokie skirtingumai netrukdo keistis duomenimis, nes perkodavimo principai labai paprasti ir lengvai fiziškai realizuojami.
Perkodavimui imama 256 baitų lentelė, kurios baituose įrašomi dvejetainiai simboliai tos kodavimo sistemos, į kurią norima perkoduoti. Perkoduojamieji simboliai traktuojami kaip skaičiai, kurie nurodo reikiamo baito vietą lentelėje. Tame baite ir yra įrašytas šio perkoduojamojo simbolio atitikmuo. Pavyzdžiui, jeigu tam tikroje kodavimo sistemoje simbolis A yra šešioliktainis skaičius F1, tai jo atitikmuo, simbolis A, sistemoje, į kurią tas A perkoduojamas, turi būti įrašytas lentelės 241 baite, skaičiuojant nuo tos lentelės pradžios, nes

F116=24110 .

Pabrėžtina, kad nuo schemų realizavimo lygmens priklauso kompiuterių paskirtis. Jeigu schemos realizuotos taip, kad kompiuteris sprendžia galutinio vartotojo uždavinius, tai toks kompiuteris dažniausiai būna specialios paskirties kompiuteriu, t.y. sukurtas ribotam kiekiui konkrečių uždavinių spręsti. Tai gali būti labai įvairi kompiuterinė technika, nuo kompiuterio paprastų elementų panaudojimo įvairiuose įrenginiuose iki specialių kompiuterių, valdančių ištisus technologinius procesus. Jeigu kompiuterių schemos realizuotos taip, kad galutinio vartotojo uždavinio tiesiogiai nesprendžia, tai tokie kompiuteriai laikytini universaliais. Šių kompiuterių schemos sprendžia tam tikrus tarpinius uždavinius, o šių kombinacijos jau tenkina galutinio vartotojo reikmes. Šiuo atveju sprendžiamų uždavinių įvairovė gali būti labai didelė, todėl tokie kompiuteriai ir laikomi universaliais.

1.5. Universalaus kompiuterio įrenginiai
Universalaus kompiuterio įrenginių pavadinimai ir jų jungimo schema pateikiama 1.6 pav. Visas šios knygos turinys orientuotas į universalios paskirties kompiuterius. Bendriausiuoju atveju universalų kompiuterį sudaro:
– centrinis procesorius;
– operatyvioji atmintis;
– įvesties ir išvesties įrenginiai bei jų jungtys.

Pav. 1.6. Universalaus kompiuterio įrenginių jungimo schema.

Centrinis procesorius yra pagrindinis kompiuterinės sistemos valdymo ir duomenų apdorojimo įtaisas.
Kompiuterio atmintis yra pagrindinis duomenų atsiminimo įtaisas. Šis įtaisas turi dvi atmainas: operatyviąją ir išorinę atmintis. Operatyvioje atmintyje centrinis procesorius atlieka duomenų apdorojimo operacijas, o išorinė atmintis skirta dideliems duomenų kiekiams įsiminti bei saugoti.
Įvesties / išvesties įrenginiai skirstytini į įvesties įrenginius, išvesties įrenginius bei įvesties-išvesties įrenginius.
Universalus kompiuteris gali būti įjungtas arba neįjungtas į įvairaus tipo lokalius ar globalius kompiuterių tinklus, todėl schemoje tinklų įjungimo galimybė nurodyta kaip fizinė jungtis, o ne konkretūs įrenginiai.
Kompiuterio monitorius yra aparatinis įtaisas, kuris įgalina vizualiai teikti duomenis vartotojui bei padeda vizualiai stebėti klaviatūra ar kitaip į kompiuterį įvedamus duomenis.
Pele vadinamas manipuliatorius, kuris įgalina operatyviau valdyti duomenų apdorojimo procesą, negu klaviatūra. Klaviatūros ir spausdintuvo paskirtį nusako pats šių įrenginių pavadinimas.
Diskrečių kompiuterių elementų aprašymai bei pastaroji universalaus kompiuterio įrenginių ir jų tarpusavio jungimo schema užbaigė šioje knygoje pateikiamus fizinius kompiuterio elementų aprašymus. Visa kita knygos medžiaga skirta taikomosios matematikos dalykams.
Toliau nagrinėjama viena iš esminių kompiuterijos pradmenų sampratų. Tai sudėtingos informacijos, kurią suvokia ir gali įvairiai reikšti žmogus, pateikimas dvejetaine simbolika ir atvirkščiai, dvejetainių simbolių pavertimas žmogui suvokiama informacija. Šio proceso analizė atlikta antrame kompiuterijos pradmenų skyriuje.

2. Informacija ir duomenys
Žinios, reiškiamos bendra, dažniausiai žodine forma, priimta vadinti informacija, o konkretesnės, ypač pateikiamos skaičiais – vadinamos duomenimis. Apskritai informacijos ir duomenų sąvokos gana artimos, panašios, kadangi daugelį įvairios sandaros ar struktūros žinių galima pavadinti ir informacija ir duomenimis. Šiame darbe, kaip ir kituose matematinio pobūdžio informatikos darbuose, žinios, pareikštos žmogaus lengvai suvokiamu būdu laikomos informacija, o tos pačios žinios, turinčios matematizuotą išraišką – yra duomenys.
Tad informacijos apdorojimą sudaro metodai ir būdai, įgalinantys matematizuoti informaciją, paverčiant ją duomenimis, perdaryti, apdoroti tuos duomenis ir vėl pateikti kaip informaciją, kuri jau kitokia, nauja, kitaip pateikta ir t.t. Kad būtų galima informaciją apdoroti, būtina turėti informaciją ir duomenis, kur nurodoma, kaip tai atlikti. Taigi, būtina informacija apie informaciją ir duomenys apie duomenis. Pastaruosius galima pavadinti metainformacija ir metaduomenimis. Praktikoje metainformacijos ir metaduomenų pavadinimai nėra populiarūs. Informacija apie informaciją ir duomenys apie duomenis vadinami kitaip ir labai įvairiai. Pavyzdžiui, viena iš metainformacijos rūšių gali būti vadinami algoritmais, o iš metaduomenų – programomis. Toliau šiame skyriuje pateikiama informacijos, duomenų, algoritmų ir programų samprata bei pagrindinės sąvokos.

2.1. Informacija
Informacija galima laikyti žinių apie realųjį pasaulį visumą. Tą visumą sudaro žinios apie įvairiausius objektus, nuo elementariausių iki labai sudėtingų. Todėl informacija, kaip visuma gali būti skirstoma ar rūšiuojama pagal įvairius požymius. Nuo tų požymių priklauso ir informacijos rūšių pavadinimai.
Pagal informacijos apdorojimo periodus ji gali būti pradinė, tarpinė ir rezultatinė, kuri skirta galutiniam jos naudojimui. Pagal sprendžiamų uždavinių tipus informacija gali būti operatyvi, uždara, komercinė, mokslinė, ekonominė ir t.t.; pagal reikšmę – teisinga, klaidinga, pilna, nepilna, prieštaringa, nereikalinga ir kt. Nesunku pastebėti, kad vieno ir to paties pavadinimo informacija gali atitikti ne vienam, o keliems rūšiavimo kriterijams. Pavyzdžiui, ekonominė informacija gali būti ir pradinė, ir nepilna, ir mokslinė. Todėl paminėtasis informacijos rūšiavimas kompiuterijoje apčiuopiamos reikšmės neturi, bet leidžia geriau suprasti jos, kaip tokios esmę, o taip pat įvairovę ir gausą.
Šioje knygoje operuojama informacija, kuri gali būti charakterizuojama tokiais faktoriais:
 informacija priklauso galutiniam vartotojui;
 informacija reikalauja tam tikro kompiuterinio apdorojimo lygio;
 informacija gali būti išreikšta tam tikromis konkrečiomis matematinėmis konstrukcijomis.
Galutiniu vartotoju laikomas asmuo arba organizacija (fizinis ar juridinis asmuo), turintys savo informacijos, kurią reikia, būtina arba tikslinga apdoroti kompiuteriu. Be to tokia informacija negali būti pilnai apdorojama esama programine sistemine, taikomąja, tipine ar kitokia įranga. Tai reiškia, kad tokios informacijos apdorojimui reikalinga sukurti specialią programinę įrangą, kuri visiškai savarankiškai, arba kartu su tipine, taikomąja ar kitokia programine įranga, išspręstų minėtos informacijos apdorojimo uždavinius.
Informacijos apdorojimo lygiu laikytini tokie atvejai:
1) kompiuterinis informacijos apdorojimas informacijos nekeičia, naujos informacijos negaunama, kompiuteris naudojamas kaip fizinis įrankis žmogaus darbui tobulinti;
2) vartotojui pateikiama kito vartotojo informacija, apdorojant ją į kitam vartotojui reikiamą formą, eilę, apdorojimo trukmę ir pan.;
3) informacijos apdorojimo rezultatas yra nauja informacija, kuri išreiškiama skaičiais, žodžiais, simboliais, kodais, kurie yra žinomų ar naujų atributų reikšmėmis.
Suprantama, kad pateiktieji informacijos apdorojimo lygiai yra sąlyginiai. Kita vertus, net ir tokio sąlyginamumo pakanka, kad tik esant trečiajam apdorojimo lygiui, vartotojui tenka rūpintis specialių apdorojimo priemonių kūrimu. Antrojo atvejo problemas paprastai išsprendžia sisteminė, bendroji taikomoji programinė įranga. Pirmojo informacijos apdorojimo lygmens charakteringu pavyzdžiu gali būti įvairiausi tekstų redaktoriai. Tekstą redaguoja, gaudamas naują tekstą (naują informaciją) žmogus. Kompiuteris tik įrankis, kuris įvairiais aspektais palengvina žmogaus darbą. Kompiuterinė sistema šiuo atveju jokios naujos informacijos sukurti negali.
Informacijos pateikimo forma – lentelės.
Lentelė bet kuriam vartotojui įprasta, akivaizdi, dažnai sutinkama praktikoje ir ne tik kompiuteriais apdorojant informaciją. Kita vertus, lentelėmis pateikiamą informaciją nesunku transformuoti į matematinę konstrukciją – reliacines aibes. Pastarosios irgi turi plokščią keturkampį pavidalą. Reliacinės aibės literatūroje dar vadinamos sąryšiais, santykiais, sąsajomis. Reliacinių aibių panaudojimas tikslingas ir tuo aspektu, nes aibės turi išvystytą fundamentinį matematinį aparatą, kuris gali būti modifikuojamas taikomosios matematikos reikmėms, t.y. transformuojant informaciją į duomenis.
Pažymėtina, kad reliacinės aibės išraišką turi didelė dalis techninės, technologinės, ekonominės, mokslinės ir kitokios informacijos.

2.2. Duomenys
Šiame poskyryje pateikiamos pradinės žinios apie duomenis. Tai pagrindinai informacijos keitimo duomenimis būdai, formalizacijos pradmenys ir duomenų aprašymai formaliomis išraiškomis, kurios kompiuterio atmintyje pateikiamos dvejetaine simbolika. Čia pateiktoji duomenų samprata įgalina suvokti kitus šios knygos dalies objektus: algoritmus, programas, programines sistemas ir t.t.
Duomeniu laikoma pareikštis, kuri pateikiama logiškai savarankišku, daugiau nedalomu sakiniu. Toks sakinys turi loginį veiksnį ir pagrindą bei pažyminius ir papildinius. Pastarieji nurodo kokios yra veiksmo bei pagrindo savybės ir požymiai.
Duomens pavyzdžiu gali būti pareikštis: “INSTITICIJOJE b, d METŲ PRADŽIOJE DIRBO c DARBUOTOJŲ, KURIE ŠIOJE INSTITUCIJOJE TURI e METŲ DARBO STAŽĄ”.
Šios pareikšties loginis veiksnys yra žodis DARBUOTOJŲ, o pagrindas – c. Visos kitos sąvokos tik papildo, konkretina bei pažymi tam tikras veiksnio bei pagrindo savybes arba nurodo tam tikrus jų požymius.
Pateiktoji pareikštis logiškai savarankiška ir negali prarasti ar įgyti naujų požymių ar papildinių. Jeigu taip įvyktų, tai jau būtų kita, t.y. dar viena pareikštis. Pavyzdžiui, jeigu iš sakinio būtų išbraukta dalis: “. KURIE ŠIOJE INSTITUCIJOJE TURI e METŲ DARBO STAŽĄ.” turėtų pasikeisti pagrindas c ir turėtume dvejus duomenis (dvi pareikštis) apie institucijos b darbuotojus. Net ir tuo atveju, jeigu c nepasikeistų, būtų dveji duomenys apie darbuotojus, nes būtų akivaizdu, kad institucijoje dirba c darbuotojų ir visi jie turi vienodą, t.y. e metų darbo stažą.
Jeigu turimas ne vienas duomuo, o keletas ar keliolika duomenų apie institucijas bei jų darbuotojų darbo stažą, tai galima sudaryti tokių duomenų hipotetinę lentelę. Sudarant tokią lentelę, pirmiausiai išskiriami bendri visų duomenų požymiai. Šiuo atveju tokiu požymiu galėtų būti laiko momentas, t.y. metų pradžia. Šis požymis išskirtas iš visų duomenų aprašymų paprastai užrašomas lentelės priekyje ir tarnauja lentelės identifikatoriaus sudėtine dalimi.
Kita identifikatoriaus dalimi turėtų būti subjektas, kurio duomenims skirta lentelė. Šiuo atveju tai institucijų visumos tam tikra dalis: kurio tai verslo visos institucijos, ar mokslo, ar švietimo įstaigos, arba kelių veiklos krypčių institucijos. Po to nustatoma ir koduojama lentelės schema, t.y. koduojami tam tikra eile surašyti atributai.
Tad identifikuotą lentelės schemą sudarys identifikatoriaus atributų schema ir pačios lentelės schema.
Identifikatoriaus schema:

a – pačios lentelės, kaip savarankiško duomenų darinio, kodas;

B – subjekto atributas – nuoroda, kad būtų pateikta, kokią veiklos sritį apima institucijos, kurių duomenys pateikiami lentelėje;

D – laiko faktoriaus kodas, šiuo atveju reiškiantis metų pradžią, o pildant lentelę nurodoma kokių metų pradžios duomenys yra lentelėje.

Lentelės schema – jos atributų ir jų kodų sąrašas:

Institucijos pavadinimas Bendras darbuotojų skaičius Darbo stažas

__ metų Darbo stažas

__ metų Darbo stažas
__ metų
C1 C2 C3 C4 C5

Šioje schemoje ir toliau lentelėse atributai bus žymimi didžiosiomis raidėmis, o atributų reikšmės tomis pačiomis mažosiomis raidėmis. Taigi, a yra ne atributas, o atributo reikšmė, t.y. pačios konkrečios lentelės pavadinimo kodas, apie institucijų personalą. Lentelės schemoje C3, C4 ir C5 atributuose nenurodyti konkretūs stažo metai. Tai daroma sąmoningai ir todėl, kad čia nagrinėjama duomenų, kaip tokių, struktūra ir pateikimo forma. Nurodžius darbuotojų grupių susidarymą pagal konkretų dirbtų institucijoje metų skaičių – būtų jau sąlyga darbo stažo uždavinio sprendimui. Pastarasis objektas nėra šio duomenų nagrinėjimo tikslas. Be to jis rodo skaitytojui apie takoskyros esmę tarp informatikos dalyko ir tam tikros srities, kuri yra pasitelkusi informatiką, uždavinių. Kompiuterijai pagelbėja, bet nepakeičia ir negali pakeisti kitų veiklos sričių nei teorijos nei praktikos.
Lentelės, užpildytos duomenimis pavyzdys:

a, B – b1, D – d1

C1 C2 C3 C4 C5
c11 c 12 c 13 c 14 c 15
c21 c 22 c 23 c 24 c 25
c 31 c 32 c 33 c 34 c 35
— — — — —
— — — — —
— — — — —

Lentelės a tipo duomenų cij (i = 1, 2, 3, ., j = 1, 2, 3, 4, 5) skaičius priklauso nuo to, kelių institucijų ir kurių metų pradžios duomenys apie darbuotojų stažą reikalingi. Nepriklausomai nuo duomenų cij gausumo, kompiuterio atmintyje lentelės schemą pakanka turėti tik vieną, o duomenis atmintyje laikyti atskirai nuo schemos tik su jų identifikatoriais. Tada duomenų struktūrai nustatyti turime vieną įrašą:

a, B, D; C1, C2, C3, C4, C5.

Atributų reikšmės turės parodytąjį pavidalą, o jų kiekį lemia skirtingų b ir d skaičius:

. (2.1)

Taip glaustai ir formaliai galima pateikti formule (2.1) lentelės sandarą, kuri “patogi” laikyti kompiuterio atmintyje. Be to, anksčiau pateikta lentelė ab1d1 gali būti ir pastarųjų formulių aibių dalimi.
Taigi b, d ir cij yra bendru pavidalu pateiktas atributų B, D, C1, C2, C3, C4, C5 reikšmės, skirtingos kiekvienam reikšmių aibės elementui – savarankiškai identifikuotai duomenų lentelei, neturinčiai tiesiogiai priskirtos schemos. Ta schema priskiriama visoms atributų reikšmėms, sulyginus ir nustačius, kad abi struktūras identifikuojantys kodai a sutampa.
Duomenų lentelėje eilutės gali būti išdėstytos įvairia tvarka: pagal kurio nors atributo skaitinių reikšmių didėjimą arba mažėjimą, pagal tekstinių atributų reikšmių pirmųjų raidžių abėcėlę ir t.t.
Žemiau (2.1 pav.) pateikiama eilučių išdėstymo tvarka pagal atributo C3 reikšmių didėjimą (I), mažėjimą (II) ir pagal atributo C1 – institucijų pavadinimų pirmųjų raidžių abėcėlę (III)

C3
_____ C3
______ C1
______
16 31 AB”1”
18 30 AB”6”
30 18 UAB”1”
31 16 UAB”14”
. . .
I atvejis II atvejis III atvejis
Pav. 2.1. Duomenų lentelės eilučių išdėstymo būdai

Akivaizdu, kad nuo eilučių išdėstymo skirtingumo duomenys nesikeičia. Bet būtina turėti galimybę vieną eilutę atskirti nuo kitos. Tam tikslui paprastai vienas iš atributų nurodomas kaip rakto atributas, o jo reikšmės tampa eilučių raktais, t.y. identifikatoriais. Jei vienos atributo reikšmės nepakanka, nes yra pasikartojančių rakto atributo reikšmių, tai rakto atributais nurodomo du ar daugiau atributų. Pateiktoje a lentelėje rakto atributas bus C1, t.y. institucijos pavadinimas.
Jeigu dėl kokių nors priežasčių (pavyzdžiui, klaidos) atsitinka taip, kad lentelėje yra dvi ar daugiau to pačio rakto ir vienodų (sutampančių) kitų atributų reikšmių eilutės, tai visos eilutės išbraukiamos iš lentelės, paliekant tik vieną iš jų. Akivaizdu, kad buvo be reikalo dubliuojami vieni ir tie patys duomenys. Jeigu esant tam pačiam dviejų eilučių raktui, kitos atributų reikšmės skiriasi, tai aišku, kad pateikiami klaidingi duomenys.
Pavyzdžiui, negali būti taip, kad vienu ir tuo pačiu metų pradžioje, vienoje ir toje pačioje institucijoje vienodą darbo stažą turėtų skirtingas skaičius darbuotojų. Tik kai eilutės dubliuojamos, tai tokia klaida įmanoma. Pavyzdžiui:

C1 C2 C3 .
AB “1”
100 26 ? .
. . . .
. . . .
. . . .
AB”1”
100 25 ? .
Pav. 2.2. Eilučių dubliavimas lentelėje, įgalinęs pateikti klaidingus duomenis.

Šiuo atveju klaidą gali rasti ir ištaisyti tik duomenų savininkas, t.y. būtina kreiptis į pirminį duomenų šaltinį.
Lentelės schemos atributų skaičius vadinamas lentelės rangu. Lentelės eilučių skaičius vadinamas tos lentelės eile arba galia. Jeigu lentelės rangas yra pastovus skaičius, tai lentelių eilė gali skirtis. Pavyzdžiui, lentelės a rangas yra 5, tai eilė kiekvienam lentelės užpildymui (skirtingiems d ) gali būti kitokia ir priklauso nuo to, kiek institucijų yra skirtingų metų pradžioje objekte b.
Lentelių turinio bei jų identifikatorių įvairovė nagrinėtina teoriniu ir praktiniu aspektais dėl kiekybinių bei sandaros skirtingumų. Teoriniu požiūriu atributų CI ir jų reikšmių cij aibės, sudarančios lentelės turinį, yra begalinės, nes atspindi realaus pasaulio įvairovę.
Lentelių identifikatorių a, b ir d bei jų atributų aibės yra skirtingos savo prigimtimi ir skaitlingumu.
Lentelių schemų identifikatorių aibė {a} gali būti neriboto didumo, nes teoriškai įmanoma kontroliuoti vis naujas ir kitokias atributų schemas įvairiausiems realaus pasaulio objektams, procesams, reiškiniams ir pan. Be to, gali būti imamos vienos ir tos pačios schemos skirtingas elementų skaičius.
Pavyzdžiui:

a; C1 , C2 .
a; C1 , C2 , C3 .
a; C1 , C2 , C3 , C4 .
a; C2 , C3 .
a; C2 , C3 , C4 ,, C5 .
– – – – –
– – – – –
– – – – –

gaunamos naujos schemos. Visose gautose atributų schemose atributus galima išdėstyti perstatinių principu, gaunant iš kiekvienos naujos schemos dar n! schemų. Visa tai rodo, kad teoriniu požiūriu schemų aibė {a} nėra baigtinė savo elementų skaičiumi. Kiekvienas iš šių a identifikuoja vis kitokią atributų schemą, kuri gali būti užpildoma neribotą kiekį kartų, atributų reikšmėmis cij. Tokie užpildymai priklauso vėl nuo neriboto realų pasaulį atspindinčio objektų bei subjektų kiekio b.
Visų aukščiau minėtų lentelių įvairovę ir gausą radikaliai papildo identifikatoriaus dalis – laiko faktorius. Laiko faktorius tai konkretaus laiko momento fiksavimas arba laiko tarpo nurodymas, kuriuose turi prasmę cij. Teoriniu požiūriu kiekvienam realiai galinčiam egzistuoti laiko tarpui arba momentui galima konstruoti vis naujas lenteles iš visų anksčiau paminėtų begalinių duomenų lentelių aibių.
Praktikoje vienos institucijos, nesusietos su duomenų apdorojimo industrija, duomenų lentelių schemų skaičius dažniausiai būna tarp vienos ir kelių dešimčių. Be to, šios schemų užpildytų turiniu t.y. cij didelė dalis apdorojama bendrąja arba tipine programine įranga, gaunama iš kitų institucijų, įvairių kompiuterinių tinklų ir pan. Paprastai tik nedidelė dalis duomenų tenka apdoroti specialiomis tik šiai institucijai sukurtomis programinėmis priemonėmis. Tad specialiems, charakteringiems tik konkrečiai institucijai duomenims pateikti pakanka dažniausiai iki dešimties – dvidešimties schemų. Šių schemų užpildymų duomenimis skaičius labai skirtingas ir priklauso nuo specialiųjų uždavinių pobūdžio. Bet šiame duomenų kaip tokių nagrinėjimo etape svarbiausia suvokti duomenų identifikavimo priklausomybę nuo duomenų savybių ir atvirkščiai.
Taigi, duomenys, kurių schema ir jos atributai turi realias atributų reikšmes, gali būti identifikuojami:
– a – tik schemos kodo;
– a, b – a ir subjekto kodų;
– a, d – a ir laiko faktoriaus kodų;
– a, b, d – a, subjekto ir laiko faktoriaus kodais;
– a, b, d, ? – trijų identifikavimo faktorių nepakanka.
Jeigu duomenų lentelės identifikavimui pakanka tik kodo a, tai reškia, kad tos lentelės duomenys cij nepriklauso konkrečiam subjektui ir nepriklauso nuo laiko faktoriaus. Tai a yra sudaryta iš įvairių konstantų ir/arba normatyvinių duomenų, nes normatyviniai duomenys yra sąlyginai pastovūs.
Duomenų identifikuojamų a ir subjekto b pavadinimu arba kodu galėtų būti tam tikras techninis įrenginys, kurio atributų reikšmės pateikiamos kaip įrenginio agregatai, detalės, jų skaičiai įrenginyje, jų nomenklatūriniai numeriai ir kt., nes agregatų kiekiai dažnai (bet ne visada) nepriklauso nuo laiko faktoriaus.
Jeigu prie duomenų, identifikuojamų a, b, pateiktame pavyzdyje pridėti ir atributą “KAINA”, bei jos reikšmes išreikštas piniginiais vienetais, tai identifikatorius turėtų būti papildytas ir laiko faktoriumi d. Taip yra todėl, kad kaina gali keistis praėjus tam tikram laikui, arba imant kitą laiko momentą, nei nurodoma lentelėje jos užpildymo metu. Tokiu būdu turėtume naują lentelę su pakitusiomis kainomis ir senąją – su senomis kainomis. Naujoji lentelė būtų identifikuojama jau a, b, d.
Dažnai pasitaiko, kad duomenų lentelėms identifikuoti a, b, d nepakanka. Tai atsitinka todėl, kad daugiau kaip vienos lentelės identifikatoriai sutampa. Vieniems uždaviniams spręsti tai gali netrukdyti, bet bus ir tokių uždavinių, kuriems būtina “žinoti”, kiek ir kokių lentelių yra su vienodais a, b, d. Tai gali atsitikti dėl paprastų priežasčių kaupiant duomenis nesudėtingiems uždaviniams spręsti. Pavyzdžiui, tegu apie tam tikrą operaciją technologiniame procese duomenys pateikiami duomenų lentelėmis. Visiškai nesvarbu, ar tie duomenys vienodi, ar ne, svarbu juos turėti ir žinoti, kiek kartų įvyko operacija. Jeigu operacijos vyksmo pradžia matuojama sveikais laiko vienetų skaičiais (juos apvalinant), tai dvi operacijos per mažesnę sumarinę trukmę nei laiko matavimo vienetas rodys, kad dvi operacijos įvyko vienu ir tuo pačiu laiko momentu d. Praktikoje tokios operacijos pavyzdžiu gali būti du telefono pokalbiai, įvykę tarp tų pačių abonementų per minutę, jeigu laiko momento skaičius apvalinamas vienos minutės tikslumu, skaičiaus trupmeninę dalį atmetant.
Taigi apibendrinant tai, kas pasakyta apie vienodus identifikatorius, galima tvirtinti, kad kai kuriais atvejais identifikatoriaus sudaryto iš a, b ir d elementų lentelėms vienareikšmiškam identifikavimui nepakanka. Tada galima identifikatoriuje nurodyti vieną ar kelis duomenų adresus lentelėje ir į identifikatorių (vietoje adreso) įrašyti to adreso turinį. Papildomi duomenys identifikatoriuje įgalins vienareikšmiškai identifikuoti bet kokią duomenų lentelę. Adresai lentelėje nurodomi grafos numeriu j arba eilutės ir grafos numeriu ij lentelėje. Šie klausimai bus detaliai nagrinėjami pateikiant duomenų matematinius modelius.

2.3. Algoritmai ir programos – duomenys.
Dar prieš apibrėžiant, kas yra algoritmas ir kas yra programa, galima pasakyti, kad tai duomenys. Tai yra duomenys apie tuos duomenis, kurie buvo aprašomi praeitame 2.2. poskyryje. Taigi, duomenys apie duomenis dažniausiai vadinami metaduomenimis.
Sugretinus pirmojo knygos skyriaus sąvokas apie dvejetainių duomenų išraiškas kompiuterio atmintyje ir šio skyriaus duomenų apie realius objektus aprašymus, aiškiai matyti, kad kompiuterio elementai galės pastaruosius duomenis apdoroti tada ir tik tada, jei jie atsidurs kompiuterio atmintyje ir bus pateikti dvejetaine forma. Tokiais “tarpininkais”, kurie galėtų logiškai ir fiziškai sujungti realių objektų duomenis su kompiuterio schemomis, yra algoritmai ir programos. Tad tokia nuorodų ir taisyklių visuma, kuri apibrėžia duomenų apdorojimo procesą taip, kad iš pradinių duomenų būtų gaunami duomenys – apdorojimo rezultatai, vadinama algoritmu.
Nesudėtingą algoritmą žmogus gali įsiminti, sudėtingesnius būtina užrašyti elektroninėje aparatūroje, popieriuje ar kitaip. Bet jokiu atveju šis algoritmas neturės jokios įtakos duomenų apdorojimui, kol jis nebus išreikštas programa, o pastaroji nebus pateikta dvejetaine forma ir įrašyta į kompiuterio atmintį. Taigi kompiuterio atmintyje gali būti tik dvi iš esmės besiskiriančių duomenų rūšys:
– duomenys apie realius objektus;
– duomenys apie duomenis arba programos, įgalinančios duomenis perdaryti, apdoroti, įvesti, išvesti iš kompiuterio atminties ir t.t.
Tad programa vadinami duomenys, kurie skirti duomenų apdorojimo komponentams valdyti ir algoritmui įvykdyti.
Duomenų apdorojimo komponentų valdymas reiškia, kai duomenų apdorojimo programoje turi būti nuorodos į kitas, bendras daugeliui duomenų apdorojimo uždavinių programas, kad jos atliktų tam tikrus pagalbinius darbus ir tam tikrus algoritmo realizavimo momentus. Tokiais komponentais gali būti duomenų įvestis ir išvestis, duomenų ir programinių veiksmų korektiškumo kontrolė, programų ir duomenų apsauga nuo ištrynimo ir t.t.
Jeigu programa kompiuterio atmintyje veiktų viena, tai jai tektų atlikti daug visokiausių pagalbinių darbų, kuriuos reikėtų programuoti kartu su taikomąja programa kiekvieną kartą pagal tos programos specifiką. Kad tokie bendro pobūdžio darbai ruošiant programas atkristų, yra sudarytos programinės bendrojo pobūdžio sistemos, kurios aptarnauja taikomojo pobūdžio programas. Tos sistemos, vadinamos operacinėmis, diskinėmis operacinėmis, transliatoriaus ir kitaip. Jos kinta kartu su kompiuterių fizinių savybių kaita, pačios tobulėja, pasensta, sukuriamos naujos ir t.t. Šios sistemos sudaro dalį kompiuterio dirbtinio intelekto, t.y. žmogaus intelektualių savybių imitavimą kompiuteriu.
Baigiant šį trumpą poskyrį, skirtą programų ir algoritmų esmės apibrėžimui, matome, kad duomenys ir programos dvejetainėje kompiuterio atmintyje turi skirtis ne tik savo turiniu, bet ir paskirtimi. Duomenys, koduoti įvairiais metodais ir būdais, atspindi duomenų struktūrą, turinį ir semantiką. Programų kodai reiškia, ką ir kaip reikia daryti su duomenimis, kad gauti algoritmo apibrėžtą to darymo t.y. apdorojimo rezultatą. Kompiuterio schemos (žiūr. 1 skyrių) analizuoja dvejetainį programų tekstą ir atlieka tam tikrus veiksmus su duomenimis.
Duomenų, t.y. ir duomenų apie realųjį pasaulį ir duomenų apie duomenis t.y. programų pateikimui kompiuterio atmintyje skiriamas trečiasis knygos skyrius, kuris, autoriaus nuomone yra vienas iš svarbesnių šios knygos skaitytojui, norinčiam turėti tam tikrus profesionalius įgūdžius suvokiant ir formuojant savo uždavinius, kad juos galėtų racionaliai spręsti kompiuteriai.

3. Kompiuteriniai duomenys
Kompiuteriniais duomenimis laikomi duomenys apie realius objektus bei metaduomenys, turintys tokią striktūrą ir išraiškas, kad juos gali įsiminti kompiuterio atminties įtaisas. Šis įtaisas dažniausiai dar vadinamas tiesiog kompiuterio atmintimi, o tokie duomenys vadinami mašininiais ar aparatiniais duomenimis.
Šio skyriaus tikslas – pateikti sampratą apie tai, kaip duomenys, kurie kompiuterio atmintyje išreiškiami elementaria dvejetaine forma, nepraranda duomenų apie realius objektus turinio ir prasmės? Be to, dvejetainio apdorojimo metu gaunami nauji duomenys, turintys ir naują struktūrą, ir naują turinį, ir kitokią prasmę, negu buvo prieš dvejetainių duomenų apdorojimą. Atsakant į pateiktą klausimą, šiame skyriuje nagrinėjami kompiuterio atminties adresavimo principai, duomenų ir programų struktūros ir jų ryšiai kompiuterio atmintyje, adresų laukų samprata ir pavyzdžiai bei duomenų turinio kodavimo būdai.

3.1. Atminties adresacija ir duomenų struktūros
Kompiuterio atmintis techniškai sudėtingas įtaisas, kuris tobulėja mažinamas savo fiziniais parametrais ir didinamas talpumu.
Žvelgiant matematiniu aspektu, kompiuterio atmintį pakanka suvokti, kaip dvejetainių skilčių ar jų grupių vektorių. Aštuonių skilčių grupė sudaro mažiausią adresuojamą atminties ląstelę – baitą.
Atminties baitų vektoriuje pirmojo baito adresu dažniausiai yra nulis, o paskutiniojo baito adresas yra sveikasis skaičius n, kuris rodo atminties talpą arba didumą.

Pav. 3.1. Atminties baitų vektorius

Duomenų baito, įrašo, lauko, failo, masyvo ar kitokios jų struktūros turinį galime nustatyti tik tokiu atveju, jeigu žinomas struktūros pradžios adresas atmintyje. Tik po to galima nagrinėti baitų turinį ir pagal 0 bei 1 išsidėstymą atpažinti reikiamus duomenis. Kas tie duomenys ir ką su jais reikia daryti nusako metaduomenys. Kas tie metaduomenys – algoritmas, kas tas algoritmas – uždavinys.
Duomenų įrašu laikomas duomenų sankaupos (failo, lauko, masyvo) elementas, kurio vidinių dalių duomenų tipai gali būti skirtingi.
Duomenų failu (byla, rinkmena) laikoma identifikuota logiškai ar/ir fiziškai susietų įrašų aibė.
Duomenų masyvu laikoma įvardinta vienodo tipo įrašų aibė, kur įrašai identifikuojami indeksais.
Duomenų lauku laikoma logiškai ir/arba fiziškai susietų failo arba masyvų įrašų įvardinta dalis, arba įrašams skirta bet dar neužpildyta atminties dalis.
Jeigu duomenų lauką sudaro tam tikra iš duomenų sankaupos išrinkta įrašų aibė, bet pateikiama ne tokia eile, kokia buvo minėtose duomenų struktūrose, tai tokia aibė bus vadinama duomenų rinkiniu.
Kai nėra svarbu, ar nagrinėjami duomenys yra failas, masyvas, laukas ar rinkinys, tai toks įvardintas duomenų darinys vadinamas duomenų sankaupa.
Ateityje dažnai bus vartojama duomenų apdorojimo uždavinio samprata arba jos sinonimas – taikomasis uždavinys. Toks uždavinys reiškia galutinio vartotojo duomenų apdorojimo uždavinį ir tiesiogiai nesietinas su sisteminių, servisinių ar kitokių uždavinių sprendimu, kurie tiesiogiai neturėtų dominti galutinio vartotojo.
Jeigu duomenų įrašai yra

A1 , A2 , ., Ak ,

kur 1, 2, ., k yra įrašų eilės numeriai, tai duomenų failą galima užrašyti taip:

Ai  F,

kai i kinta nuo 0 iki k.
Šiuo atveju duomenų laukas L bus F poaibis

L  F, kur Ad  L,
kai skaičius d< k.
Jeigu duomenų įrašai yra

,

kur k i (1> i >l) yra įrašų identifikatoriai, tai duomenų masyvą M sudarys įrašai

,

o šios sankaupos laukas galėtų būti

L  M, kur ,

bet t< i, arba duomenų identifikatorių, o taip pat ir įrašų duomenų lauke turi būti mažiau nei masyve. Jeigu t = i tai

L  M.

Akivaizdu, kad bet kokios duomenų sankaupos gali būti surastos ir pateiktos apdorojimui, jeigu žinomi tų duomenų struktūrų adresai. Paprastai tai būna tų struktūrų pirmųjų baitų kompiuterio atminties adresai. Atkreiptinas dėmesys į tik ką pateiktas sąvokas:
– “. gali būti surastos.”;
– “. pateiktos apdorojimui.”;
– “.jeigu žinomi . adresai.”.
Kyla klausimai: kas gali surasti, pateikti apdorojimui, aišku, ir apdoroti? Pagaliau, kam turi būti žinomi adresai? Atsakymas trumpas – programoms. Duomenų apdorojimo programoms.
Tokiu būdu, dar nesuformulavus pagrindinių programų ir programavimo sampratų, jau galima suvokti kai kurių iš tų sampratų esmę.
Anksčiau minėtieji failų adresai yra dvejetainiai kompiuterio atminties adresai, kurie vadinami absoliučiais adresais. Suprantama, kad tiesiogiai programoms pateikti absoliučius adresus labai sudėtinga. Todėl jie nustatomi pasitelkus tam tikrus metodus, kurie realizuojami tam tikromis kompiuterio programomis. Šios programos tiesiogiai nedalyvauja vartotojo uždavinio sprendime, bet aptarnauja kompiuterinį to sprendimo procesą.
Toliau bus pateiktos pagrindinės sąvokos apie:
– įrašų formatus;
– operatyviąją ir išorinę atmintis;
– duomenų sankaupų sudarymo būdus;
– duomenų paieškos būdus;
– duomenų adresus bei adresavimo būdus;
– duomenų bazes.

3.1.1. Įrašų formatai
Viename duomenų faile ar masyve esančių įrašų pagrindinis skirtumas (be turinio skirtingumo) tai pastovus arba kintamas jų ilgis. Tai reiškia, kad vieną ir tą patį duomenų failą arba masyvą gali sudaryti arba pastovaus, arba kintamo ilgio, skaičiuojant simboliais arba baitais, įrašai.
Įrašai pastovų ilgį gali turėti natūraliai. Tai reiškia, kad tam tikri duomenys, sudaryti iš įrašų apie realius objektus, turi vienodą simbolių skaičių. Tokio įrašo pavyzdžiu gali būti reliacinės aibės kortežai (t.y. duomenų lentelės eilutės), kur vieno ir to paties atributo reikšmės turi tą patį simbolių skaičių.

B1 B 2 B 3 B 4
1 įrašas – abc 22 366 481
2 įrašas – bcd 93 661 121
3 įrašas – cde 41 332 101
———————————–
Pav. 3.2. Natūraliai pastovaus ilgio įrašai

Praktikoje, dažniausiai, norint, kad įrašai turėtų pastovų ilgį, toks ilgis padaromas dirbtinai. Pirmiausiai nustatomas kiekvieno įrašo komponento (duomens) maksimalus ilgis. Po to, kad būtų gautas maksimalus duomens ilgis, jo pradžioje (dažniausiai skaičiams) arba pabaigoje (dažniausiai tekstiniams duomenims) papildomai įrašomi specialūs duomens pailginimo simboliai. Dažniausiai tokie simboliai būna simboliai – protarpiai (└┘).

B1 B2 B3 B4
1 įrašas – a b└┘ └┘2 └┘64 481
2 įrašas – c└┘ └┘ 34 686 └┘33
3 įrašas – d e f 43 └┘└┘1 961
———————————————
Pav.3.3. Dirbtinai sudaryti pastovaus ilgio duomenys įrašuose

Žinant, kad maksimalus pav. 3.3 pateiktų įrašų ilgis yra 11 simbolių, neskaitant simbolių, kurie skiria vieną atributo reikšmę nuo kitos, (3 + 2 + 3 + 3 = 11), dirbtinai pastovų ilgį galima sudaryti ir kitaip: iki 11 trūkstamų simbolių skaičius protarpiais (└┘) užpildomas įrašas jo pabaigoje.

B1 B2 B3 B4
1 įrašas – ab 2 64 481└┘└┘└┘
2 įrašas – c 34 686 33└┘└┘└┘
3 įrašas – def 43 1 961└┘└┘
———————————————
Pav.3.4. Dirbtinai sudaryti pastovaus ilgio įrašai

Visais pav. 3.2., 3.3 ir 3.4 pateiktais pastovaus ilgio įrašo sudarymo atvejais, tarp atskirų įrašo duomenų įrašomas tarpas, kuris leidžia rasti kiekvieno duomens pabaigą, o viso įrašo pabaiga nustatoma, žinant jų visų ilgį. Suprantama, kad atributų A1 , A2,, A3, A4 ir B1 , B2, B3, B4 nėra reikalo kartoti prie kiekvieno įrašo ar jų grupės, atributai pateikiami tik tada, kai duomenis gauna vartotojas. Tad pastovaus ilgio įrašai kompiuterio atmintyje turės žemiau pateiktas išraiškas: pav. 3.2. – 1 išraiška, pav.3.3. – 2, pav.3.4. – 3.

1. abc└┘22└┘366└┘481bcd└┘93└┘661└┘121cde└┘41└┘332└┘101.
2. ab└┘└┘└┘2└┘└┘64└┘453c└┘└┘└┘34└┘686└┘└┘33def└┘43└┘└┘└┘1└┘961.
3. ab└┘2└┘64└┘481└┘└┘└┘c└┘34└┘686└┘33└┘└┘└┘def└┘43└┘1└┘961└┘└┘.
Pav 3.5. Pastovaus ilgio įrašai kompiuterio atmintyje.
Pažymėtina, kad antruoju pastovaus ilgio įrašo atveju įrašo duomenis visada skiria protarpis └┘, o kiti protarpiai pateikiami tik tada, kai duomuo neturi maksimalaus ilgio.
Vieną duomenų failą gali sudaryti 1 bei 2 tipų įrašų grupės. 3 grupė neimtina į bendrą failą todėl, kad jos įrašai identiški 2 įrašų grupei, nes skiriasi tik dirbtinio duomenų pailginimo būdu.
Trečioji įrašų grupė pateikta kintamojo ilgio įrašais bus parodoma pav.3.6.

ab└┘2└┘64└┘481/c└┘34└┘686└┘33/def└┘43└┘1└┘961/.
Pav.3.6. Kintamo ilgio įrašai.

Pastovaus ir kintamo ilgio įrašai turi ir tam tikrų privalumų ir tam tikrų trūkumų.
Pastovaus ilgio įrašus, ieškant jų ir peržiūrint visus iš eilės, lengva rasti, nes kiekvieno jų pradžia (pradedant antruoju įrašu duomenų sankaupoje) yra už vienodo baitų skaičiaus. Suradus klaidingą įrašą, jį lengva pakeisti teisingu įrašu.
Pastovaus ilgio įrašų panaudojimo negatyvioji pusė pasireiškia tuo, kad neracionaliai naudojama kompiuterio atmintis. Kadangi visų įrašų ilgis yra formuojamas pagal maksimaliai įmanomo įrašo ilgį, tai praktiškai toks maksimalus įrašo ilgis pasitaiko retai. Didžioji dauguma įrašų yra žymiai trumpesni. Tad 40-70% atminties laukų lieka neužpildyti, arba užpildomi bereikšmiais simboliais.
Kita pastovaus ilgio įrašų naudojimo neigiama aplinkybė yra ta, kad ilgesnį laiką naudojant įrašus, jų maksimalus ilgis gali keistis. Jeigu ilgis sumažėja, tai kompiuterio atminties neracionalus panaudojimas dar labiau padidėja. Jeigu maksimalus ilgis padidėja, tai gali sutrikti normalus uždavinių sprendimo ritmas, kuriems tektų naudoti dviejų skirtingų ilgių įrašus. Tokiu atveju gali tekti įnešti į uždavinių sprendimo programas tam tikrų korektyvų, kad jos galėtų spręsti uždavinius su dviejų ilgių įrašais, arba sudaryti specialią programą, kuri suvienodintų duomenų sankaupų įrašų ilgius. Ir programų korektyvos ir specialios programos tam tikrais atvejais gali būti sudėtingos ir gali komplikuoti duomenų apdorojimo sistemos naudojimą.
Kintamo ilgio įrašų naudojimas, sprendžiant duomenų apdorojimo uždavinius, pastovaus ilgio įrašams būdingų trūkumų neturi. Todėl tokie įrašai leidžia stabiliau spręsti duomenų apdorojimo uždavinius. Tačiau yra ir neigiamų tokių įrašų naudojimo aspektų. Pirmiausiai būtinas skiriamasis ženklas tarp įrašų ( / ). Jeigu duomenis formuojant neįmanoma išvengti klaidų, tai tenka tas klaidas taisyti. Ištaisant klaidas, klaidingi įrašai keičiami į teisingus. Jeigu naujojo (teisingo) įrašo ilgis mažesnis už klaidingojo įrašo ilgį, tai duomenų sankaupoje susidaro tam tikros “skylės”, užpildytos bereikšmiais simboliais. Jeigu teisingo įrašo ilgis yra didesnis už koreguojamo įrašo ilgį, tai būtinas duomenų, einančių už šio įrašo, postūmis, kad teisingas įrašas tilptų. Jeigu teisingą įrašą galime įrašyti į duomenų struktūros pabaigą, tai tada neteisingo įrašo vietoje vėl liks nepanaudotos atminties laukas. Tad naudojant kintamo ilgio įrašus prireikia duomenų sankaupas persiuntinėti iš vienos atminties vietos į kitą.
Kitas kintamo ilgio įrašų naudojimo neigiamas aspektas yra tas, kad ieškant naujo įrašo, jo ilgį kiekvieną kartą reikia nustatyti programiniu būdu.
Pateiktais formatais, turinčiais pastovų arba kintamą ilgį įrašų failai arba masyvai praktiškai naudojami nesudėtingiems uždaviniams spręsti. Be to dažniausiai vieną masyvą ar failą naudoja vieno uždavinio programos. Apdorojus tą duomenų sankaupą, tie patys duomenys kitą kartą spręsti kitiems uždaviniams naudojami retai.
Sudėtingesniems duomenų apdorojimo uždaviniams spręsti, įrašai turi identifikatorius, kurie įgalina duomenimis naudotis ne vieną kartą, perimti reikiamą duomenų dalį ir jų sankaupas, išrinkti duomenis tam tikra eile, kuri nebūtinai sutampa su įrašų išdėstymo tvarka duomenų sankaupoje.
Vienu iš universalių įrašų pateikimo būdų gali būti reliacinė aibė, kuri aprašyta 2.2. poskyryje, turinti išraišką

.

Čia a, b, d yra įrašo identifikatorius, o cij atributų reikšmių lentelė:

c11 , c12 , ., c1n
c21 , c22 , ., c1n
———————————-
cm1 , cm2 , ., cmn

kai 1< i < m, 1< j < n.
Įrašais gali būti ir bet kurie reliacinių aibių kortežai (eilutės). Jie visada turi raktus, kurie juos identifikuoja. Suprantama, kad kortežų identifikatoriais yra atributų reikšmės. Todėl tokie identifikatoriai primityvūs, gali dažnai kartotis ir jų panaudojimas ribotas. Reliacinės aibės domenai (stulpeliai, grafos) įrašais negali būti sprendžiant sudėtingus duomenų apdorojimo uždavinius, nes jie negali turėti identifikatoriaus. Visi duomenys atributo domene yra to pačio atributo reikšmės.
Iki šiol nagrinėjant duomenų įrašus, buvo apsiribota dviem juos charakterizuojančiais faktoriais: įrašų ilgiu ir jo identifikatoriumi. Pagrindinėse šios knygos dalyse bus nagrinėjama duomenų prasmės bei turinio savybių įvairovė ir jų formalios išraiškos. Šiame skyriuje apsiribota tik įrašo ilgio ir identifikatoriaus įtaka duomenų apdorojimo procesui. Įrašo ilgio minimumas ir maksimumas turi tiesioginę įtaką kompiuterio vidinės – operatyvios ir išorinės atminties struktūros sudarymui.
Nuo atminties struktūros priklauso keletas svarbių duomenų apdorojimo charakteristikų: duomenų suradimo greitis, jų apdorojimo laikas ir kt.

3.1.2. Operatyvioji ir išorinė kompiuterio atmintis
Bendra ir operatyviosios ir išorinės kompiuterio atminties paskirtis yra įsiminti duomenis.
Kompiuterį išjungus operatyviojoje atmintyje esanti informacija (dažniausiai ) išsitrina, o išorinėje – išsaugoma. Tad tęsiant darbą, t.y. toliau apdorojant duomenis, bei daugeliu kitokių atvejų, tarp operatyviosios ir išorinės atminties vyksta keitimasis duomenimis. Tokį keitimąsi duomenimis atlieka sisteminės programinės priemonės, tad atrodytų, nėra reikalo į atminties sampratą gilintis, bet iš tikrųjų taip nėra ir galutinis vartotojas turi suvokti keitimosi proceso esmę. Vartotojo uždaviniai, kai konkretaus uždavinio duomenys visi telpa į operatyviąją atmintį ir kai netelpa, savo algoritmais labai skiriasi. Reikalingos specialios, dažnai kiekvienam uždaviniui skirtingos programinės pastangos, kad galima būtų apdoroti duomenis, kai jie visi į operatyviąją atmintį netelpa. Nežiūrint į tai, kad operatyvioji atmintis nuolat didinama, tobulėjant kompiuterių techniniai daliai, duomenų sankaupos irgi nuolat didėja. Be to, vis didesnę operatyviosios atminties dalį užima operacinės sistemos, bei kitos sisteminės programinės priemonės. Akivaizdžiu minėtojo reiškinio, kai vieno uždavinio duomenys telpa ir kai to pačio uždavinio duomenys netelpa į operatyviąją atmintį, gali būti duomenų įrašų rūšiavimas. Vėliau bus parodyta, kiek reikia papildomų ir gana sudėtingų procedūrų, kad būtų surūšiuoti įrašai, kai jie visi vienu metu į operatyviąją atmintį netelpa.
Operatyviosios ir išorinės atminties ypatumai išryškėja, kai jos lyginamos pagal kai kurias jų savybes. Tokios savybės yra:
– paskirtis;
– struktūra;
– talpa;
– duomenų įsiminimo greitis;
– įrašų išsidėstymas;
– įrašų paieška.
Operatyviosios atminties paskirtis – tiesiogiai dalyvauti duomenų apdorojimo procese. Tai reiškia, kad bet kurie pakitimai įvykstantys apdorojimo metu duomenyse fiksuojami operatyviojoje atmintyje, kad būtų galima toliau keisti, toliau juos apdoroti. Duomenų apdorojimo procese dalyvauja ir išorinė atmintis. Dalis tarpinių apdorojamųjų duomenų (dažniausiai, kai operatyviojoje atmintyje pristinga vietos), nenutraukiant apdorojimo proceso, atsimenama išorinėje atmintyje ir vėl pernešama į operatyviąją atmintį tolesniam apdorojimui. Pagrindinė išorinės atminties paskirtis- išsaugoti duomenis, kai dėl įvairiausių priežasčių duomenų apdorojimo procesas pertraukiamas. Pavyzdžiui, užbaigus spręsti duomenų apdorojimo uždavinį, atsimenami sprendimo rezultatai. Atsimenami tarpiniai duomenys, kai duomenys ilgesnį laiko tarpą kaupiami dalimis, kai duomenų apdorojimo procesas nutraukiamas sąmoningai – pasibaigus darbo dienai, užbaigus tam tikrą duomenų apdorojimo etapą ir t.t.
Operatyviosios atminties struktūrą pakanka suvokti, kaip homogeninį, t.y. vienalytį, vientisą duomenų vektorių. Jį sudaro simboliai, skaičiai, raidės, įrašyti į atminties baitus, kurie adresuojami natūriniais skaičiais (0, 1, 2, .). Visiškai nėra svarbu, kokio pobūdžio ar turinio duomenys įrašyti į atminties baitus: duomenys apie realius objektus, duomenų adresų baitai, programos ar kt. Išorinės atminties struktūra nėra vientisa. Ji turi tam tikrus atminties vienetus. Pavyzdžiui, diskinės atminties vienetu gali būti sektorius su fiksuotu – vienodu talpumu (256 baitai). Tad duomenų perkėlimas iš išorinės atminties į operatyviąją atmintį gali būti atliktas tik pilnais pirmosios vienetais (šiuo atveju sektoriais). Tik vėliau, programiniu būdu gali būti iš sektoriaus atskiriama ta duomenų dalis, kuri reikalinga sprendžiamam uždaviniui. Žinoma, nėra būtina, kad būtų imami tik iš eilės einantys sektoriai. Juos nesunku panaudoti bet kokia sprendžiamam uždaviniui reikalinga eile.
Jau iš ankstesnio šio skirsnio turinio aišku, kad operatyviosios atminties talpa mažesnė už išorinę atmintį. Be to keitimosi duomenimis ar duomenų įsiminimo greitis išorinėje atmintyje yra mažesnis už operatyviosios atminties greitį.
Duomenų įrašų išdėstymui išorinėje atmintyje ypač svarbų vaidmenį vaidina įrašų ir išorinės atminties vieneto ilgio (talpos) santykis. Kadangi išorinės atminties vienetai identifikuojami iš eilės einančiais natūriniais skaičiais, tai kai įrašo ilgis ir išorinės atminties vieneto ilgis sutampa, tada ieškoti įrašų lengva. Pakanka kreiptis į išorinės atminties vieneto eilės numerį. Praktikoje tokie sutapimai reti. Dažniausiai keli ar keliolika įrašų gali tilpti į vieną išorinės atminties vienetą, arba atvirkščiai, vienas įrašas apima du ar daugiau sektorių. Dviem pastaraisiais atvejais, jeigu įrašų ilgiai yra kintami, tai suprantama savaime, kad reikiamo įrašo paieška yra sudėtinga. Dažniausiai paieška atliekama išorinės atminties masyvus ar failus pernešus į operatyviąją atmintį pagal duomenų įrašų turinį.
Žemiau parodyti įrašo ilgių ir atminties vieneto didumo santykiai schematiškai.

Pav. 3.7. Įvairaus ilgio įrašai išorinėje atmintyje.

Kad įrašų paieška būtų sėkminga, t.y., kad būtų galima visus įrašus arba reikiamą jų dalį rasti greit, bei reikiama eile, pirmiausiai turi būti panaudoti efektyvūs duomenų failų bei masyvų sudarymo būdai.

3.1.3. Duomenų sankaupų sudarymo būdai ir įrašų paieška
Duomenų sankaupų sudarymo būdai reiškia duomenų įrašų sankaupose išdėstymą taip, kad duomenis apdorojančių uždavinių programos reikiamus įrašus galėtų efektyviai rasti. Efektyvus įrašų radimas reiškia, kad reikiami įrašai būtų randami tokiu greičiu, kad galėtų išspręsti uždavinį vartotojui reikiamu laiku ir sprendžiamas uždavinys netrukdytų kitų uždavinių savalaikio sprendimo. Prie efektyvaus įrašų radimo priskirtini ir kiti faktoriai: randamas reikiamas duomenų kiekis, reikiami įrašai ir jie pateikiami apdorojimui sprendžiamo uždavinio algoritmo nustatyta eile.
Duomenų sankaupų sudarymo metodai ir būdai priklauso nuo daugelio ir įvairių faktorių. Vienas iš pagrindinių faktorių yra kiek ir kokie uždaviniai sprendžiami, naudojant vieną ir tą pačią duomenų sankaupą. Jeigu sankaupos duomenims apdoroti sprendžiamas vienas ir tik vienas uždavinys, arba griežtai apribota uždavinių grupė (kuri gali būti traktuojama kaip tam tikra uždavinių sistema), tai duomenų įrašai į sankaupą surašomi naudojant tam tikrus būdus ir metodus, o duomenų sankaupos, kaip jau buvo nurodyta, vadinamos failais arba masyvais. Jeigu duomenų apdorojimui iš anksto nėra nustatytas uždavinių kiekis, be to tas kiekis gali keistis, tai duomenų organizavimo būdai ir metodai labai skiriasi nuo anksčiau paminėtųjų, o tokių duomenų sankaupa vadinama duomenų baze.
Toliau bus pateikiami duomenų sankaupų sudarymo būdai ir metodai bei aprašoma duomenų įrašų paieška. Šio skirsnio pabaigoje pateikiama duomenų bei jų adresų įvairių schemų iliustracija. Duomenų bazės organizavimo klausimai nagrinėjami atskirame 3.1.4. skirsnyje.
Metodus bei būdus, kurie naudojami duomenų sankaupos struktūrai sudaryti, lemia duomenų apdorojimo algoritmo asociacijos su pradinių duomenų įrašais.
Jeigu algoritmas toks, kad apdorojami įrašai visi ir paeiliui, tokia tvarka kokia jie buvo įsiminti, tai sankaupos struktūros sudarymo būdas trivialus. Iš probleminės srities imami įrašai (įvesti žmogaus, naudojant klaviatūrą, paimti iš įvairių techninių įrenginių daviklių, arba paimti iš kompiuterio atminties, kaip kitų uždavinių sprendimo rezultatai) ir be jokių papildomų veiksmų įsimenami visi iš eilės įvardintoje atminties vietoje. Šiuo atveju įrašai paprastai apdorojami ten, kur jie įrašyti, jeigu apdorojimo metu jie nėra pakeičiami ir jais vėliau nesinaudoja kitų uždavinių sprendimo programos. Analogiškai elgiamasi, jeigu vienos sankaupos duomenis naudoja dviejų ar kelių uždavinių sprendimo programos.
Bet yra atvejų, kai formuojant duomenų sankaupą racionalu duomenis suskirstyti sankaupoje į iš eilės einančius įrašus, kiekvienam uždaviniui atskirai.

Pav. 3.8. Pagrečiui ir atskirai įsiminti skirtingų uždavinių sprendimo pirminiai duomenys

Čia buvo pateiktas pats paprasčiausias duomenų sankaupos struktūros sudarymo būdas. Toliau, nekreipiant dėmesio į tarpinius struktūros sudėtingumo atvejus, nagrinėjamas praktiškai sudėtingiausias failų ar masyvų struktūros sudarymo ir suderinamumo su uždavinių algoritmais atvejis. Vieni duomenų sankaupos įrašai naudojami tik konkrečiam uždaviniui spręsti, o kiti keliems uždaviniams spręsti. Be to tie įrašai duomenų sankaupoje įsimenami tokia eile, kokia jie buvo gauti.

2 1 1 1,2,3 1 1,2 2,3 3 3 2 1 1,3 1 2 2 3 .
Pav. 3.9. Bendri bei skirtingi pradinių duomenų įrašai įvairiems uždaviniams spręsti

Pav. 3.9. parodyti įrašai, o prie jų nurodomi skaičiai reiškia, kokiems uždaviniams 1, 2 ar 3 spręsti jie naudojami. Suprantama, kad šie įrašai gali būti atskirti vienas nuo kito tik pagal savo turinį. Tai reiškia, kad jie gali būti identifikuojami pagal pareikšties veiksnio, požymių ar papildinių kodus, duomenų lentelių identifikatorius arba duomenų lentelių kortežų raktus. (žiūr. poskyrį 2.2). Tai priklauso nuo to, kas iš duomenų struktūroje konkrečiu atveju laikomas įrašas: pareikštis, lentelė ar kortežas.
Nagrinėjamuoju atveju, jeigu duomenų struktūra nėra didelė, t.y. jos daugkartinis pilnas peržiūrėjimas randant įrašus, turinčius kiekvienam uždaviniui kiekvieną reikiamą požymį, nesutrikdo pagrindinės sistemos darbo savalaikiu uždavinių sprendimo atžvilgiu, tai galima nesiimti jokių papildomų veiksmų duomenų paieškai pagerinti. Jeigu duomenų sankaupos pakankamai didelės ir gali trikdyti uždavinių sprendimą, tai būtinas vienoks ar kitoks metodas vienokiems ar kitokiems paieškos adresų laukams sudaryti.
Formuojant duomenų sankaupą, kiekvienas įrašas, kuris įrašomas į sankaupai skirtą atminties lauką, įgyja savo adresą. Tas adresas paprastai būna įrašo pirmojo simbolio atminties baito adresas. Tolesniame duomenų apdorojimo procese jau galima operuoti ne pačiais įrašais, o jų adresais. Tai ypač patogu, nes įrašas randamas iš karto, kai tik kreipiamasi į jo adresą.
Jeigu duomenims skirtas laukas pavadinamas A, adresai a, o įrašai Į, tai

A:

Pav. 3.10. Duomenų įrašų laukas

adresai surašomi į lauką B.

B: a1, a2, a3, a4, .
Prireikus įrašų, imami jų adresai ir iš karto randamas eilinis reikiamas įrašas.
Jeigu iš anksto pagal įrašų identifikatorius žinoma, kokiems uždaviniams kokie įrašai reikalingi, tai įrašų adresai grupuojami pagal uždavinius. Tai reiškia, kad įrašų adresai surašomi į atskiriems uždaviniams skirtus įrašų adresų laukus. Šiuose laukuose įrašų adresai gali ir kartotis. Tai reiškia, kad vienas ir tas pats įrašas panaudojamas ne vieno uždavinio sprendime, o ir tų uždavinių sprendime, kur jo adresas adresų lauke kartojasi.

1-jo uždavinio
įrašų adresų laukas B1 2-jo uždavinio
įrašų adresų laukas B2 . . .
a1 a2
a2 a4
a3 .
a4
.
Pav. 3.11. Duomenų adresų laukai

Jeigu kai kuriems uždaviniams spręsti reikalingi įrašai turi būti surūšiuoti pagal kokį nors požymį, pavyzdžiui, pagal identifikatoriaus didėjimą, tai į adresų lauką galima surašyti įrašus kartu su rūšiavimo požymiais ir tuos adresus surūšiuoti.
Jeigu

B: a16, a23, a31, a45, .

tai surūšiavus adresus pagal rūšiavimo požymių didėjimą gaunamas adresų laukas

B: a31, a23, a45, a16,.

arba tiesiog

B: a3, a2, a4, a1,.

Šitokio duomenų sankaupos paruošimo dažniausiai pakanka įvairiems duomenų apdorojimo uždaviniams spręsti, kai vienas ar keli uždaviniai turi “savą” t.y. jiems skirtą pradinių duomenų sankaupą. Bet galimi ir tokie atvejai, kai paminėtieji duomenų sankaupos organizavimo būdai nėra efektyvūs. Tai gali atsitikti, jeigu pirminius duomenis tenka dėl klaidų ar kitokių priežasčių koreguoti ir duomenų įrašai pailgėja. Tada už koreguoto įrašo esančių įrašų adresai eilutėje pasikeičia tiek kartų, kiek kartų koreguojami įrašai jiems pailgėjant. Adresų pasikeitimas reiškia, kad tam tikra sankaupos įrašų dalis perkeliama į kitą atminties vietą. Suprantama, kad turi keistis ir uždaviniams skirtų įrašų adresų laukų turinys. Pastarieji pakeitimai gali turėti gana sudėtingą algoritmą, jeigu prieš tai adresų laukai buvo perrūšiuojami ar kaip kitaip keičiami. Reikia turėti omenyje ir tai, kad pastarieji duomenų sankaupų organizavimo būdai, kaip anksčiau jau buvo minėta, taikomi tik tada, kai adresų sankaupos yra sąlyginai didelės. Schematiškai adresų pasikeitimus galima išreikšti taip, kai paprastumo dėlei imama tik vieno įrašo korekcija jį pailginant. Tegu duotas įrašų laukas A

Adresų laukas B1 pirmajam uždaviniui surūšiuotas-

B1: a2, a5, a3, a4, a1, .,

o adresų laukas B2 antrajam uždaviniui jokio surūšiavimo nereikalaus-

B2: a1, a2, a3, a4 , a5,. .

Tegu dėl klaidos koreguojamas įrašas I2 pailgėja trimis baitais. Tada kitų įrašų, esančių už šio įrašo, t.y. įrašų, kurių adresai didesni už adresą a2, adresai pasikeičia irgi trimis baitais:

a3 + 3, a4 + 3, a5 + 3.

Duomenų sankaupos dalis nuo adreso a3 iki sankaupos pabaigos turi būti pernešta į dešinę per 3 baitus.
Adresų lauko B1 adresų korekcija nesunki:

B2: a1, a2, a3 +3, a4 +3 , a5 +3.

Lauką B2 koreguoti galima įvairiai, bet visais atvejais koregavimo algoritmas sudėtingesnis, nes reikia nustatyti kiekvieno adreso ankstesniąją vietą, t.y. ar jis buvo prieš koreguojamąjį adresą ar po jo. Jeigu adresų lauko adresų eilė buvo keista sudėtingiausiais būdais, pavyzdžiui rūšiuota pagal tam tikrus šablonus, tai adresų algoritmas sudėtingėja, nes turi būti kiekvieną kartą adresų keitimo algoritme įvertintas ir šablono sudarymo būdas.
Iš viso to, kas padaryta aiškiai matyti, kad esant daugeliui korekcijų ir didelėms duomenų sankaupoms duomenų apdorojimo uždavinių sprendimo laikas gali neleistinai pailgėti ir trukdyti sistemos darbą, Tad racionaliausia duomenų sankaupą naudoti tik vieno uždavinio sprendimui, o ta sankaupa sudaroma tik tam uždaviniui ir to pačio uždavinio programomis arba, jei tai tikslinga, naudotis duomenų baze bei jos duomenų organizavimo būdais. Iki šiol nagrinėti duomenų sankaupų apdorojimo būdai turi keletą svarbių ir tik jiems charakteringų bruožų. Todėl, prieš pereinant prie duomenų bazių organizavimo principų pateikimo pravartu susipažinti su minėtais dalykais. Tai įgalina suvokti principinius duomenų sankaupų ir duomenų bazių skirtumus, jų pranašumus bei neigiamus aspektus tam tikruose duomenų apdorojimo sistemos situacijose.
Duomenų apdorojimui sankaupose charakteringa tai, kad:
– tarp sankaupos struktūros ir turinio bei programų, kurios apdoroja toje sankaupoje esančius duomenis, egzistuoja stabilūs abipusiai ryšiai;
– duomenų apdorojimo sistemos sudėtingose duomenų sankaupose kartojasi dalis pradinių duomenų;
– apdoroti duomenys, kaip taisyklė, kitiems duomenų apdorojimo uždaviniams spręsti nebenaudojami, nes toks apdorojimas neįmanomas arba labai komplikuotas.
Stabilūs abipusiai ryšiai tarp duomenų ir juos apdorojančių programų atsiranda todėl, kad tos pačios apdorojimo programos sukuria pradinių duomenų struktūrą, kontroliuoja tų duomenų patikimumą, tikslumą, pilnumą, šalina pastebėtas klaidas ir koreguoja duomenų sankaupą prieš tikslinio apdorojimo pradžią. Taip yra todėl, kad konkreti duomenų sankaupa skirta vienam ir tik vienam duomenų apdorojimo uždaviniui spręsti. Taigi, dėl išorinių pokyčių duomenų struktūroje, būtina keisti ir apdorojimo programas. Atvirkštinis ryšys taip pat egzistuoja. Prireikus kitaip apdoroti duomenis, dažnai prireikia ir kitaip organizuoti duomenų sankaupą, papildyti ją naujais duomenimis ir t. t. Tokie duomenų ir programų keitimai paprastai reikalauja daug laiko ir materialinių sąnaudų. Tad tokioje aplinkoje, kur probleminė sritis nestabili (gali dažnai keistis duomenys ir apdorojimo algoritmai) tiesioginį duomenų sankaupos apdorojimo būdą taikyti netikslinga.
Vieno objekto automatizuotos informacinės sistemos duomenų apdorojimo uždavinių skirtingų posistemių duomenų sankaupose dalis duomenų gali kartotis. Pavyzdžiui, praktiškai neįmanoma išvengti, kad prognozavimo, planavimo ir apskaitos uždavinių duomenų sankaupos neturėtų dalies tų pačių duomenų. Kadangi duomenų apdorojimas tiesioginis, tai neegzistuoja jokios sisteminės priemonės, kad vieno uždavinio programos galėtų pasinaudoti kito uždavinio duomenų sankaupa. Galutinį vartotoją paprastai domina tik uždavinių sprendimo rezultatai, bei jų įvairios interpretacijos, kurios gali būti gaunamos irgi automatizuotai ir tokiu pat tiesioginiu būdu. Tiesioginis duomenų apdorojimo būdas minėtu atveju, kai dalis pradinių duomenų skirtingose duomenų sankaupose pasikartoja, gali turėti negatyvių pasekmių.
Pasikartojančius, t.y. vienus ir tuos duomenis, kurie reikalingi įvairiems uždaviniams spręsti praktiškai neįmanoma susieti taip, kad jų pasikartojimas būtų fiksuotas automatiškai, nes kiekvienas iš uždavinių šiuo atveju sprendžiamas autonomiškai. Visiškai įmanoma tokia situacija, kad klaidingus duomenis (iš tų, kurie kartojasi kitiems uždaviniams spręsti skirtose sankaupose) gali aptikti tik kai kurių uždavinių sprendimo algoritmai. Pavyzdžiui, sprendžiant apskaitos uždavinius, klaidingus duomenis galima pastebėti sprendžiant tokius pat uždavinius už praeitą laiko periodą. Suradus klaidas jos ištaisomos ir gali būti iš naujo persprendžiami ir praeito laiko periodo kai kurie apskaitos uždaviniai. Bet ne visada įmanoma surasti ir perspręsti kitose duomenų posistemėse jau panaudotus klaidingus duomenis. Pavyzdžiui, prognozavimo uždavinių posistemėje. Tad prognozavimo uždaviniai gali duoti ypač netikslius sprendimų rezultatus, kurie išaiškėja tik gerokai vėliau, nes paprastai apskaitos uždavinių sprendimo periodas yra žymiai trumpesnis nei prognozavimo uždavinių sprendimo periodas.
Tad vienoje informacinėje sistemoje tarp savęs nesusietų programiškai ir algoritmiškai sprendžiamų uždavinių rezultatai gali būti ne tik netikslūs, bet ir prieštaringi vieni kitiems. Didele dalimi šitokių pasekmių išvengiama, jei naudojamos duomenų bazės panašiems uždaviniams, kurie buvo minėti, sprendimui.

3.1.4. Duomenų bazės
Duomenų bazė tai tarp savęs susietų duomenų rinkinys, kuriuo gali naudotis daugelis programų įvairiems duomenų apdorojimo uždaviniams spręsti. Duomenų pateikimą uždavinių sprendimo programoms atlieka duomenų bazių valdymo sistema.
Iš šio duomenų bazės apibrėžimo matyti, kad:
– duomenų bazėje kaupiant duomenis kontroliuojamas jų teisingumas, pilnumas, atliekamos korekcijos, nepriklausomai nuo duomenų apdorojimo uždavinių bei jų programų;
– atsiradus naujiems uždaviniams, kai jų sprendimui trūksta duomenų, duomenų bazė papildoma naujais duomenimis irgi tiesiogiai nepriklausomai nuo naujųjų uždavinių, bet taip, kad korektiškų duomenų užtektų naujų uždavinių sprendimui.
Duomenų bazės organizavimo ir naudojimo tikslai – išvengti tų negatyvių duomenų apdorojimo reiškinių, kurie aprašyti praeitame 3.1.3. skirsnyje apdorojant duomenų sankaupas. Visų pirma tai:
– duomenų bazėje žymiai lengviau išvengti duomenų dubliavimo, nes pagal konkrečios bazės organizavimo principus duomenys vienaip ar kitaip identifikuojami, todėl tuos pačius identifikatorius ir reikšmes turintys duomenys į bazę nebeįrašomi, kaip neturintys prasmės, nes jau kartoja tą pačią prasmę;
– duomenų apdorojimo uždavinių (taikomųjų uždavinių) programoms, kaip jau buvo minėta, nereikia rūpintis duomenų kaupimo problemomis, bet reikia pagal konkrečios duomenų bazės reikalavimus paruošti kreiptį (tam tikrą programą) į duomenų bazę, kad būtų gauti reikiami duomenys.
Kita vertus, duomenų bazių sistema turi ir esminių negatyvių dalykų. Pirma, kadangi duomenys tiesiogiai neorientuoti į konkrečius uždavinius, tai dalis duomenų retai naudojami, t.y. jie dinamiškai neaktyvūs, bet jie keičiasi, todėl visą duomenų bazę, o taip pat ir retai naudojamus duomenis reikia nuolat palaikyti aktualioje būsenoje. Tai be jokios abejonės susiję su papildomomis, kartais didelėmis materialinėmis ir darbo sąnaudomis. Antra, koreguojama arba aktualinama duomenų bazė ir ta dalis, kuri retai naudojama, neįmanoma prognozuoti ar ji iš viso bus kada nors ateityje naudojama. Mat nauji duomenų apdorojimo uždaviniai gali ne tik atsirasti, bet ir senieji gali pranykti. Tad sunku vartotojui tik iš savo patirties nustatyti, kurie duomenys nebereikalingi, kurie dar dalinai bet retai reikalingi. Reikalingi, bet bazėje nesantys duomenys visada nustatomi ir labai lengvai naudojant duomenų bazės valdymo ir kreipčių į bazę programas. Kreipčių programa tuoj po jų darbo pradžios nurodo, kad joms reikalingų duomenų bazėje nėra, nes tolesnis jos darbas neįmanomas.
Paminėtieji duomenų bazių neigiami panaudojimo aspektai taikytini bendrojo pobūdžio duomenų bazių valdymo sistemų kuriamoms bazėms. Jeigu duomenų bazių valdymo sistemos numatytos tam tikroms duomenų bazėms arba uždavinių klasėms, tai konstatuotina, kad daugelis neigiamų bazių panaudojimo aspektų gali būti lokalizuoti, t.y. neturėti apčiuopiamos įtakos duomenų apdorojimo procesui.
Duomenų bazių valdymo sistemų sukurta labai daug, tiek bendrojo pobūdžio, tiek specializuotųjų. Toliau bus pateikti tik kai kurie bendri duomenų bazių sudarymo būdai, kurie parodys principinę galimybę:
– kaip sudaromi duomenų įrašų sąrašai, įgalinantys iš duomenų bazės išrinkti visus reikiamus taikomajam uždaviniui duomenis;
– kaip galima išvengti arba sumažinti vienų ir tų pačių įrašų pasikartojimo duomenų bazėje.
Duomenų įrašu gali būti duomenų lentelė, lentelės kortežas, atskira pareikštis (žiūr. 2.2) arba joms adekvačios struktūros. Svarbiausia, kad įrašas būtų vienareikšmiškai identifikuotas su išreikštais paieškos požymiais t.y. įrašo duomenų savybių kodais. Tokiu ir tik tokiu atveju galima surasti reikiamus įrašus, turinčius vienokias ar kitokias taikomajam uždaviniui reikalingas savybes.
Tegu turime n skirtingų duomenų savybių ir du atminties laukus. Lauke A užrašomi visi iš eilės (pateikimo eile) duomenų bazei skirti įrašai. Kiekvienas įrašas, patekęs į duomenų bazę, turi savo vietos joje adresą. Tad toliau tas įrašas identifikuojamas jo adreso skaitine ar simboline reikšme. Įrašų adresai atsimenami lauke B pagal įrašų požymius. Lauko B dalyje B1 atsimenami adresai tų įrašų, kurie turi požymį 1, lauko B dalyje B2 – adresai įrašų, turinčių požymį 2 ir t.t. Tad lauke B įrašų adresai surūšiuojami pagal jų požymius.

B: B1, B2, B3, . , Bn A: a1___a2_______a4_____

a1 a5 a2 a6 a4_________a5________

a3 . . . a6___a7________ .

a4 . . .

. . . .
Pav. 3.13. Duomenų įrašai ir pagal požymius surūšiuoti jų adresai

Šitaip organizuota duomenų bazė yra primityvios struktūros ir praktiškai nenaudotina, bet ji iliustruoja duomenų bazių organizavimo principą – duomenų kaupimo kompiuteryje atskyrimą nuo duomenų apdorojimo uždavinių bei jų programų. Be to, nagrinėjant šios struktūros duomenų bazę galima suvokti keletą tipų skirtingų taikomųjų uždavinių bei atskirti kai kuriuos sisteminius duomenų reorganizavimo principus.
Naudojantis šia duomenų baze akivaizdus taikomųjų uždavinių sprendimo algoritmas, kai:
– taikomųjų uždavinių pradinius duomenis sudaro įrašai, turintys vieną ar kelis požymius;
– kai taikomieji uždaviniai, kaip pradinius duomenis, naudoja dalį vienodo požymio įrašų.
Prie duomenų bazės reorganizavimo uždavinių priskirtini:
– duomenų koregavimo uždaviniai;
– duomenų dalinio dubliavimo išvengimo uždaviniai;
– duomenų bazės peradresavimo ir racionalizavimo uždaviniai.
Tie taikomieji uždaviniai, kurių pradinius apdorojimo duomenis sudaro tik vieno požymio įrašai, turi paprastą kreipties struktūrą į duomenų bazę. Pagal konkrečios duomenų bazės valdymo sistemos reikalavimus, nurodomas duomenų požymis ir to pakanka kreipčiai realizuoti. Nedaug sudėtingesnė kreiptis ir tada, kai taikomajam uždaviniui reikalingi ne vieno požymio duomenys. Tuo atveju nurodomi požymiai ir bet kokia uždaviniui reikalingo įrašų pagal požymius eile. Žymiai sudėtingiau kreiptis į duomenis, kada kai kurių požymių ne visi įrašai reikalingi taikomajam uždaviniui. Šiuo atveju iškviečiami visi duotojo požymio įrašai, o reikiamus įrašus turi atsirinkti pačios taikomąjį uždavinį realizuojančios programos.
Įrašų koregavimo procedūras atlieka duomenų bazės valdymo sistema. Aptikus klaidingą įrašą atliekama procedūra, kuri analogiška duomenų įvesties į bazę procedūrai. Jeigu naujasis teisingas įrašas trumpesnis arba ilgiu lygus senajam klaidingam įrašui, tai suradus įrašą senasis pakeičiamas nauju įrašu. Jeigu lieka senojo įrašo vietos, ji užpildoma specialiais simboliais, kurie reiškia, kad tokio lauko vieta tuščia. Tuščios vietos pirmasis adresas atsimenamas lauke B, to lauko adrese Bn+1. Jeigu įrašas į senojo įrašo vietą netelpa, elgiamasi visiškai taip pat, lyg būtų naujasis įrašas trumpesnis už senąjį. Užpildžius senojo įrašo vietą specialiais simboliais, jo adresas ir požymio adresų grandinėlės pernešamos į B lauko vietą Bn+1, o pats naujas įrašas užrašomas į A lauko pabaigą įrašius naują adresą į senojo adreso vietą. Tad jeigu egzistuoja tuščių įrašų vietų grandinėlė, eilinį įrašą, kuris įrašomas į lauką A, pirmiausiai bandoma įterpti į tuščius įrašų laukus, o tik nė viename netilpus, jis įrašomas A lauko įrašų pabaigoje, atitinkamame požymio adresų lauke atsimenant jo adresą.
Kad išvengti įrašų dubliavimo, įrašų adresų esančius to paties požymio adresų grandinėlėje turiniai sulyginami su naujojo įrašo turiniu. Sutampantis įrašas su bent vienu kitu įrašu į duomenų bazę neužrašomas. Nežiūrint į tai, visiško duomenų dubliavimo išvengti praktiškai labai sunku. Jeigu duomenų lentelėje, arba lentelės duomenų korteže, kaip savarankiškuose įrašuose nors viena atributo reikšmė skiriasi nuo kito įrašo atributo reikšmės, šie įrašai traktuojami, kaip klaidingi įrašai. Bet kitos tą patį reiškiančios atributų reikšmės gali dubliuotis. Visiškai išvengiama dubliavimo, jeigu įrašu laikome pareikštis, arba vieno identifikuoto atributo reikšmė. Bet pastarasis duomenų organizavimo būdas reikalauja žymiai didesnių duomenų bazių A ir B laukų, bei žymiai pailgina duomenų paraišką.
Praėjus tam tikram duomenų bazės eksploatacijos laikui, laukuose A ir B vis daugiau randasi nepanaudotų vietų. Taigi, pati bazė neracionaliai didėja tuščių vietų apimtimi, o duomenų įvesties bei paieškos procedūros ilgėja. Paprastai duomenų bazės turi sistemines bazės “suspaudimo” programines priemones. Pastarosios pašalina “tuščios”duomenų bazės lauko vietos ir nustato naujus duomenų adresus, bei juos atsimena lauke B pagal įrašų požymius.
Praktikoje naudojamų duomenų bazių struktūra žymiai sudėtingesnė už čia aprašytosios bazės struktūrą.
3.2. Duomenų ir programų ryšiai
Šiame poskyryje aprašomi duomenys, kurie suprantami kaip apdorojimo objektas, o programos kaip duomenis apdorojančios priemonės.
Ryšių tarp jų nagrinėjamas atliekamas, kai ir vieni ir kitos yra kompiuterio operatyviojoje atmintyje. Ryšius tarp duomenų ir programų galima suskirstyti į formalius ir priežastinius arba semantinius ryšius.
Formaliems ryšiams tarp duomenų ir programų priskiriami tokie ryšiai, kurie tiesiogiai nepriklauso nuo programų atskirų komandų bei jų rinkinių, o taip pat nuo duomenų struktūros bei jų turinio.
Priežastiniai ryšiai tai tokie ryšiai, kurių realizacijos tikslas yra duomenų apdorojimas ir kitų – rezultatinių duomenų gavimas, t.y. taikomojo pobūdžio uždavinio sprendimas.
Jau praėjo keli dešimtmečiai, kai taikomosios programos kompiuterio atmintyje dirba spręsdamos uždavinį ne vienos. Dabar joms talkina gausi ir sudėtinga sisteminė programinė įranga. Šioje knygoje sąmoningai apie sisteminę programinę įrangą daug neužsimenama, nes programavimo sampratų pradmenų lygmenyje pakanka taikomąjį uždavinį traktuoti taip, lyg tai jo programos visiškai ir viską darytų pačios, sprendžiant uždavinį. Kita vertus, jau dabar galima pateikti bendriausią ir esminę sisteminės programinės įrangos sampratą. Tegu turime pakankamai didelį taikomųjų programų, t.y. tokių programų. kurios sprendžia pakankamai daug ir skirtingų galutinio vartotojo uždavinių, paketą. Tegu kiekvienas uždavinys sprendžiamas visiškai savarankiškai. Tai reiškia, kad pati programa valdo išorinius ir vidinius kompiuterio įrenginius, rūpinasi duomenų korektiškumo kontrole, įvairiausiomis korekcijomis, jų įsiminimu, įvestimi, išvestimi ir kt. Taigi, be gilesnės analizės ir gilesnio susimąstymo matyti, kad viena vertus daugelis programinių darbų kiekvienoje visiškai savarankiškoje programoje kartojasi. Kita vertus, sprendžiant daugelį uždavinių, būtinas sprendimų, duomenų įsiminimų tarpusavio derinimas, kad duomenys vieni kitą neužtrintų ar apskritai uždaviniai netrukdytų vienas kito sprendimui. Tad programinė įranga, kuri yra bendra visoms gausioms ir skirtingoms taikomosioms programoms gali būti atskirta, susisteminta, taikant įvairią ir sudėtingą metodologiją bei metodiką, o taikomajai programai paliekama tik tikslinės uždavinio funkcijos realizacija. Tokia bendroji programinė įranga vadinama sistemine programine įranga. Apie ją bus užsiminta toliau šioje knygoje.
Galutinio vartotojo programinė įranga gali būti suskirstyta į tipinę įrangą ir specialiąją programinę įrangą. Tipinė programinė įranga apima bendrojo pobūdžio uždavinius, kurie plačiai, arba net labai plačiai paplinta. Pavyzdžiui, šiuolaikinis programinis projektas Word, t.y. tam tikra rašomoji mašinėlė. Specialioji programinė įranga skirta konkrečios institucijos, moksliniam, gamybiniam ar kitokiam originaliam projektui realizuoti

3.2.1. Formalūs duomenų ir programų ryšiai
Formalūs duomenų ir programų ryšiai pirmiausiai nagrinėtini tokiais aspektais:
– duomenų bei programų išdėstymo įvairovė vienas kito atžvilgiu kompiuterio atmintyje;
– adresiniai duomenų ir programų ryšiai;
– duomenų kodavimai bei perkodavimai;
– fiziniai diskretūs kompiuterio elementai bei dvejetainiai kodai.
Kai kompiuterio atmintyje sprendžiamas vienas uždavinys ir tą sprendimą realizuoja viena programa, tai programos fragmentai ir apdorojamų duomenų laukai gali būti išdėstyti vienas kito atžvilgiu labai įvairiai. Jeigu duomenų laukai pažymimi d = d1, d2, d3, ., o programos fragmentai – p = p1 , p2 , p3 , ., tai programos fragmentai ir duomenų laukai tolygiame (be trūkių, kuriuos užima kitokie duomenys ar programos) atminties lauke gali būti:

p1 , p2 , p3 , ., d1 , d2 , d3 , .
p1 , d1 , p2 , d2 , p3 , d3, , .
– – – – – – – – – – – – – – – – – – – –
d1 , d2 , d3 , ., p1 , p2 , p3 , .

Sudėtingiau yra išdėstyti tarpinius uždavinio sprendimo duomenis t bei rezultatinius duomenis r. Toli gražu ne visada įmanoma t ir r rašyti į kai kurių d t.y. pradinių duomenų vietą. Pirmiausiai tai ne visada įmanoma iš anksto nustatyti, ar t ir r į d vietą tilps, o antra, daugeliui uždavinių iki sprendimo pabaigos išlieka reikalingi pradiniai duomenys. Tokiu atveju tarpiniai ir rezultatiniai duomenys užrašomi į pradinių vietą, pastaruosius sunaikinant. Jeigu operatyvioji atmintis pakankamai didelė, tai minėtosios problemos sprendžiamos formaliai ir paprastai. Po programų ir pradinių duomenų skiriama pakankamo dydžio atminties vieta tarpiniams ir rezultatiniams duomenims:

p, d, t, r.

Čia privalu pabrėžti, kad, nežiūrint į didelę šiuolaikinę operatyviąją atmintį, jos trūkumas visada išlieka, nes visų pirma tobulėja ir didėja bendrųjų ar sisteminių programų kiekis, antra, daugėja uždavinių, kurie užima ypač didelius atminties laukus. Tai įvairūs paveikslai, brėžiniai, žemėlapiai ir kt.
Suprantama, kad pritrūkus operatyviosios atminties, programa lengvai išsiverčia dalį savo pačios fragmentų ir duomenų laukų laikydama išorinėje atmintyje. Ir programos fragmentai ir duomenų atskiri laukai į operatyviąją atmintį išsikviečiami tik jų prireikus. Pasinaudojus jais, pagrindinis programos fragmentas juos keičia kitais programų fragmentais ir duomenų laukais. Bet tada, savaime suprantama, kad uždavinio bendrasis sprendimo laikas pailgėja.
Situacija operatyviojoje atmintyje darosi sudėtingesnė, jeigu sprendžiamas ne vienas, o keli uždaviniai vienas po kito arba dalimis, t.y. lygiagrečiai. Tai ne dirbtinis dalykas, o tokio uždavinių sprendimo reikmė iškyla tada, kai vienas ar keli uždaviniai naudojasi, kaip savo pradiniais duomenimis, kitų uždavinių tarpiniais arba galutiniais, t.y. rezultatiniais duomenimis. Daugiau nesigilinant į sudėtingesnius ryšius tarp programų ir duomenų konstatuosime, kad visais atvejais tie ryšiai formalūs ir tiesiogiai nesietini su duomenų semantika. Visa tai, kas pasakyta iki šiol šiame skirsnyje skirta formalaus manipuliavimo adresais įvairiuose duomenų formatuose ieškant reikiamų duomenų iliustravimui, kai duomenys, priklausomai nuo situacijos, operatyviojoje atmintyje gali nuolat keisti savo buvimo vietą, beje, kaip ir pačios programos tą vietą gali keisti.
Adresiniai duomenų ir programų formalūs ryšiai sudėtingi, nes fiziškai, kiekvienam duomenų apdorojimo tomis pačiomis programomis ir programos ir duomenys privalo galėti būti vis kitoje operatyviosios atminties vietoje. Tai nulemia vis kitokia bendroji situacija operatyviojoje atmintyje, nes nuo nedidelių pasikeitimų, t.y. vis kitoniškų panaudojimų, keičiasi bendrosios programinės įrangos konfigūracija kaip operatyviojoje taip ir išorinėje atmintyje. Taigi, adresinis ryšys tarp programų ir duomenų yra kiekvienam duomenų apdorojimui programų ir jų komandų buvimo atmintyje vietos naujų adresų nustatymas, bei komandų adresų nustatymas pagal esamą duomenų padėtį operatyviojoje atmintyje. Šis duomenų ir programų adresų nustatymas dažniausiai vadinamas saitų redagavimu ir bus smulkiau pateiktas vėlesniuose poskyriuose.
Dažniausiai pasitaikantis programos saitų redagavimas atliekamas pradedant nuo to, kad nedirbanti programa, įsiminta išorinėje atmintyje laikoma suredaguota pagal nulinį operatyviosios atminties adresą. Tai reiškia, kad pirmosios programos komandos pirmojo operando pirmojo baito adresas yra nulis.
Tegu turime paprasčiausią komandą OP R1 R2, kur OP – operacijos kodas,o R1 ir R2 – registrai arba operandai.

Baitai
OP R1, R2
Bitai 0 7 8 11 12 15
Atminties adresai 0 1 2 3
Pav. 3.14. Pradinė komandų adresacija
Iš šio atvaizdavimo operatyvinėje atmintyje matyti, kad komandos operacijos kodas užima vieną pirmąjį baitą ir yra adrese nulis.
Jeigu komandos nesusietos su perėjimu į kitą operatyvinės atminties vietą, peržengiant vieną ar daugiau komandų, tai jos vykdomos iš eilės viena po kitos. Jeigu pereinama į kitą ne iš eilės einančią komandą, tai turi būti nurodytas tos komandos, į kurią pereinama, adresas viename iš operandų tos komandos, iš kurios pereinama. Tas adresas nurodomas atsižvelgiant į nulinę visos programos pirmojo adreso reikšmę. Jeigu programa pakviečiama vykdymui į operatyvinę atmintį ne nuo nulinio jos adreso, tai pirmasis adresas saitų redaktoriaus pakeičiamas tuo adresu, į kurį pakviesta programa. Kiti perėjimo komandų į kitas komandas adresai sudedami su pirmojo adreso skaitine reikšme ir tuo komandų adresų saitų redagavimas užbaigiamas. Būtina griežtai skirti valdymo perdavimo komandų adresus nuo komandų adresų, kurie formuojami jų operandų elementuose ir nurodo mašininius duomenų sankaupų ar dalių bei laukų adresus. Tų adresų saitų redagavimas visiškai kitoks nei komandų.
Prisiminkime, kad duomenys, kuriuos programa turi apdoroti, gali būti įsiminti operatyvinėje atmintyje tarp tos programos atskirų dalių, visos programos pabaigoje arba pradžioje, ar būti “nutolę” nuo programos. Tai reiškia, kad, pastaruoju atveju, tarp programos ir duomenų yra tuščių atminties laukų arba kitų programų, arba kitų programų duomenų. Visais atvejais naudojamas universalus bazinio adreso ir slinkio metodas duomenų vietai (mašininiam adresui) operatyviojoje atmintyje nustatyti. Norint nustatyti duomenų sankaupos adresą arba reikiamo kintamo ilgio žingsniu (išreikštu baitų skaičiumi) eiti per duomenų sankaupą, nurodant mažesnių duomenų sankaupos dalių adresus. Šie klausimai detaliau buvo pateikti nagrinėjant dvejatainį programavimą su kintamu komandų ilgiu baitais kompiuterio atmintyje.
Šio skirsnio pradžioje buvo nurodoma, kad prie formalių duomenų ir programų ryšių priskirtini ir duomenų kodavimai ir perkodavimai į tokias duomenų kodavimo sistemas, kad programos galėtų atpažinti įvairius simbolius, bei skaitmenis, kuriais išreiškiami duomenys.
Jau 1.4 poskyryje buvo trumpai minėta, kad vienų ir tuo pačių duomenų simbolių ir skaitmenų dvejetainiai kodai gali būti įvairūs bei skirtingi. Svarbu, kad diskrečių kompiuterio elementų vidiniai kodai sutaptų su duomenų kodais. Pavyzdžiui, visiškai nesvarbu, kaip vienetas (skaičius) išreikštas dvejetainiu vienetu 0000 0001 ar kokia nors kitokia dvejetainė kombinacija baite, bet kompiuterio elementų sistema turi galėti jį pažinti, kaip vienetą. Jeigu taip nėra, tai duomenys turi būti perkoduojami. Viename ir tame pačiame kompiuteryje skirtingi įrenginiai gali turėti nevienodus vidinius duomenų kodus. Todėl akivaizdu, kad duomenų kodai tik formaliai išreiškia duomenis ir tik formaliai pagal kodus programa atpažįsta duomenis.
Formalūs duomenų perkodavimai gali būti labai įvairūs, bet jų mechanizmai nėra sudėtingi. Žemiau pateikiami perkodavimo pavyzdžiai. Tegu turime dviejų anksčiau paplitusių kodavimo sistemų ASCII (American Standart Code for Information Interchange) ir EBCDIC (Exspanded Binary Code Decimal Interchange Code) fragmentus.

Simbolis ., C, D, E, ., K, L, M, ., 1, 2, 3, ., /, &, .
ASCII ., A3, A4, A5, ., AB, AC, AD, ., 51, 52, 53, ., 4F, 46,.
EBCDIC ., C3, C4, C5, ., D2, D3, D4, ., F1, F2, F3, ., 61, 50, .
Pav. 3.15. Kai kurių simbolių ir skaičių dvejetainės reikšmės skirtingose kodavimo sistemose

Perkoduojant iš kodavimo sistemos ASCII į sistemą ABCDIC, ASCII šešioliktainiai kodai traktuojami kaip perkodavimo lentelės baitų eilės numeriai, o BCDIC kodai įrašomi į lentelės vietą , atitinkančią tą patį simbolį ar skaičių, esantį nurodytoje lentelės vietoje. Aiškiau perkodavimai pateikiami 3.16 pav. ir 3.17 pav..
3.3.2 Priežastiniai duomenų ir programų ryšiai
Šio skirsnio tikslas – atskleisti priežastinių ryšių tarp duomenų ir juos aptarnaujančių programų esmę bei įvairovę.
Tų dalykų žinojimas įgalina vieną ir tą patį duomenų apdorojimo uždavinį spręsti racionaliau. Tai reiškia, kad duomenų struktūra (išdėstymas) būtų atliktas taip, kad apdorojimo programa būtų įmanomai paprastesnė ir prireikus lengviau pakeičiama ar patobulinama, kad duomenų apdorojimo procesas reikalautų minimalių tam uždaviniui kompiuterinio sprendimo laiko ir atminties resursų.
Dalykinėje – probleminėje srityje, kaip parodyta pav. 3.18, priežastiniai ryšiai tarp programų ir duomenų yra netiesioginiai. Tokių ryšių tarpininkas yra algoritmas, kurio realizacija sukuria programą ir tokiu būdu nustatomi tiesioginiai priežastiniai ryšiai tarp duomenų ir programos. Netiesioginių ryšių egzistavimas nekelia abejonių todėl, kad nuo algoritmo vienokio ar kitokio sudarymo priklauso jo programinės realizacijos ypatybės ar savitumai. Iš esmės tai ikikompiuteriniai priežastiniai ryšiai, net tuo atveju, jeigu duomenys formuojami į tam tikrą struktūrą ir kompiuteriu, dėl to, kad tik vėliau būtų pateikti apdoroti algoritmą realizavusiai programai. Pav. 3.18 pavyzdyje, dešinėje vertikalios punktyrinės linijos pateikiama, tiesioginių priežastinių ryšių tarp duomenų ir juos apdorojančios programos schema. Joje atsispindi ir priežastinių ryšių rūšys arba tam tikros sąlyginai savarankiškos viena nuo kitos tų ryšių grupės.

ASCII kodai, kaip iš eilės einantys 16-niai skaičiai
0016,.,4616,.,4F16,., 5116, 5216, 5316,., A316, A416, A516,.AB16,AC16,AD16,.,FF16
EBCDIC . 50 . 61 . F1 F2 F3 . C3 C4 C5 . D2 D3 D4 .
Skaičiai ir simboliai & / 1 2 3 C D E K L M
Pav. 3.16. Perkodavimai iš ASCII į EBCDIC

EBCDIC kodai, kaip iš eilės einantys 16-niai skaičiai
0016, ., 5016,..,6116, .,C316, C416, C516,., D2 16,D316,D416 .,F116,F216 F316,., FF16
ASCII .,46, .,4F ,., A3, A4, A5, . AB, AC, AD, .,51, 52, 53, .
Skaičiai ir simboliai & / C D E K L M 1 2 3
Pav. 3.17. Perkodavimai iš EBCDIC į ASCII

Iš pateiktų pavyzdžių aiškiai matyti, kad perkodavimo mechanizmas yra formalus reiškinys, nes perkodavimo lentelėje į atitinkamai nuo jos pradžios nutolusį baitą (pagal perkodavimo simbolio baito šešioliktainę reikšmę) galima įrašyti bet kokį reikiamą kodą, į kurį minėtas nuotolį nuo lentelės pradžios reiškiantis skaičius perkoduojamas. Kita vertus pati lentelė sudaro 256 baitų lauką, t.y. nuo 0016 iki FF16. Lygiai taip pat ir kiekviename lentelės baite gali būti bet kuri dešimtainė kombinacija nuo 000000002 iki 111111112, t.y. nuo 0016 iki FF16.
Priežastinis ryšys neprasideda ir tuo atveju, kai perkoduoti duomenys atitinka duomenis apdorojančių įrenginių vidinius kodus. Tai tik formalus faktas ir tiek. Priežastinis ryšys prasideda tada, kai perkoduotieji duomenys išdėstomi tam tikra griežta tvarka (eile) ir griežtai tik tam tikri, t.y. vienoki, o ne kitokie. Apie tokius duomenų ir programų ryšius bus kalbama toliau šiame skirsnyje.
Visų pirma 3.18 pav. turima omenyje galutinio vartotojo programa bei duomenys. Nežiūrint į tai, kokios sudėtingos programinės sistemos aplinkoje ta programa veiktų, pateikiamos priežastinių ryšių grupės išlieka. Maža to, šios ryšių grupės charakteringos ir programinės sistemos atskiriems programinių modulių priežastiniams ryšiams, su nuosavais sisteminiais duomenimis. Kaip buvo matyti iš priežastinių ryšių grupių aprašymo, abipusių bei grįžtamųjų priežastinių ryšių savybės sisteminei programinei įrangai yra būdingesnės, nei taikomojo pobūdžio uždaviniams.
Struktūrinė priežastinių ryšių tarp duomenų ir programos, 3.18 pav. pažymėta skaičiumi 1, yra abipusių ryšių grupė, kurios savitumą nusako struktūrinis ryšys tarp duomenų ir apdorojančios programos. Jeigu duomenys išdėstyti jų struktūroje vienaip, tai ir programos atskiros dalys turės tam tikrą išdėstymą. Visa tai yra matyti, jeigu duomenų struktūrą (išdėstymą) keisime. Tada nesunku pastebėti, kad prisieis keisti ir programinių procedūrų išdėstymo tvarką. Pavyzdžiui, jeigu parenkamas lentelinis duomenų pateikimo būdas, tai tokie duomenys (nekeičiant duomenų turinio) gali būti pateikti įvairiomis skirtingomis sekomis, įvairaus rango ir eilės lentelėse. Priklausomai nuo rango ir eilės, keisis ir lentelių skaičius bei duomenų kiekiai ir jų vieta lentelėje. Todėl neišvengiamai keisis ir duomenų paieškos būdai net tuo atveju, jeigu lentelės bus tam tikroje duomenų bazės sistemoje.
Pastaruoju atveju pasikeitusius programinius veiksmus atlieka ne taikomoji, o duomenų bazės valdymo programinė sistema.
Vienpusių priežastinių ryšių programa-duomenys esmė yra ta, kad paprastai dauguma programinių procedūrų nereikalauja įvertinti daugumos apdorotų duomenų rezultatų. Pavyzdžiui, atliekami aritmetiniai veiksmai, gaunami duomenys, kurie yra tų veiksmų rezultatai ir procedūra tuo baigiama. Bet, ypač sudėtingesnėse duomenų apdorojimo programose, dažnai yra ir abipusis programos ir duomenų ryšys. Jis reiškia, kad kintantys duomenų apdorojimo rezultatai yra papildomai analizuojami, arba dar prieš apdorojimą analizuojami pradiniai duomenys ir priklausomai nuo tos analizės rezultatų parenkama vienokia ar kitokia programos tolesnio vykdymo atšaka. Pavyzdžiui, esant neigiamiems duomenų apdorojimo skaitiniams rezultatams, parenkama viena programos vykdymo atšaka, o teigiamiems – kita, nes nuo skaičiaus-rezultato ženklo priklauso procedūrų rinkinys. Jeigu neigiamą skaičių gauname iš sandėlyje esančių medžiagų likučio atimdami gamybai reikiamą medžiagų kiekį, tai tokia operacija dalykinėse srityse negali būti įvykdyta. Tenka gamybai atiduoti visą likutį, nurodyti galutiniam duomenų vartotojui, kad medžiagų nepakako tiek, kiek jų buvo prašyta, todėl būtinas sandėlio papildymas. Visiškai aišku, kad bus elgiamasi kitaip, jeigu medžiagų sandėlyje pakaks gamybos poreikių patenkinimui.
Grįžtamasis priežastinis ryšys tarp duomenų ir programos nustatomas tada, kai priklausomai nuo duomenų tenka keisti pačią programą. Pavyzdžiui, esamas duomenų kiekis netelpa į programoje numatytus ir rezervuotus duomenų laukus. Tada pati programa priversta rezervuotųjų laukų apimtį keisti. Nesigilinant į tokio pakeitimo detales, pabrėžtina, kad tokios procedūros neretai yra sudėtingos, nes gali keisti laikinai ir kitų programų, kurios nesusietos su analizuojamąja, padėtį kompiuterio operatyviojoje atmintyje. Dar sudėtingesnio grįžtamojo ryšio pavyzdžiu gali būti toks atvejis, kai tam tikrų programinių priemonių pagalba keičiama dalis komandų veikiančioje programoje, nes skirtingų programos atšakų (ar paprogramių) naudojimas nėra efektyvus, dėl tokių atšakų, (ar paprogramių) gausos.

Pav. 3.18. Priežastiniai duomenų ir programų ryšiai

Baigiant nagrinėti priežastinius duomenų ir programų ryšius ypač būtina pabrėžti, kad priežastiniai ryšiai realizuojami naudojantis formaliaisiais 3.2.1 skirsnyje nagrinėtais ryšiais. Juk vienokios ar kitokios formalios priemonės, naudojamos dėl tam tikros priežasties, nes vienoks panaudojimas gali išspręsti duomenų apdorojimo uždavinį, o kitoks negali. Taigi, priežastinių ir formalių ryšių tarp duomenų ir programų visuma, naudojama vienu metu, atskleidžia programavimo, kaip tokio, esmę, nes paaiškina kaip duomenys apie realų pasaulį paversti dvejetainėmis išraiškomis, bei duomenys apie duomenis, taip pat paversti dvejetainėmis išraiškomis, vadinamomis programomis, tam tikrais, griežtai nustatytais formaliais ryšiais veikdamos keičia duomenis į apdorojimo rezultatus ir vėl pateikia iš dvejetainės formos galutiniam vartotojui suprantama išraiška. Kitame skyriuje nagrinėjami programavimo dalyko pradmenys, kurie tiesiogiai sietini su pagrindinėmis šiame skyriuje pateikiamomis sampratomis.

4. Dvejetainis programavimas
Apskritai programavimu laikomas ištisas kompleksas programų kūrimo, derinimo, realizavimo ir netgi užduočių analizės etapų. Šioje knygoje analizuojamuoju atveju svarbiausia suvokti bent kelias mašininių komandų sistemas, jų veikimo principus bei ypatumus. Todėl, šiame skyriuje bus pateiktos trys virtualios dvejetainių komandų sistemos skirtingais jų analizės aspektais ir apimtimi.
Pirmiausiai bus pateikti dvejetainių komandų organizavimo baitinėje operatyvioje atmintyje principai tuo atveju, kai skirtingų komandų ilgiai (baitais) nevienodi. Giliau į šios komandų sistemos analizę nebus leistasi, nes tokios komandos, nors čia ir vadinamos virtualiomis, analogiškos asamblerinėms komandoms ir su jomis bus galima susipažinti iš kitokios medžiagos.
Antras komandų organizavimo principas bus aprašomas trumpai. Tai komandos turinčios operacijos kodą bei tris atminties adresus.
Trečiasis, pagrindinis atvejis, tai ištisa dvejetainių komandų sistema, turinti fiksuotą komandų ilgį ir, autoriaus nuomone, geriausiai atspindinti žemiausio dvejetainio programavimo lygmenų sąsajas su fiziniais kompiuterio elementais. Be to, ji įgalina skaitytoją suvokti operacinių sistemų transliatorių ir kitos sisteminės įrangos reikalingumą ir ne tik, o reikalingumą būtent tokių sisteminių programinių priemonių, kurios yra sukurtos ir toliau plėtojamos.
Minėtasis dvejetainis programavimo lygmuo atskleidžia giluminę programavimo sampratą, nes aprašant programavimą nesant kitokių programuoti “padedančių” programinių priemonių, pilnai atsiskleidžia pati esmė: visi šiuolaikiniai kompiuteriai bei jų ištobulinta programinė įranga iš tikrųjų dirba tik dvejetainiame lygmenyje.

4.1. Kintamo ilgio dvejetainių komandų tipai
Kompiuterio komandų struktūra tiesiogiai priklauso nuo operatyviosios atminties struktūros. Kompiuterio operatyvioji atmintis sudaryta iš baitų, kurie yra mažiausios adresuojamos atminties ląstelės. Todėl komandą gali sudaryti skirtingas, priklausomai nuo jos paskirties, greta esančių baitų skaičius, o jos algoritmą apsprendžia tų baitų turinys, t.y. skiltyse esančių nulių ir vienetų kombinacijos. Komandos vietą atmintyje nustato pirmasis baitas į kurį įrašomos komandos operacijos kodas. Nuo operacijos kodo priklauso operandų skaičius, jų turinys, komandos užimamų baitų skaičius, ir kt.
Bendriausiu pavidalu komanda gali būti užrašyta taip:

OK, OP1, OP2, ., OPn .

OK – reiškia komandos kodą, Oi, kur 2< i 0001 0111
W 1011 0110 w 1101 0110 C16 1111 1100 [ 0010 1000
X 1011 0111 x 1101 0111 D16 1111 1110 ] 0001 1001
Y 1011 1000 y 1101 1000 E16 1111 1110 ~ 0001 1010
Z
1011 1001 z 1101 1001 F16 1111 1111 0001 1011

Šioje lentelėje teksto simboliais laikomi: raidės, dešimtainiai ir šešioliktainiai skaičiai ir specialūs ženklai. Tai 52 simboliai skirti lotyniškajam alfabetui, 26 – dešimtainiams ir šešioliktainiams skaičiams, 26 – specialiems simboliams. Tai 104 dvejetainės kombinacijos iš 256, kurios galimos viename baite. Suprantama, kad įvairiems tekstams pateikti lentelėje įrašytų simbolių nepakanka. Bet lieka dar 152 simboliai (256 – 101 = 152), kuriais gali būti graikiškojo alfabeto raidės, nacionaliniais įvairių valstybių nacionaliniai alfabetai ir kt. Taigi 256 baitų, į kuriuos įrašomi įvairūs skirtingi simboliai praktiškai pakanka bet kokiam tekstui pateikti kompiuterio atmintyje bei įvesties ir išvesties įrenginiuose.
Tekstas ABCZ 012, kuris 4.1 lentelėje nurodytais kodais, įrašytas į kompiuterio atmintį, parodytas pav. 4.3.

Baito eil. Nr. ląstelėse 1 2 3 4 5 6 1 2
Dvejetainis kodas 1010 0000 1010 0001 1100 0010 1011 1001 0001 1011 1110 0000 1110 0001 1110 0010
Šešioliktainis kodas A0 A1 C2 B9 1B E0 E1 E2
Simbolio reikšmė A B c Z  0 1 2
Pav. 4.3 Tekstas atminties ląstelėse

Be to, tam tikra simbolių visumos dalis 4.1 lentelėje, pavyzdžiui, nacionalinis alfabetas, skirtinguose tos pačios serijos kompiuterių egzemplioriuose gali būti įrašytas vis kitoks.
Skaičiai, bei juos sudarantys skaitmenys ir specialūs ženklai (taškas, kuris skiria sveikąją ir trupmeninę skaičiaus dalis, pliusas, minusas ir kt.) kompiuterio atmintyje pateikiami labai įvairiai. Bet paprastai skaičių kompiuterio procesorius “supranta” ir apdoroja, kai jis yra tam tikroje vienoje dvejetainėje formoje. Įvairios skaitinių duomenų pateikimo formos dažniausiai reikalingos skaičių pervedimo į minėtąją apdorojimo formą patogumui ir, svarbiausia, skaičių saugojimo kompaktiškumui užtikrinti.
Skaičiai gali turėti kompiuterio atmintyje tokias pateikimo formas, kurios bus aprašomos A, B, C, D, E ir F pastraipose. Čia pateikiami pastraipų pavadinimai atitinkamai įvardijami mažosiomis raidėmis:
a) dešimtainiai skaičiai pateikiami tekstu;
b) dešimtainiai supakuoti skaičiai;
c) dešimtainiai skaičiai su slankiuoju tašku;
d) šešioliktainiai skaičiai, kai vienas skaitmuo užima vieną baitą;
e) šešioliktainiai supakuoti skaičiai;
f) šešioliktainiai ir dvejetainiai skaičiai su slankiuoju tašku.
Toliau bus aprašomos skaičių pateikimo formos, kurių kiekvienos aprašymas žymimas didžiąja raide, atitinkančia mažosiomis raidėmis aukščiau išvardintųjų pateikimo formų pavadinimus.
A. Dešimtainiai skaičiai pateikiami tekstu parodyti žemiau einančiame 4.4 pav. Tie skaičiai yra: +153.1; -116843.8 ir +12. Jie įrašomi į atminties baitus vienas po kito visiškai neatsižvelgiant į atminties ląsteles. 4.4 pav. Parodomas antrasis skaičius netelpa antroje ląstelėje. Todėl jo dalis 3.8 įrašyta į trečiosios ląstelės pradžią.
Akivaizdu, kad vieną nu kito gretimuose baituose surašytus skaičius skiria jų ženklai.
Skaičių užrašymas teksto simboliais yra patogi ir akivaizdi jų pateikimo kompiuterio atmintyje forma. Tačiau ši forma kiekvienam skaitmeniui, dešimtainiam taškui ir skaičiaus ženklui užrašyti reikalauja vieno baito. Todėl ši užrašymo forma nėra kompaktiškas skaičių užrašymo kompiuterio atmintyje būdas.

Ląstelės Nr. 1 2 3
Baito eil. Nr. ląste-lėje 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 .
Dešim-tainis skaičius baituose + 1 5 3 . 1 – 1 1 6 8 4 3 . 8 + 1 2 .
Dešim-tainio skaičiaus 16-nis kodas 02 E1 E5 E3 01 E1 03 E1 E1 E6 E8 E4 E3 01 E8 02 E1 E2 .
Pav. 4.4. Skaičiai pateikiami teksto simboliais

B. Dvigubai kompaktiškesnė yra supakuotų skaitinių duomenų užrašymo forma. Ši forma paprasčiausiai atmeta pirmąją kiekvieno baito tetradą, palikdama tik antrąją tetradą. Visiškai mechaniškai to padaryti negalima, nes kliudo tai, kad skaičiaus dešimtainis taškas bei ženklai (+, -), pagal 4.1 lentelę užima visą baitą. Tiesiog atmetus pirmąją taško, pliuso ir minuso kodo tetradas liks tetradas: 0001, 0010 ir 0011. Taigi šių kodų neįmanoma būtų atskirti nuo dešimtainių skaičių 1, 2 ir 3 kodų. Naudodamiesi tuo, kad tetradoje dešimtainiai skaičiai užima dvejetaines kombinacijas nuo 0000 (nulio) iki 1001 (devynių) ir lieka nepanaudotos kombinacijos nuo 1010 iki 1111, galima skaičių ženklus (+, -) ir jų dvejetainį tašką koduoti taip:

Ženklo reikšmė Kodas pagal 4.1 lentelę Kodas tetradoje Šešioliktainis kodas
. 0000 0001 1101 D
+ 0000 0010 1110 E
– 0000 0011 1111 F
4.5 pav. Dešimtainių skaičių ženklų kodai

Tada supakuotų dešimtainių skaičių į vieną baitą tilps du skaitmenys, o dešimtainis taškas, pliuso ir minuso ženklai užims taip pat po pusę baito arba vieną tetradą.
4.6 paveiksle aprašytų dviejų dešimtainių skaičių pateikimo būdų kompiuterio atmintyje ne visada pakanka, todėl toliau nagrinėjama dešimtainių skaičių su slankiuoju tašku pateikimo forma.

C. Kai atliekami komerciniai skaičiavimai, ir tų skaičiavimų pagrindas yra piniginis vienetas, tai dėl dešimtainio taško vietos nekyla jokių abejonių nei pradiniuose duomenyse, nei duomenų apdorojimo rezultatuose. Dešimtainis taškas paprastai skiria du dešimtainius ženklus nuo sveikosios skaičiaus dalies. Bet visiškai kitaip yra kai atliekami moksliniai arba inžinieriniai skaičiavimai. Čia dažnai dešimtainio taško vieta sunkiai nusakoma, nes įvairių tarpinių skaičiavimų rezultatai gali skirtis tūkstančiais ar net daugiau kartų. Trupmeninės skaičiaus dalys taip pat labai nevienodos. Tai gali iliustruoti funkcijos

,

y reikšmių skirtingumai, kai x reikšmės parinktas gana kompaktiškame intervale.

Lentelė 4.2. Funkcijos reikšmių skirtingumas

x y
-20 -0.000705467
0 +2.8
1.1 +8.882352941
1.2 +4
1.3 +2.428571429
1.5 +1.24
1.6 +0.962962963
20 +0.004530313

Funkcijos reikšmių eilės kitimo diapazonas nuo 10-4 iki 100, o trupmeninės dalies nuo dešimt tūkstantųjų dalių (-0.0007.) iki sveiko skaičiaus (+4).
Slankaus dešimtainio taško dešimtainių skaičių vaizdavimo kompiuterio atmintyje formą skatina keli svarbūs veiksniai:
Pirma, galimybė didelius, iš anksto nežinomo skaitmenų skaičiaus užrašyti kompaktiškai. Pavyzdžiui:

1 000 000 000 000 = 1  1012 .

Antra, atsisakyti įvairių lygių vienos ir tos pačios dimensijos, ją išreiškiant skirtingai dešimties laipsnio rodikliais. Pavyzdžiui: 100 tūkstančių bitų yra tas pats, kaip 0,1 milijono bitų. Tokią sumą galima užrašyti taip:

1  106 Lt arba 0,1  107 Lt.

Trečia, galimybė iš anksto įvairiai išreikšti dešimtainio taško vietą. Tai konkrečiais skaičiavimo atvejais supaprastina aritmetinius skaičiavimo veiksmus. Pavyzdžiui:

2.55 = 0.0255  102 .

Užrašant skaičius su slankiuoju tašku paprastai naudojamas eksponentės pavidalas. Pavyzdžiui:

0.0255E2 = 0.255E1

arba

.28 = 0.28E – 2 = 2.8E – 3 ir t.t.

Baito eilės Nr. lentelėje 1 2 3 4 5 6 7 8 9 .
Dešimtai-niai skai-čiai tetra-dose + 1 5 3 . 1 – 1 1 6 8 4 3 . 8 + 1 2 .
De-šimtai-nių skait-menų dveje-tai-niai kodai 1110 0001 0101 0011 1101 0001 1111 0001 0001 0110 1000 0100 0011 1101 1000 1110 0001 0010 .
De-šimtai-nių skait-menų šešio-lik-tainės išraiš-kos E 1 5 3 D 1 F 1 1 6 8 4 3 D 8 E 1 2 .

Pav. 4.6. Supakuoti dešimtainiai skaičiai (užrašyti tetradose)

D. Šešioliktainių skaičių vaizdavimo kompiuterio atmintyje forma, kai vienos šešioliktainis skaitmuo įrašomas į vieną baitą, yra paprasta ir ją suvokti pakanka palyginti tekstinį dešimtainių skaičių vaizdavimą, pakeitus pačius skaitmenis iš dešimtainių į šešioliktainius pagal lentelę 4.1 šešioliktainiai skaitmenys užrašomi į antrąją baito tetradą, o pirmojoje tetradoje visur užrašomas šešioliktainis F. Tarnybiniai simboliai (taškas, pliusas, minusas ir kt.) pateikiami iš lentelės 4.1, t.y. būtina tik viena sąlyga: pirmoji baito tetrada neturi būti užpildyta F. Pavyzdžiui:

Tetrados 0 2 F 1 F 2 F 3 0 1 F 4
Baitai
Pav.4.7. Šešioliktainiai skaitmenys baituose

Čia yra šešiuose baituose užrašytas šešioliktainis skaičius +123.416.

E. Šešioliktainius skaičius skirtingai nuo dešimtainių, aprašytų šio paragrafo B pastraipoje, tiesiogiai iš vieno baito į vieną tetradą pervesti arba supakuoti negalime. Visas įmanomas dvejetaines tetrados įmanomos kombinacijos nuo 016 iki F16 užima vientik šešioliktainių skaitmenų kombinacijas. Todėl nelieka šešioliktainių (arba dvejetainių) kombinacijų net būtiniausiems skaičių tarnybiniams simboliams pažymėti: taškui, pliusui, minusui. Negelbsti dviejų ar net kelių iš anksto žinomų simbolių įrašymas į greta esančias tetradas. Pavyzdžiui, taškas pagal 4.1 lentelę yra

0000 00012 = 0116 .

Bet šiuo atveju taško žymėjimo nebus galima atskirti nuo šešioliktainio skaičiaus greta einančių tokia pat skaitmenų. Pavyzdžiui, F01116 ar F.116 .
Jeigu F01116 = 6145710, tai F.116 = 15.110. Taigi 6145710  15.110.
Išeitis iš, atrodo, gana painios situacijos, kai šešioliktainių skaičių negalima laikyti atmintyje supakuotame pavidale, randame gana paprastai. Tai pozicinis šešioliktainių skaičių vaizdavimo atmintyje būdas.
Tegu žinoma, kad tam tikrame baite, nebūtinai ląstelės pradžioje, yra šešioliktainių skaičių masyvo pradžia. Kiekvienam skaičiui, jo pradžioje įrašomas baitas nustatantis to skaičiaus struktūrą: sveikosios dalies ilgį tetradomis, trupmeninės dalies ilgį tetradomis ir skaičiaus ženklą, t.y. plius arba minus. Čia X16 = xxxx2 ir Y16 = yyy2.

Bitai 0 1 2 3 4 5 6 7
Bitų reikšmės x x x x y y y 
Pav.4.8. Šešioliktainio skaičiaus struktūros baitas

Tetrada užpildyta ženklais x nurodo skaičiaus sveikosios dalies ilgį tetradomis arba sveikosios skaičiaus dalies skaitmenų kiekį, kai vienas skaitmuo įrašomas į vieną tetradą. Visiškai analogiškai užrašoma trupmeninė skaičiaus dalis, kurios struktūra nurodoma tetradoje y. Aišku, kad bitas  skirtas skaičiaus ženklui pažymėti.
Tetrados X turinys gali būti nuo 0000 iki 1111. Tai reiškia, kad šešioliktainis skaičius gali neturėti sveikosios dalies (X = 0000), o tik trupmeninę arba turėti net 1510 (1111) skaitmenų, kai X=1111.
Analogiškai, skaičius gali neturėti trupmeninės dalies, kai triada Y yra 000 ir gali turėti septynis trupmeninius skaitmenis (tetradas), kai triada yra 111.
Jeigu septintajame baite nurodytas nulis (0), tai reiškia, kad skaičius teigiamas, jeigu vienetas (1) – skaičius neigiamas.
Šešioliktainio skaičiaus ilgį, t.y. tetradų kiekį nurodo suma l:

l = X + Y.

Šiam ilgiui priskirtinas ir skaičiaus struktūros baitas, t.y. dvi tetrados. Tai vienas šešioliktainis skaičius užima

l = X + Y + 2 tetradų

arba baitų.

Iš pastarosios šešioliktainio skaičiaus ilgio išraiškos matyti, kad bet kuris skaičius (su jo struktūros baitu) išskiriant pirmąjį skaičių masyvo skaičių gali prasidėti nebūtinai nuo baito pradžios, o ir nuo einančio iš eilės baito antrosios tetrados.
Toliau pateikiama įvairios struktūros šešioliktainių skaičių lentelė ir jos vaizdas kompiuterio atmintyje.
Lentelė 4.3. Šešioliktainiai supakuoti skaičiai kompiuterio atmintyje

Šešioliktainis skaičius Šešioliktainės struktūros Supakuotas šešioliktainis skaičius kompiuterio atmintyje

baito išraiška Dvejetainė struktūros baito išraiška Dvejetainė skaičiaus išraiška
-286.34 35 0011 0101 0010 1000 0100 0011 0100
+F189.1 42 0100 0010 1111 0001 1000 1001 0001
.1 02 0000 0010 0001
0.1 12 0001 0010 0001 0001
1 10 0001 0000 0001
-1 11 0001 0001 0001
0 10 0001 0000 0000

Pastebėtina, kad vieną skaitmenį turintis skaičius atmintyje užima pusantro baito arba tris tetradas. Didžiausias skaičius l = 1510 + 710 + 210 gali turėti 2222 skaitmenis ir atmintyje užimti 2410 tetrados arba 1210 baitų. Jeigu X = Y = 0 – skaičiaus nėra, o jo struktūros baitas nekorektiškas.
Skaičiai gali būti labai dideli (šešioliktainis skaičius, turintis 15 skaitmenų) ir dar 7 skaitmenis trupmeninėje dalyje. Todėl praktikoje jie labai retai pasitaiko. Jeigu tokių skaičių didumo nepakanka, galima naudoti skaičius su slankiuoju tašku.

F. Šešioliktainiai ir dvejetainiai skaičiai su slankiuoju tašku.
Šešioliktainis skaičius, išreikštas trupmena, kuri dauginama iš skaičiaus 16 laipsnio rodiklio, vadinamas šešioliktainiu skaičiumi su slankiuoju tašku. Šis skaičius laikomas normalizuotu, jeigu jo trupmeninė dalis yra diapazone nuo 0.116 iki 1. Iš to kas pasakyta, aiškiai matyti šešioliktainio skaičiaus su slankiuoju tašku analogija dešimtainių skaičių tokiam pat vaizdavimui aprašytam pastraipoje C. Nors teoriškai šešioliktainis ar dešimtainis skaičius gali turėti begalinį skaitmenų kiekį, praktiškai tas kiekis turi būti griežtai ribojamas, t.y. ribojamas maksimalus skaitmenų kiekis skaičiuje. Didžiajai daugumai skaičiavimų pakanka aštuonių ženklų šešioliktainio skaičiaus rodančio reikšmines skaičiaus skiltis:

FFFFFFFF16 = 429496729510 .

Esant reikmei, šis skaičius imamas dvigubo ilgio.
Toliau nesigilinant į šešioliktainio skaičiaus su slankiuoju tašku struktūrą, pateikiama jam adekvati dvejetainio skaičiaus sandara.
Dvejetainio skaičiaus su slankiuoju tašku bendriausią formą galima užrašyti

x =  m .2p .

Čia m yra skaičiaus mantisė, p – skaičiaus eilė.
Mantisė yra skaičiaus dalis, kuri parodo to skaičiaus reikšmines išraiškas, naudojamas skaičiavimams. Mantisės normalus pavidalas yra taip sutvarkyta mantisė, kad jos aukščiausioji skiltis nebūtų nulis.
Skaičiaus eilė yra toks laipsnio rodiklis, kurio pakeltas skaičiavimo sistemos pagrindas, šiuo atveju – 2, kad jis padaugintas iš mantisės teiktų tikrąją skaičiaus skaitinę vertę.
Vienas iš variantų, kaip būtų galima atvaizduoti atminties ląstelėje dvejetainį skaičių su slankiuoju tašku galėtų būti toks.

Baitai ir 1 2 3 4 5 6
bitai 0 – 7 8 – 15 16 – 23 24 – 31 32 – 39 40 – 47
Skaičiaus dalys

0 40 

 m  p
Pav. 4.9. Dvejetainio skaičiaus su slankiuoju tašku vaizdavimas atminties ląstelėje

Čia:
– nuo 1 iki 39 bito – skaičiaus mantisė m;
– nuo 41 iki 47 bito – skaičiaus eilė p;
– nuliniame bite – mantisės ženklas;
– 40-jame bite – skaičiaus eilės ženklas.
Prisimintina, kad tada, kai skaičiaus eilės ženklas neigiamas, tai pats skaičius yra trupmeninis – mažesnis už vienetą, nes:

.

Jeigu iš visų skaičių išraiškų, pateiktų pastraipose A – F, susidarytų įspūdis, kad skaičiai y slankiuoju tašku tik dubliuoja kitas išraiškas, o iš esmės nuo jų nesiskiria, tai toks įspūdis nėra teisingas. Nežiūrint į tai, kad tokio dubliavimo iš tikrųjų esama, slankiojo taško skaičių vaizdavimo būdas yra ypač naudingas įvairiausių skaičiavimų programoms sudaryti. Realybė tokia, kad programinės priemonės arba įvairių skaičiavimų aparatinė realizacija slankiojo taško bet kokį atvejį priima ir “supranta” vienodai. Tuo tarpu fiksuoto taško kiekviena galima vieta bei prie kiekvienos iš vietų skirtingas sveikosios skaičiaus dalies ilgis suprantamas vis kitaip ir reikalauja atskiros programinės analizės ir tam tikrų koregavimo veiksmų. Todėl iš anksto nežinant, koks sveikasis skaičius bei į kokią slankiojo taško vietą konkrečiu atveju pasitaikys, apribojimo veiksmų programavimas gerokai sudėtingėja. Beje, užbėgant į priekį, būtina pasakyti, kad programuojant šiuolaikinėse algoritminėse kalbose, programuotojas jokių didelių nepatogumų nejaučia. Įvairiausi atvejai realizuoti transliatoriuose ar aparatiškai programuotojui patogiais būdais. Tačiau neužmirština ir tai, kad tokios realizacijos programos užima žymiai daugiau vietos atmintyje ir skaičiavimai kompiuterio atliekami kelis ar net keliolika kartų ilgiau.
Užbaigiant 4.1.1 paragrafą būtina padaryti ypač svarbias išvadas.
1. Visiškai nesvarbu, kaip ir kokiu pavidalu bus pateikti skaičiai kompiuterio atmintyje. Svarbu žinoti struktūrą, kuri gali analizuoti kompiuterio procesoriai. Tada bet kokią pateikimo formą galima transformuoti į procesoriams priimtiną skaičių struktūrą.
2. Visiškai nesvarbu, kaip ir kokiu pavidalu bus pateikti simboliai kompiuterio atmintyje. Būtina žinoti vidinius kompiuterio (ar jo programinio aprūpinimo) kodus bei išorinių įrenginių simbolių kodus. Simbolių perkodavimai iš vienos į kitą kodavimo sistemas gali būti atlikti ir greitai, ir paprastai.

4.3. Dvejetainių komandų sandara
Kompiuterio procesorius bet kokią programą pradeda vykdyti analizuodamas įeigos į programą adrese esančio baito turinį. Mat pirmasis – mažiausias atminties lauko, kuriame yra programa, adresas nebūtinai yra programos įeigos adresas.

Programos baitų adresai
a1 a2 a3 a4 a5 . an .

Pirmas adresas Įeigos adresas
Pav. 4.10. Įeigos į programą adresas

Kaip vėliau bus matyti iš komandų rūšių, bet kada, prireikus, programos vykdymas gali būti perduotas ir į adresą a1 , t.y. į programos pradžią.
Analizuojant įeigos adreso turinį, pirmiausiai nustatomas jame esančios komandos kodas, o pagal jį, nustatomas tos komandos ilgis. Tai reiškia, kad sužinoma, kur prasideda sekanti komanda pagal jų išdėstymą atminties lauke. Sekanti komanda pagal išsidėstymą nebūtinai yra sekanti pagal vykdymą. Jau pati programos įeigos adrese esanti komanda programos vykdymą gali nukreipti kitur, t.y. į kitą programos adresą.

Programos baitų adresai
a1
a2 a3 a4 a5 . an .

Įeigos adresas
Pav. 4.11. Programos vykdymo nukreipimas į adresą a1

Aiškinantis dvejetainį programos realizavimą arba vyksmą kompiuterio atmintyje, nėra patogu kiekvieną kartą nustatinėti komandos sandarą bei ilgį. Tai papildomai apsunkina tokio vyksmo esminių dalykų suvokimą. Todėl, bet kuri komanda čia laikoma turinti vienodą ilgį. T.y. kiekviena komanda užima sąlyginę atminties ląstelę, kuri sudaryta iš šešių iš eilės einančių baitų. Taigi, bet kurios ląstelės adreso skaitinė reikšmė turi dalintis iš skaičiaus šeši.

Atminties ląstelės baitas
0 1 2 3 4 5
OK I a1 a2

Pav. 4.12. Dvejetainės komandos sandara

Iš to, kas aukščiau pasakyta aišku, kad pateiktos komandos sandara sudaryta normaliai ir yra virtuali. Tai įgalina paprasčiau pateikti realių dvejetainių komandų sandarą, bei parodyti sandaros elementų vaidmenį duomenų apdorojime, vykdant komandas, o esmės neužgožia techninės nesvarbios detalės.
Komandos ląstelės nulinis baitas skirtas operacijos kodui (OK) užrašyti. Iš viso šiame baite galima užrašyti 255 įvairias skirtingas operacijas. Nulinė OK reikšmė paprastai laikoma ne kokios nors operacijos kodu, o operacijos nebuvimu šioje ląstelėje.
Ląstelės baitas pažymėtas pirmuoju numeriu yra komandos indeksinis (I) baitas. Pirmieji trys šio baito bitai skirti indeksinėms ląstelėms pažymėti. Jos pilnai atitinka trečiajame skyriuje aprašytą registrų sampratą. Likusieji penki bitai yra kompiuterio atminties blokų indeksai arba jų numeriai.

Indeksinio (1) ląstelės baito bitai
0 1 2 3 4 5 6 7



Registrų numeriai Atminties blokų numeriai
Pav. 4.13. Indeksų baitas

Antrasis ir trečiasis bei ketvirtasis ir penktasis komandos ląstelės baitai (a1 ir a2) naudojami atminties adresams nurodyti tame atminties bloke, kurio numeris užrašytas indeksinio baito 3 – 7 bituose.
Pažymėtina, kad indeksinės ląstelės (registrai) atmintyje numeruojami atskirai ir sudaro atskirą atminties bloką, esantį visos atminties priekyje, sudarytą iš septynių ląstelių arba 42 baitų:

1112 = 710, 7  6 = 42.

Registro numeris 000 reiškia, kad registro panaudojimas konkrečioje komandoje nereikalingas. Bet jeigu procesoriaus yra kreipiamasi į visos atminties pradžią, tai pirmiausiai analizuojamas nulinio registro turinys. Už registrų baitų seka pagrindinės atminties blokai. Kiekvienas iš j ų turi savarankišką numeraciją nuo 00000 iki 11111 bloko. Nagrinėjamuoju atveju atminties blokų gali būti 32, nes prie

111112 = 1F16 = 3110,

prisideda nulinis blokas, t.y. 3110 + 1 = 3210, arba 2016.
Kiekvieno atminties bloko viduje baitai numeruojami nuo 000016 iki FFFF16. Kadangi

FFFF16 = 6553510,

tai iš viso viename bloke yra 6553610 baitų.
Vienas atminties blokas turi 65536 baitus, o blokų iš viso yra 32, tai visa pagrindinė atmintis, nagrinėjamuoju atveju, turės 200 00016 baitų.

6553610  3210 = 209715210
arba
FFFF10+ 1  1F16 + 116 = 20 00016.

Šiuo atveju dvejetainės komandos struktūros atveju, kompiuterio atmintis yra per 2 megabaitus. Nesunku formaliai nurodyti ir kitokią didesnę operatyviąją atmintį. Pakanka atminties ląstelės apimtį išplėsti vienu baitu taip, kad jos indeksinio registro atminties blokų registracijos apimtis padidėtų viena dvejetaine tetrada. Tada bus galima užrašyti tokį atminties blokų po 65536 baitų kiekviename skaičių

1FF16 + 116 = 51210 .

Tada operatyvinė atmintis turėtų daugiau nei 33,5 megabaitų, nes

65536  512 = 33554432,

arba šešioliktainėje sistemoje

200 00016 = 3355443210.

Apibendrinant visa, kas pasakyta apie dvejetaines komandas, kompiuterio operatyviosios atminties sandarą galima pateikti taip.
Registrai:
– nulinis – komandose nenaudojamas;
– pirmasis – komandoje naudojamo adreso a1 modifikacijos registras;
– antrasis – komandoje naudojamo adreso a2 modifikacijos registras;
– trečiasis – prieš vykdomą komandą vykdytos komandos operacijos rezultato registras;
– ketvirtasis – komandų adresų skaitiklis;
– penktasis – -pagrindinis komandos realizavimo registras;
– šeštasis ir septintasis – bendrieji registrai.

Atminties blokai:
0 blokas 0 – n1 baitai;
1 blokas 0 – n2 baitai;
– – – –
m-1 0 – nm baitai.

Baitų adresai n1, n2, ., nm yra vienodo skaitinio didumo. Jeigu adresams a1 ir a2 atminties ląstelėje skirti du baitai kiekvienam iš šių adresų skaitoma reikšmė FFFF16 + 1 = 6553510 + 1.
Nulinis ir nuo ketvirtojo iki septintojo registrai naudojami kaip bendrojo pobūdžio registrai, galintys padėti vykdyti įvairių tipų komandas. Pirmasis ir antrasis registrai tiesiogiai komandoje gali ir nedalyvauti, bet netiesiogiai dalyvauja visada. Pirmasis registras yra pirmojo komandoje naudojamo atminties adreso a1 , o antrasis – adreso a2 modifikacijos registrai. Tai reiškia, kad komandoje užrašytos adresų a1 ir a2 skaitinės reikšmės nėra tikrieji arba vykdomieji atminties adresai. Tikrasis adresas nustatomas atlikus tam tikrus veiksmus su skaitiniu registro turiniu ir su a1 turiniu. Lygiai taip pat nustatomas ir antrasis atminties adresas, kai antrojo registro turinio ir a2 turinio skaitinės reikšmės modifikuojamos į vykdomąjį adresą. Adresų modifikacijos veiksmai gali būti minėtųjų turinių sandauga, atminties bloko numerio priskyrimas konkrečių adresų diapazonui nuo nulio iki 65535 ir pan.
Tegu turime paeiliui išdėstytus ir sunumeruotus atminties blokus

Atminties blokai 65536 65536 65536 . 65536
Blokų numeriai 0 1 2 . m
Ištisiniai adresai 0 . 65535 65536 . 13071 13072 . 196607 196608 . k1 . k2
Pav. 4.13. Atminties blokai ir ištisiniai atminties adresai

Čia k1 = 65535  m, o k2 = 65535  m + 65535, kai

,

tai bet kokio a reikšmė kinta kiekviename bloke nuo nulio iki 65535.
Nagrinėjant atvejį, kai procesorius konkrečiam atminties blokui tiesiog priskiria eilės numerį, bet kuri komanda analizuoja duomenis tik to bloko viduje, pradedant baito a turiniu. Programuotojas, naudodamasis tam tikromis komandomis turi pats kiekvieną kartą nustatyti kada baigiasi atminties vienas blokas ir prasideda kitas greta esantis blokas. Jei duomenys įrašyti į gretimus blokus, gali atsitikti net taip, kad, pavyzdžiui, skaičiaus 12 pirmasis skaitmuo 1 bus paskutiniajame vieno bloko baite, o skaitmuo 2 jau greta esančio bloko pirmajame baite. Šiuo atveju tenka pasirūpinti, kad skaičius 12, jo apdorojimui, visas atsidurtų kuriame nors atminties registre.
Komandos vykdomieji adresai dar gali būti nustatomi dauginant bloko numerį iš 65536 gaunant tam tikrą bloko pirmąjį bloko adresą. Pirmieji blokų adresai šiuo atveju turi didėjančias skaitines reikšmes. Prie gauto pirmojo bloko adreso būtina pridėti a, kad būtų gautas vykdomasis komandos adresas. Kaip matyti iš 4.13 paveikslo, vykdomieji adresai greit nebetelpa į komandos adresus skirtos vietos, bet tai ir nėra būtina. Juos procesorius gali “pasiimti” ir iš kitur. Pavyzdžiui, iš pirmojo arba antrojo registrų. Tai reikštų, kad vykdomasis adresas po jo nustatymo, užrašomas į pirmą arba antrą registrus. Taigi, antruoju būdu, nustatyti vykdomieji adresai sudaro įspūdį, kad kompiuterio atmintis nėra trūki, t.y. baitai nuo nulinio iki didžiausios paskutiniojo atminties baito adreso skaitinės reikšmės auga. Gretimų baitų skaitinės reikšmės skiriasi vienetu.
Baigiant aprašyti vykdomojo komandos adreso nustatymo būdus tenka pabrėžti, kad iš tiesų nėra svarbu, kaip tas adresas nustatomas. Svarbu tai, kad blokinės atminties sudarymo būdas įgalina lengvai “auginti” ar didinti atmintį, praktiškai nesudarydamas papildomų sunkumų mašininių programų veikimui. Atkreiptinas dėmesys ir į tai, kad vieno bloko apimtis baitais 65536 yra irgi sąlyginė. Tai blokai gali turėti ir kitokių baitų skaičių. Taigi ir komandos struktūra savo apimtimi baitas gali leistis. Šiuo atveju svarbiausia komandų struktūros sudarymo principų suvokimas. Kita vertus, toliau nagrinėjant dvejetainį programavimą, tenka pasirinkti konkrečią ir komandos struktūrą, ir tuo pačiu, fiksuotą atminties bloko didumą. Šiuo atveju – 65536 baitai.
Dvejetainių komandų bendrosios sandaros nustatymas leidžia pereiti prie dvejetainių komandų sistemos pateikimo. Šią sistemą sudaro tokios komandų grupės: aritmetinių operacijų komandos, kodų keitimo operacijų komandos, valdymo operacijų komandos ir išorinių įrenginių valdymo komandos.

4.4. Dvejetainių komandų sistema
Dvejetainių komandų sistemą sudaro bendrieji šių komandų algoritmų atskirų komandų grupių bei konkrečių komandų algoritmai.
Bendriesiems komandų algoritmams priskirtini veiksmai, kurie leidžia nustatyti duomenų vykdomuosius adresus, nustatyti komandų adresus bei atlikti jų keitimus operatyviojoje atmintyje, įsiminti bei galėti panaudoti atliktų operacijų rezultatus.
Komandos, kaip jau buvo paminėta anksčiau, sąlyginai galima suskirstyti į aritmetinių operacijų, kodų keitimo operacijų, valdymo operacijų ir išorinių įrenginių valdymo komandų grupes.

4.4.1. Bendrieji dvejetainių komandų algoritmai
Bendrieji dvejetainių komandų algoritmai susieja anksčiau šiame skyriuje aprašytus dalykus: simbolių ir skaičių išraiškas, komandų sandarą, atminties struktūras ir kt. Tai leidžia įsivaizduoti kompiuterio veiksmus, realizuojant konkrečias komandas. Jeigu bendrieji komandų algoritmai nebūtų čia pateikti, tai, aprašant atskirų komandų algoritmus, tektų daugelį dalykų kartoti kiekvienos komandos aspektu, nes kai kurios jų algoritmo dalys yra panašios ar net tos pačios:
– visoms komandoms;
– kai kurioms komandų grupėms;
– skirtingų grupių atskiroms komandoms.
Kadangi dvejetainių komandų sistemoje yra keletas dešimčių komandų (be pagrindinių modifikacijų) ir jos savo komponentų turiniu yra skirtingos, tai jų pateikimas gali būti išsamus ir visapusiškas tik įvedus formalių išraiškų sistemą, t.y. komandų sandaros bei jų vykdymo aprašymus pateikiant matematizuotomis priemonėmis.
Tegu bet kurios komandos formali išraiška yra:

. (4.1)

Čia b yra komandos adresas operatyviojoje atmintyje, OP – operacijos kodas, I – indeksas, a1 ir a2 – duomenis nustatantys komandos komponentai.
Indeksas

,

kur R yra registro (nuo 0000 iki 0111) kodas, o n – atminties bloko kodas (nuo 00000 iki 11111).
Prieš formuluojant komandų algoritmus, būtina apibrėžti registrų paskirtis, apie kurias jau dalinai buvo rašyta anksčiau, suprantama, sąlyginai suteikiant jų numeriams tam tikras funkcijas ir reikšmes. Šie sąlyginumai yra neveiksmingi tik nuliniam R0 registrui, nes jis komandos algoritme nedalyvauja, o jo įrašymas į komandą reiškia jokio registro, tame operande, kur jis įrašytas, nebuvimą. Be to, svarbiausia, kad nulinis registras yra visos operatyviosios atminties priekyje ir jeigu kreipiamės į atmintį, tai pirmiausiai programa analizuoja R0 ir veikia toliau pagal operaciją, kurios komanda nurodyta šiame registre. Kitiems, žemiau aprašomiems registrams, suteikiamos tokios funkcijos.
Tegul registrai R1 ir R2, kaip jau anksčiau matėme, bus skirti komandos apdorojamų duomenų adresų modifikavimo parametrams.
Registras R3 naudojamas prieš vykdomą komandą anskčiau ėjusios komandos operacijos atlikimo rezultatui įsiminti.
Registras R4 – tai komandų adresų operatyviojoje atmintyje įsiminimo registras. Šis registras procesoriaus programos pradžioje nustatomas, kaip pirmasis programos adrsas. Jeigu pirmoji komanda nėra valdymo perdavimo komanda, tai prie pirmojo adreso pridedamas toks skaičius, kokio ilgio analizuojamoji komanda. Mūsų nagrinėjamuoju atveju pridedamas skaičius šeši, nes komandų ilgis yra šiuo atveju šeši baitai. Jeigu komanda perduoda valdymą ne nuosekliai, o peršokant tam tikrą komandų skaičių, tai į R4 įnešamas tos komandos adresas operatyviojoje atmintyje, į kurią bus atliktas valdymo perdavimas. Matomai aišku, kad tolesnis komandų skaitiklio keitimas, arba R4 turinio keitimas atliekamas visiškai taip pat ir toliau, kai analizuojami ne pirmieji, o kiti programos komandų adresai operatyviojoje atmintyje.
Registras R5 laikytinas pagrindiniu (mūsų atveju) registru, nes į jį, pagal R4 reikšmę įrašoma komanda, kuri toliau vykdoma. Taigi, procesorius konkrečią komandą vykdo ne operatyviojoje atmintyje, o specialioje registrų atmintyje, šiuo atveju – registre R5.
Registrai R6 ir R7 naudojami programuotojų nuožiūra.
Bendrųjų dvejetainių algoritmų pagrindą sudaro:
A. Formali operatyviosios atminties adresų išraiška.
B. Formalios adresų turinio išraiškos.
C. Adresų modifikacijos komandose.
D. Adresų turinio kaitos algoritmas.

A. Formali operatyviosios atminties adresų išraiška. Kaip jau anksčiau buvo minėta, operatyviąją atmintį sudaro registrai ir operatyviosios atminties baitai. Čia nagrinėjamuoju atveju aštuoni registrai turi po šešis baitus kiekvienas, o pati atmintis suskirstyta sąlyginai į atminties ląsteles taip pat turinčias po šešis baitus. Ląstelės sudaro atminties blokus. Norint rasti reikiamą duomenį (registre arba pagrindinėje atmintyje), būtina žinoti registro numerį Rx, arba atminties ląstelės adresą b.
Formaliai visus operatyviosios atminties adresus galima užrašyti dviem tvarkiosiomis aibėmis:
– registrų tvarkiąja aibe


,

kur 0 ir yra vykdomieji tų duomenų adresai. Tada programa apskaičiuojanti y bus:
1) 30 00
2) 20 R60 R3
3) 30 00
4) 10 00 R3
5) 40 00 R6 R3.
Taigi rezultatas bus registre R3:

.

Norint gauti programos šešioliktainę išraišką (arba dvejetainę) ir matyti, kokia ta programa yra kompiuterio atmintyje, būtina aptarti, kai kuriuos sąlygotumus, kurie pateikti y apskaičiavimo programoje.
Pirmiausia tai indeksinio baito išraiška;

.

Jeigu n yra nulinis atminties blokas, tai a1 ir a2 bus tokie pat skaičiai ir modifikuoti pagal (4.8)

0  65536 + a2  R.

Tai reiškia, kad R1 = a1, R2 = a2.
Antrojoje programos komandoje nurodytas registras R6 su n lygiu nuliu turėtų programoje atrodyti taip:

110 / 00000, t.y. C016 .

Antrojoje komandoje esantis registro numeris užrašomas taip kaip parodyta išraiškoje (4.3), tik šiuo atveju registrui užrašyti skirti ne visa ląstelė, kurią sudaro šeši baitai, o tik du baitai. Duomuo užrašomas analogiškai išraiškai (4.4).
Taigi, jeigu skaičiai a, b, c ir x bus nulinio atminties bloko adresuose atitinkamai:
– a – adrese 1;
– b – adrese 2;
– c – adrese 3;
– d – adrese 4;
– x – adrese 5,
tai antroji programos komanda atrodys taip:

20 C0  3 03.

Šios komandos dvejetainis vaizdas bus toks (pagal lentelę 4.1):
– 20  0010 0000;
– C0  1100 0000;
–  3  001 10 11 1111 0011;
– 03  1111 0000 1111 0011/
Patogiausia dvejataines komandas analizuoti, kai jos užrašomos šešioliktainiais kodais:
1) 30 00 F0 F1 F0 F5
2) 20 C0 1B F3 F0 F3
3) 30 00 F0 F2 F0 F5
4) 10 00 F0F4 1B F3
5) 50 00 1B F6 1B F3.
Būtina atkreipti dėmesį ir prisiminti, kad pirmieji du komandos baitai – tai operacijos kodo ir indekso baitas užrašomi šešioliktainiu – dvejetainiu pavidalu kompiuterio atmintyje tiesiogiai. Adresams skirti keturi baitai (kiekvienam adresui po du) informuojami pagal lentelės 4.1 kodus, nes čia būtinas ir protarpis, kuris įgalina atskirti nulinio atminties bloko pirmuosius adresus nuo atminties registrų numerių. Tai atliekama lygiai taip pat, kaip išraiškose (4.3) ir (4.4), tik ten buvo naudojama visa ląstelė, o čia – komandose – tik du baitai. Be to, komandose pateikiami operandai ne dvejetainiu būdu ar simboliais, o šešioliktainiais skaičiais.
Būtina pastebėti, kad pateiktoji programa gali veikti tik tada, kai specialiai parenkamos konstantų ir kintamojo reikšmės. Taigi realiomis sąlygomis ta programa veikti negalės, nes ji negali spręsti uždavinio, kai tektų:
– skaičių dalinti iš nulio;
– dalybos rezultatas yra trupmena periode;
– sandauga netelpa į rezultatui skirtą atminties vietą;
– atskirti skaičiaus sveikąją dalį nuo trupmeninės ir t.t.
Šiuo ir į juos panašius uždavinius gali išspręsti kartu naudojamos kitų operacijų grupių komandos su pagalbinėmis aritmetinėmis komandomis. Pastarųjų komandų pavadinimai ir kodai buvo pateikti šio skirsnio pradžioje.
Jeigu norima naudoti pagrindines aritmetines operacijas su didesniais skaičiais nei dvylika skaitmenų (šešių baitų ląstelėje telpa 12 skaitmenų skaičiai) tai gali būti naudojamos komandų modifikacijos. Modifikacijos M=1, pagrindinių aritmetinių komandų kodai:

11, 21, 31, 41,

įgalina operuoti su dvigubu skaitmenų skaičiumi, t.y. 24 skaitmenimis.
Modifikacijos M=2 pagrindinių aritmetinių komandų kodai:

12, 22, 32, 42,

įgalina operuoti su skaičiais, pateiktais su slankiuoju tašku. Tokia skaičių pateikimo forma išsamiau buvo pateikta anksčiau – poskyryje 4.1.
Kaip buvo matyti iš aukščiau šiame skirsnyje pateiktos programos paprastosioms pagrindinėms komandoms charakteringa savybė – atsiminti atliktos operacijos rezultatą ne tik R3 registre, bet ir registre, kuris nurodytas indeksiniame baite. Suprantama, jeigu indeksiniame baite nurodomas tas pats registras R3 arba R0 – t.y. nenurodomas joks registras, tai operacijos rezultatas atsimenamas tik R3.
Komandų su dvigubu duomenų ilgiu charakteringos savybės yra:
– indeksiniame baite turi būti nurodytas ląstelės adresas, kurioje bus užrašomo operacijos rezultato pradžia. Operacijos rezultato pabaiga užrašoma į ląstelę, einančią tuoj pat už nurodytosios registre ląstelės;
– komandos adresai a1 ir a2 negali būti greta einančių ląstelių adresais, nes pradiniai duomenys nurodomi ląstelėse a1 + 6 ir a2 + 6 baitai.
Duomenys su slankiuoju tašku sudedami, atimami, dauginami ir dalijami taip pat, kaip duomenys operacijose su viengubu duomens ilgiu. Čia turimas tik toks savitumas, kad prieš atliekant minėtąsias operacijas, tenka panaudoti kitas operacijas, kurios perveda skaičius į formą su slankiuoju tašku ir tuos skaičius normina.
Komandos 10, 20, 30, 40 ir 11, 21, 31, 41 laikomos komandomis, kurias įvykdžius ar vykdant, operacijos atliekamos su duomenimis bei rezultatas gaunamas su taip vadinamu fiksuotu tašku. Tai reiškia, kad operacija atliekama su sveikaisiais skaičiais arba trupmeniniais skaičiais dirbtinai perdarytais į sveikuosius skaičius. Skaičiaus-operacijos rezultato taško, nurodančio trupmeninę dalį, vietos nustatymu turi pasirūpinti programuotojas, kiekvieną kartą atskirais veiksmais, naudodamas pagalbines aritmetines operacijas bei kitokio tipo operacijos.
Toliau šiame skirsnyje bus pateikti pagalbinių aritmetinių komandų algoritmai ir jų įvykdymo pavyzdžiai. Kadangi dvigubo ir viengubo ilgio skaičių aritmetinės ir kitos operacijos praktiškai niekuo nesiskiria, išskiriant skaičiaus ilgį skaitmenimis, tai toliau visos operacijų komandos bus pateikiamos su viengubo ilgio skaičiais.

Skaičiaus pervedimo į formą su slankiuoju tašku komanda

50 00 a1 a2.

Į formą su slankiuoju tašku pervedamas dešimtainis skaičius, esantis adrese a2. Pervestasis skaičius yra šešioliktainis su slankiuoju tašku. Kiekvienas šešioliktainio skaičiaus skaitmuo išreiškiamas simbolių, parodytų lentelėje 4.1 keturių mažiausių skilčių skaitmenimis nuo 0000 ir 1111. Mantisės ženklas nurodomas nuliniame ląstelės bite, o skaičiaus eilės ženklas – keturiasdešimtajame bite. Apie tai smulkiau buvo rašyta poskyryje 4.1.
Pervestasis skaičius į formą su slankiuoju tašku įrašomas į registrą R3 ir į atminties adresą a1.
Jeigu prieš operacijos atlikimą a2 turinys buvo:
a) 255=+255 = 02E2E5E51B1B,
b) -255=-255 = 03E2E5E51B1B,
c) 0.0004=E001E0E0E0E4,
tai po operacijos pagal komandą 50 atlikimo (R3) ir (a1) turinys bus atitinkamai:
a) 00 00 00 FF 0000,
b) 80 00 00 FF 0000,
c) 00 00 00 04 8004.
Akivaizdu, kad aritmetiniai veiksmai su skaičiais, turinčiais formą su slankiuoju tašku, atliekami komandomis, kurių modifikacija m=2, t.y.:

12, 22, 32, 42.

Skaičiaus pervedimo į formą su fiksuotu tašku komanda

51 00 a1 a2.

Šios komandos operacija atvirkščia komandos 50 operacijai. T.y. pradiniai duomenys yra tokie, kokie 50 komandos rezultatai. Pradiniai duomenys yra adrese a2, o rezultatai įrašomi į R3 ir a1. Pabrėžtinas ir vienas skirtumas. Jeigu rezultatai netelpa į a2 bei R3, tai į R3 įrašoma rezultato pradžia, o į ląsteles a1 ir a1+b įrašomas visas rezultatas.
Būtina pabrėžti, kad dalijamasi turi būti įrašytas į adresą a2, o daliklis – a1. Jeigu pasirodo, kad dalmuo yra periodinis skaičius, tai jo reikšmė užbaigiama įrašymu registruose R6 arba R7.

Skaičiaus apvalinimo komanda

55 00 a1 a2.

Pagal šią komandą atliekama operacija, kuri apvalina trupmeninę skaičiaus dalį, kuris yra įrašytas adrese a2. Apvalinimo parametras nurodomas adrese a1.
Pabrėžtina, kad apvalinimo komanda su jo parametru, nurodytu adrese a1 taikoma ne vienai, o visoms po šios komandos vykdomoms pagrindinėms aritmetinių komandų operacijoms tol, kol nesutinkama kita komanda 55 su kitokiu a1 turiniu arba kol nesutinkama apvalinimo blokavimo komanda.

Apvalinimo blokavimo komanda

56 00 0000 0000.

Pagal šią komandą tolesnių aritmetinių operacijų rezultatai neapvalinami tol, kol nutinkama apvalinimo komanda 55.

Dvejetainių vienetų nustatymo komanda

57 00 a1 a2.

Pagal šią komandą atliekama operacija, kuri nustato kiek dvejetainių vienetų yra užrašyta duomenyje (nebūtinai skaičiuje) esančiame adrese a2.
Vienetų kiekį nurodantis skaičius užrašomas į R3 ir į a1. Ši komanda naudojama kodų, esančių adrese kontrolei. Pavyzdžiui, skaičiaus lygiškumui arba nelygiškumui nustatyti.

4.4.3. Kodų keitimo operacijų komandos

Kodų keitimo grupės komandos, kartu su aritmetinėmis, yra komandos, kurios tiesiogiai apdoroja duomenis juos keisdamos ar gaudamos naujus duomenis. Jeigu aritmetinių operacijų rezultatas – nauji duomenys, kaip kiekybiniai apdorojimo rezultatai, tai kodų keitimo rezultatai – kokybiniai pakitimai. Tas kokybinis pakitimas dažniausiai pasireiškia struktūriniais duomenų keitimais, kuriuos diktuoja konkretaus duomenų apdorojimo priežastys ir logika. Abi operacijų grupės įgalina praktiškai atlikti bet kokias matematines operacijas.
Visas kodų keitimo komandas galima sąlyginai suskirstyti į tokių operacijų atlikimo komandas:
– logines;
– kodų perdavimo (persiuntimo);
– priskyrimo;
– postūmio.
Kaip jau buvo anksčiau minėta, pirmasis kodų keitimo komandų komandos kodo skaitmuo šešioliktainis skaitmuo šeši (6). Tad toliau bus pateiktos kodų keitimo komandos su komandos identifikuojančiais jų pačių kodais.
Loginėms kodų keitimo operacijoms priskirtinos komandos:
– palyginimo – 60;
– loginės daugybos – 61;
– loginės sudėties – 62;
– ciklinės sudėties – 63.
Kodo perdavimo operacijoms priskirtinos komandos:
– persiuntimo – 64;
– persiuntimo su skaičiaus ženklo pakeitimu – 65;
– skaičiaus modulio persiuntimo – 66;
– adreso persiuntimo iš registro – 67.
Priskyrimo operacijoms priklauso komandos:
– kodo perėmimo iš klaviatūros – 68;
– skaičiaus ženklo priskyrimo – 69.
Postūmio operacijų komandos yra:
– loginis postūmis – 6A;
– aritmetinis postūmis – 6B.

Palyginimo operacijos komanda

60 00 a1 a2

Pagal šią komandą atliekama operacija IŠSKIRTINĖ ARBA su visais 48 šešių baitų ląstelės dvejatainiais kodais

0
0 = 0,
1
0 = 1,
0
1 = 1,
1
1 = 0.

Operacijos rezultatas įrašomas į registrą R3, o jeigu tokį kodą reikia išsaugoti ilgiau (atliekant kitas komandas), tai naudojama komandos modifikacija

60 R/n a1 a2.

Šiuo atveju operacijos rezultatas įrašomas ir į registrą R, nurodytą indeksinėje komandos ląstelėje.
Jeigu (a1)=F0A5F8160FAA

(a2)=0F6D30CF55CC.
Kai R=R3 , tai (R3)=FFF8C8D95A66.

Loginės daugybos operacijos komandų

61 00 a1 a2,
61 R/n a1 a2,

algoritmai visiškai sutampa su praėjusios komandos algoritmais. Skiriasi tik skilčių sąveikos rezultatas:

0 0 = 0,
1 0 = 0,
0 1 = 0,
1 1 = 1,

ir parodytojo pavyzdžio rezultatas:

Jeigu (a1)=F0 A5 F8 16 0F AA

(a2)=0F 6D 30 CF 55 CC
Tai (R3)=00 25 30 06 05 88.

Loginės sudėties operacijos komandos

62 00 a1 a2,
62 R/n a1 a2.

Skilčių sąveikos rezultatas:

0 0 = 0,
1 0 = 1,
0 1 = 1,
1 1 = 1.

Jeigu (a1)=F0 A5 F8 16 0F AA

(a2)=0F 6D 30 CF 55 CC
Tai (R3)=FF ED F8 DF 5F EE.

Įvairus ir nevienkartinis loginių operacijų taikymas duomenų apdorojimui kartu su kitomis operacijomis apdorojimo procesą veda prie tikslo – apdorojimo rezultato gavimo. Paskutinė loginė operacija – ciklinė sudėtis turi kitokio pobūdžio tikslus. Tai dvejetainių duomenų kontrolė.

Ciklinės sudėties operacijos komanda

63 00 a1 a2

inicijuoja dvejatainių kodų sudėtį pagal taisykles:

0 + 0 = 0,
1 + 0 + 1,
0 + 1 = 1,
1 + 1 = 10.

Sudedami dvejetainiai kodai esantys adresuose a1 ir a2. Suma užrašoma (žinoma į R3) ir į a2. Jeigu suma išeina iš 48 skilčių ribų, tai vienetas papildomai pridedamas prie paskutiniosios (a2) skilties turinio.
Tegu

(a1)=838F0569C318,

(a2)=800000000001,

tai (a2)= 038F0569C319 + 1,

(a2)= 038F0569C31A.

Tą pačią operaciją atliekant su dvejetainiais skaičiais

(a1)= 1000 . 1000,
(a2)= 8000 . 0001.

Sudėjus dvejetainius skaičius gaunama suma

(a2)= 1000 . 1001,
(a2)= 000 . 1010.

Cikliškai (kitomis operacijomis) keičiant a1 turinį, ir atliekant operaciją 63, a2 adrese gaunama tam tikros duomenų sankaupos dvejatainė-šešioliktainė kontrolinė suma, kuri įgalina lengvai fiksuoti pakitimus duomenų sankaupoje. Taip atliekama duomenų kontrolė, nustatant nesankcionuotą jų keitimą.

Viena iš dažniausiai naudojamų kodų perdavimo komandų yra
Duomenų persiuntimo komanda

64 00 a1 a2.

Pagal šią komandą duomenys,esantys adrese a2, persiunčiami į adresą a1 be jokių pakeitimų. Po operacijos atlikimo (a2) nepasikeičia, bet

(a1) = (a2).

Jeigu laikome, kad a1 ir a2 turinys prieš atliekant operaciją 64 buvo toks, koks prieš atliekant loginės daugybos operaciją 61, tai operacijos rezultatas bus

(a1) = (a2) = 0F 6D 30 CF 55 CC.

Persiuntimo su skaičiaus ženklo pakeitimu komanda

65 00 a1 a2.

Pagal šią komandą dvejetainis skaičius iš adreso a2 persiunčiamas į adresą a1. Siuntimo metu pakeičiamas skaičiaus ženklas į priešingą. Jeigu a2 nulinėje skiltyje buvo vienetas (minus), tai a1 nulinėje skiltyje įrašomas nulis (plius) ir atvirkščiai. Vietoj nulio a2 nulinėje skiltyje, a1 nulinė skiltis turės vienetą.

Skaičiaus modulio persiuntimo komanda

66 00 a1 a2.

Pagal šią komandą iš adreso a2 į adresą a1 persiunčiamas skaičius. Jeigu skaičius buvo teigiamas, tai ši komanda visiškai sutampa su komanda 64. Jeigu skaičius buvo neigiamas, tai persiunčiamos skiltys tiktai nuo 1 iki 48. Nuliniame bite buvęs vienetas ir reiškęs, kad skaičius neigiamas, paliekamas adrese a2.

Adreso persiuntimo iš registro komanda

67 00 a1 a2.
Pasibaigus įvesties operacijai, kai į operatyviąją atmintį įrašomas tam tikro kiekio įrašų laukas, registre R3 automatiškai užrašomas pirmojo baito adresas, kuris yra laisvas (neužimtas įrašais) po įsimintojo duomenų lauko. Bet kuri komanda, atlikta po įvesties komandos, pakeistų R3 turinį savo operacijos rezultatu. Tad komanda 67 naudojama pirmoji po duomenų įvesties komandos. Be to ši komanda gali būti naudojama, kai reikia įsiminti kitokių atliktų operacijų rezultatą.

Kodo perėmimo iš klaviatūros komanda

68 00 00 a2.

Ši komanda į adresą a2 įrašo kodą, kuris pateikiamas paspaudus bet kurį klavišą. Suprantama, kad kiekvienas klavišas turi skirtingą kodą, todėl tolesni veiksmai priklauso nuo to, koks kodas buvo įvestas. Tuos veiksmus sprendžiant uždavinį turi nurodyti programuotojas. Kompiuterio valdymo klavišų kodai negali būti atsiminti. Jie tiesiogiai vykdomi procesoriaus.

Skaičiaus ženklo priskyrimo komanda

69 00 a1 a2.

Pagal šią komandą atliekama operacija skaičiaus, esančio adreses a2 ženklą priskiria skaičiui, esančiam adreses a1.

Loginio postūmio komanda

6A 00 a1 a2.

Pagal šią komandą atliekama operacijos, kuri visas atminties ląstelės, nurodytos adresu a2 turinį gali pastumti per visas 48 skiltis. Postūmio kryptis ir didumas nurodomi a1. Iš ląstelės “išstumtų” skilčių turinys prarandamas, jeigu juo nebuvo anksčiau pasirūpinta kitomis komandomis.
Postūmio konstanta nurodoma adreses a1. Postūmio didumas skiltimis nurodomas 41-48 a1 skiltyse, o postūmio ženklas – skiltyje 40. Jeigu postūmio ženklas yra teigiamas (40)=0, tai postūmis atliekamas į dešinę, jeigu neigiamas (40)=1 – į kairę.

Aritmetinio postūmio komanda

6B 00 a1 a2.

Ši komanda visiškai analogiška loginio postūmio komandai 6A. Bet postūmyje nedalyvauja skaičiaus ženklo skiltis, t.y. pastumiamos 47 skiltys. Ženklo skiltis (0) visais atvejais lieka nepakitusi.

4.4. Valdymo operacijų komandos

Jau anksčiau buvo pasakyta, kad programos komandos vykdomos paeiliui, viena po kitos. Bet dažnai, priklausomai nuo operacijų atlikimo rezultatų ar kitokių veiksnių, programose tenka atlikti šuolius, t.y. peršokti dalį paeiliui einančių komandų, pasukti komandų vykdymą tam tikra programos šaka, pereiti į programinio komandų atlikimą, sugrįžtant į ten kur išeita, į tolesnį komandų vykdymą paeiliui ir t.t. Komandos, kurios atlieka tokius šuolius bei perėjimus vadinamos bendru valdymo operacijų komandų vardu.
Pagal valdymo komandas gali būti atliktos operacijos:
– programos stabdos – 70;
– pertraukties drausties / leidimo – 71;
– nesąlyginės pereigos – 7M;
– pereigos į paprogramį – 78;
– ciklo – 79.
Čia M gali būti lygi 3, 4, 5, 6, 7, t.y. komandos: 73, 74, 75, 76, 77.
Operacija 7M vykdoma, kai anksčiau įvykdyta operacija tenkina sąlygą:
– teigiamas arba neigiamas rezultatas (perėjimas pagal skaičiaus ženklą) – 73;
– rezultatas nulis (perėjimas jeigu nulis) – 74;
– ląstelės perpildymas (perėjimas jeigu perpildymas) – 75;
– rezultatų sutapimas ( perėjimas dėl sutapimo) – 76;
– rezultatų nesutapimas (perėjimas dėl nesutapimo) – 77.

Programos stabdos komanda

70 00 a1 a2.

Pagal šią komandą programos vykdomas sustabdomas. To dažniausiai prireikia tam, kad galutinis vartotojas arba programuotojas vizualiai įsitikintų ar verta toliau tęsti programos darbą, ar imtis kitokių veiksmų. Prieš programos pertraukties komandos įvykdymą paprastai pasirūpinama, kad reikiami rezultatai būtų vizualiai matyti displėjuje.

Pertraukties drausties / leidimo komanda

Pertraukties komandos šiuolaikiniame kompiuterių bendrajame programiniame aprūpinime atlieka daug ir įvairių operacijų. Tai susieta su tuo, kad probleminės programos veikimą arba jos vykdymą nuolat tenka pertraukti, nes reikia kreiptis “pagalbos” į bendrąjį programinį aprūpinimą, kad jis atliktų bendrus darbus visoms probleminėms programoms arba tam tikroms jų klasėms.
Apskritai programos vykdymo pertrauktis gali būti iš anksto numatyta arba nenumatyta.
Nenumatytoms pertrauktims priskirtini atvejai, kai programoje sutinkami nekorektiški komandų kodai nekorektiškos duomenų išrauškos, kurios yra tiesiog klaidų pasekmės ruošiant programos ir duomenis. Kitas nenumatytų pertraukties priežasčių poaibis – tai nekorektiški probleminių programų algoritmai, pagal kuriuos vykdomos programos pačios sukuria situacijas, kurios negali būti išspręstos.
Numatytoms programos pertraukties priežastims pirmiausiai priklauso, kaip jau buvo minėta, kreipiniai į sistemines arba bendrąsias programas. Čia, mūsų atveju, kai bendrosios programinės įrangos nėra, arba tiksliau, kaip nagrinėjamas programų lygmuo, kuris yra bendras bet kokioms programoms ar jos bendrosios ar taikomosios (probleminės), pertraukties komandos suprantamos, kaip tam tikrų kompiuterio procesoriaus veiksmų derinimas su išorinių įrenginių veiksmais. Tai įgalina, kai kuriuos darbus atlikti lygiagrečiai. Pavyzdžiui, procesoriui skaičiuojant tam tikrą algoritmo dalį, tuo pačiu metu duomenų išvesties įrenginys atlieka išvesties darbus. Kitaip sakant, kai kuriuos uždavinius galima spręsti racionalesniu būdu. Neracionalus būdas būtų toks. Išsprendžiamas pilnai probleminis uždavinys, o tada duomenys išvedami ir atspausdinami popieriuje. Racionalesnis būdas – pertraukties komandų pagalba kartu sprendžiamas ir rezultatinių duomenų gavimas ir atliekama jų išvestis. Suprantama, kad gali būti uždavinių, kurių taip realizuoti neįmanoma arba tiesiog to daryti nereikia.

Pertraukties drausties / leisties komandos operatorius yra

71 00 a1 0000.

Adreses a1 pateikiama skaitinė dvejatainė konstanta k, kuri ir nurodo ar komanda yra:
– pertrauktį draudžianti;
– pertrauktį draudžianti;
– į kokius išorinius įrenginius kreipiamasi leidžiant pertrauktį
– pertraukties drausties ar leidimo stovis keičiamos priešingų, nei komandos vykdymo metu yra.
Jeigu k sudaro vienas baitas, tai vyriausioje skiltyje esantis vienetas

1000 0000

pertrauktį draudžia, o

0000 0000

pertrauktį leidžia. Šiuo atveju likę septynios skiltys nurodo ar nenurodo išorinius įrenginius, kai bet kuriai skilčiai turint reikšmę 1 (vientas) kreipiamasi į tam tikrą įrenginį, o programa tęsia darbą, jeigu skilties reikšmė yra 0 (nulis), tai programai nutraukus darbą ar dirbant į įrenginį nesikreipiama. Suprantama, kad, pagal programos vykdymo tarpinius rezultatus galima k reikšmę įvairiai kaitalioti loginės sudėties, daugybos būdu ar kitaip.
Pertraukties drausties ar leidimo konstanta reikalinga tam, kad programuotojui sunku susiorientuoti kokias 71 tipo komandas perėjusi yra programa iki jam reikiamos vietos, todėl režimo keitimas norimu režimu suteikia papildomas galimybes.

Nesąlyginės pereigos komanda

72 00 a1 0000.

Tai viena iš paprasčiausių valdymo operacijų komandų, kuri be jokių sąlygų perduoda valdymą komandai, esančiai adreses a1. Laikoma savaime suprantama, kad esant nenuliniam indeksiniam baitui, fizinis adresas apskaičiuojamas padauginus bloko numerį iš maksimalaus jo ilgio ir prie sandaugos pridėjus a1 turinį bei rezultatą įrašius į registrą R1. Tai smulkiau buvo aprašyta skirsnyje 4.4.2 (formulėje 4.8).

Sąlyginės pereigos komandos

7M 00 a1 0000

arba 7M 00 a1 a2.
Komanda

73 00 a1 0000

perduoda valdymą į komandą, esančią adrese a1 (t.y. fiziniame adrese R1), jeigu registre R3 (prieš ėjusios komandos rezultatas yra teigiamas skaičius).
Komanda

74 00 a1 0000

perduoda valdymą į R1, jei (R3) turinys yra neigiamas skaičius.
Komanda

75 00 a1 0000

perduoda valdymą į R1, kuriame yra adresas komandos, kuriai perduodamas valdymas, jei R3 turinys yra nulis.
Komandos

76 00 a1 a2
ir
77 00 a1 a2

sulygina R3 turinį su a2 adreso turiniu ir sutapimo atveju 76 komanda perduoda valdymą į adresą a1, nesutapimo atveju, komanda 77 perduoda valdymą į adresą a1.
Jeigu komandų 73, 74, 75, 76 ir 77 reikalavimai netenkinami, vykdomos komandos, esančios už šių minėtųjų komandų, t.y. jų pačių vykdymas neatliekamas.

Pereigos į paprogramį komanda

78 00 a1 a2.

Tai viena naudingiausių komandų, leidžianti racionaliai sudaryti daugumą kiek nors sudėtingesnių programų bei racionaliai jas vykdyti. Reta programa apsieina be tam tikrų veiksmų (komandų grupių) vykdymo pasikartojimo. Pačio paprogramio idėja yra tame, kad pasikartojančių komandų grupių nereikia į programą įrašyti tiek kartų, kiek yra pasikartojimų, o pakanka užrašyti tokią komandų grupę vieną kartą. Ta komandų grupė ir vadinama paprogramiu. Pereigos į paprogramį komanda gali būti bet kurioje reikiamoje pagrindinės programos vietoje ir kreiptis į paprogramį reikiamą skaičių kartu taip, kad kiekvieną kartą įvykdžius paprogramio komandų operacijas, būtų grįžtama į sekančią komandą po tos

78 00 a1 a2

iš kurios buvo kreiptasi į paprogramį.
Pereigos į paprogramį komandos adrese a1 nurodomas paprogramio komandos adresas ir atliekama tos komandos operacija. Prieš kreipiantis į paprogramį, adrese a2 turi būti paskutinės paprogramio komandos adresas. Pereigos į paprogramį komanda pati sudaro nesąlyginės pereigos komandą

72 00 R4+6 0000.

Tai reiškia, kad prie pereigos į paprogramį komandos mašininio adreso, kuris, kaip jau anksčiau buvo minėta, yra registre R4, pridedamas perėjos į paprogramį komandos ilgis (6 baitai). Tokiu būdu nesąlyginės pereigos į paprogramį adresas

a1= R4 + 6

nurodo tuoj pat už šios komandos einantį sekančios komandos adresą. Taigi, atlikus paprogramio komandų nurodytas operacijas, komanda

72 00 R4+6 0000

grįžtama toliau vykdyti pagrindinės programos į adresą, esantį už pereigos į paprogramį komandos.
Tegu pereigos į paprogramį komanda yra adrese b1, įeities į paprogramį komanda adrese bm, o išeities iš paprogramio – bn.
Šiuo atveju bus toks adresų ir komandų išdėstymas.
Pagrindinė programa:

Paprogramis:

Čia:

– X 00 a1 a2

Šiuo atveju yra bet kokia konkrečioje situacijoje reikalingą operaciją galinti atlikti komanda.
Laikytina savaime suprantamu dalyku, kad kreipiantis į adresą bm iš kitos programos vietos b2 nurodys kitą adresą, bet visada einantį tuoj pat po pereigos į paprogramį komandos.

Ciklo komanda

79 00 a1 a2.

Ciklu vadinama grupė komandų, kurios operacijų vykdymas kartojamas iš anksto numatytą skaičių kartų. Paskutinioji ciklo grupės komanda (turinti iš visų komandų didžiausią skaitinę atminties adreso reikšmę yra ciklo valdymo komanda 79. Pirmoji ciklo komandų grupės komanda yra atminties adreses a1. Ciklo komandų pasikartojimo skaičius užduodamas adrese ak. Kiekvieną kartą atėjus valdymui į komandą 79, be kitų veiksmų, iš a2 skaitinio turinio atimamas vienetas. Po to tikrinamas a2 turinys. Jeigu

(a2) > 0,

tai valdymas perduodamas į adresą a1, t.y. ciklo pradžią ir visos ciklo operacijos kartojamos. Jeigu

(a2) < 0,

ciklo valdymo komanda nevykdoma ir išeinama iš ciklo, vykdant komandą, kuri yra už 79 ciklo valdymo komandos.
Pirmą kartą į ciklą paprastai įeinama neutraliai, t.y. iš eilės vykdant programos komandas. Tai reiškia, kad ciklas kartojamas tiek kartų, koks pasikartojimų skaičius nurodytas adrese a2 ir dar vienas kartas, kai a2 turinys jau buvo nulis. Todėl bendru atveju adresas a2 turi būti nurodytas ciklų skaičius ne n, o n-1.
Komanda 79 skirta organizuoti ciklišką tos pačios grupės komandų vykdymą tuo atveju, kai iš anksto žinomas cikliško komandų vykdymo skaičius. Kai toks skaičius nėra žinomas, ciklai organizuojami pasitelkus sąlyginės pareigos komandas, naudojant palyginimo bei aritmetinių komandų operacijas.
Pastarieji veiksmai bus atskleisti, kai bus aprašomi dvejetainio programavimo technikos elementai.
Prieš įeinant į ciklo komandų grupę būtina pasirūpini, kad a2 būtų ciklo pasikartojimų skaičius. Nepasirūpinus tuo, ciklų skaičius gali būti labai didelis, atsitiktinis, o jei (a2)<0, tai ciklas visai nevykdomas.
4.4.5. Išorinių įrenginių valdymo komandos

Leave a Comment