02

Principy činnosti práce číslicového počítače

V této kapitole se dozvíte:

  • Z jakých podsystémů se skládá číslicový počítač?
  • Jaké jsou hlavní funkce jednotlivých podsystémů počítače?
  • Jak se zobrazují jednotlivé informace v počítači?
  • Jakými metodami se určují operandy v instrukcích počítače?

Po jejím prostudování byste měli být schopni:

  • Charakterizovat činnost počítače, rozumět samočinnému způsobu zpracování programů v číslicovém počítači.
  • Znát způsob zobrazování jednotlivých typů informací ukládaných v paměti počítače. Porozumět dvojkové soustavě a základním operacím v této soustavě, pochopit zobrazování v pevné a pohyblivé řádové čárce.
  • Popsat různé metody určování operandů instrukcí což je velmi důležité pro pochopení některých algoritmů operačních systémů.

Klíčová slova této kapitoly:

Von Neumannovo schéma počítače, operační paměť, operační jednotka, řadič, vstupní a výstupní zařízení, instrukční cyklus řadiče, dvojková soustava, instrukce, operand.

Doba potřebná ke studiu: 6 hodin

Průvodce studiem

Studium této kapitoly je poměrně náročné zejména pro ty z Vás, kteří dosud nemají žádné znalosti z oblasti architektury číslicových počítačů. V takovém případě Vám zřejmě některé principy činnosti počítače budou připadat obtížně pochopitelné, ovšem nenechte se tím odradit, neboť pochopením této části se Vám usnadní studium následujících kapitol.

Na studium této části si vyhraďte alespoň 6 hodin. Doporučujeme studovat s přestávkami vždy po pochopení jednotlivých podkapitol. Po celkovém prostudování a vyřešení všech příkladů doporučujeme dát si pauzu, třeba 1 den, a pak se pusťte do vypracování korespondenčních úkolů.

2.1 Úvod

Číslicové počítače zpravidla chápeme jako stroje na zpracování informace. Obecně počítače jsou především matematickými stroji, jejichž úkolem je transformace číselných (diskrétních) vstupních hodnot, vstupních údajů. Jsou dále stroji elektronickými, což určuje fyzikální podmínky realizace úkolů transformace číselných údajů. Konečně jsou stroji samočinnými, což znamená, že uvedený úkol realizují bez přímé účasti člověka. Základem pro samočinnost funkce je existence paměti počítače, v níž je uchován návod pro řešení (program) a řídící jednotky, která dokáže tento návod interpretovat v postup.

Činnost počítače lze charakterizovat principiálně takto:

  • Počítač přijímá na svém vstupu texty nad vstupní abecedou, transformuje je na texty nad vnitřní abecedou (kódování vstupní informace do vnitřní reprezentace) a ukládá je do paměti.

  • V paměti provede zpracování.

  • Zpracované texty transformuje do výstupní abecedy (interpretace informace zachycené ve vnitřní reprezentaci) a vydává je na svém výstupu.

Vazba počítače s okolím

K tomu, aby počítač mohl komunikovat s okolím je nutný společný jazyk počítače a jeho okolí. Jedná se o jazyk, kterému obě strany jednoznačně a shodně rozumějí, tzv. formální jazyk. Vymezíme tři jeho určující složky:

  • abecedu , tj. výběr přípustných základních symbolů,

  • syntaxi , skladbu, tj. soubor pravidel, podle nichž lze ze symbolů abecedy tvořit přípustné vyšší tvary (výrazy, slova, věty),

  • sémantiku, tj. význam, který shodně obě komunikující strany syntaktickým tvarům přiřazují.

Poznamenejme zde, že i počítače s grafickým uživatelským rozhraním pracují shodně. Jejich řídícím jazykem může být kliknutí myši nad ovládacím prvkem s následnou akcí, např. rozbalení nabídky či zavření okna.

2.2 Von Neumannovo schéma počítače

Von Neumannovo schéma bylo navrženo roku 1945 americkým matematikem (narozeným v Maďarsku) Johnem von Neumannem jako model samočinného počítače. Tento model s jistými obměnami zůstal zachován dodnes.

Von Neumannovo schéma


Podle tohoto schématu se počítač skládá z pěti hlavních modulů:

  • Operační paměť : slouží k uchování zpracovávaného programu, zpracovávaných dat a výsledků výpočtu.

  • ALU – Arithmetical and logical Unit (aritmetickologická jednotka) : jednotka provádějící veškeré aritmetické výpočty a logické operace. Obsahuje sčítačky, násobičky (pro aritmetické výpočty) a komparátory (pro porovnávání).

  • Řadič : řídící jednotka, která řídí činnost všech částí počítače. Toto řízení je prováděno pomocí řídících signálů, které jsou zasílány jednotlivým modulům. Reakce na řídící signály, stavy jednotlivých modulů, jsou naopak zasílány zpět řadiči pomocí stavových hlášení.

  • Vstupní jednotka : zařízení určená pro vstup programu a dat.

  • Výstupní jednotka : zařízení určené pro výstup výsledků, které počítač zpracoval.

Ve von Neumannově schématu je možné ještě vyznačit další modul vzniklý spojením předcházejících modulů. Jedná se o procesor (CPU - Central Processing Unit - centrální procesorová jednotka), který vznikne spojením řadiče a aritmetickologické jednotky.

Princip činnosti počítače podle von Neumannova schématu:

  1. Do operační paměti se pomocí vstupních zařízení přes ALU umístí program, který bude provádět výpočet.

  2. Stejným způsobem se do operační paměti umístí data, která bude program zpracovávat.

  3. Proběhne vlastní výpočet, jehož jednotlivé kroky provádí ALU. Tato jednotka je v průběhu výpočtu spolu s ostatními moduly řízena řadičem počítače. Mezivýsledky výpočtu jsou ukládány do operační paměti a nebo registrů procesoru.

  4. Po skončení výpočtu jsou výsledky poslány přes ALU na výstupní zařízení.

Z hlediska systémového se počítač skládá z:

  • paměťového podsystému,

  • operačního podsystému,

  • řídícího podsystému,

  • vstupního a výstupního podsystému.

Centrálním podsystémem je paměť. Přejímá informace od vstupního podsystému a předává je výstupnímu podsystému. Řídící podsystém (řadič) získává z paměti instrukce programu a přiděluje ostatním podsystémům postupně úkoly. Operační podsystém získává podle pokynů řídícího podsystému z paměťového podsystému data, zpracovává je a vrací zpět do paměti.

Paměťový podsystém je schopen si zapamatovat, tj. uchovat beze změny určité množství informací. Podsystém tvoří:

  • blok adresovatelných paměťových buněk,

  • adresový registr paměti (registr adresy paměti – RAP),

  • údajový registr paměti (registr dat paměti – RDP),

  • řadič paměti.

Paměťový podsystém počítače

Funkce každé paměťové buňky je dána následujícími předpoklady:

  • Obsahuje jedno slovo – slabiku – byte.

  • Při získání údaje čtením se obsah neporuší.

  • Lze do ní zapsat novou informaci s podmínkou, že se zruší existující informace.

  • Má jednoznačně přidělenou adresu.

Adresový registr paměti (RAP) uchovává adresu buňky, se kterou paměť v daném okamžiku pracuje. Tyto adresy získává z některých jiných podsystémů. Na základě signálu „NASTAV ADRESU“ od zdrojového podsystému se paralelně (najednou celá adresa) zapíše do RAP. Údajový registr paměti (RDP) uchovává data. Při výběru informace z paměti zde řadič paměti dočasně uchovává údaj z buňky, na kterou odkazuje adresový registr paměti. Údaj zde uchovaný je dostupný pro žádající podsystém v okamžiku, kdy řadič vyšle signál "HOTOVO". Při ukládání informace do paměti se údaj ze zdrojového podsystému posílá do registru dat paměti na základě signálu "NASTAV ÚDAJ". Jakmile se nalezne místo, na které odkazuje adresa v adresovaném registru paměti, odešle se řadičem paměti obsah registru dat do této buňky.

Řadič paměti řídí cyklus paměti. Jednotka požadující spolupráci s pamětí informuje, zda jde o výběr nebo vkládání informace, při čemž je do RAP uložena adresa korespondující buňky. Při ukládání do paměti se naplní RDP požadovanou informací. Řadič paměti uzavře přístup k oběma registrům RAP i RDP, najde buňku a sleduje tok informace mezi registrem dat paměti a zvolenou buňkou. Jakmile je úkol paměti hotov, řadič paměti generuje signál o ukončení "HOTOVO" a může začít další cyklus paměti.

Požadavky, které se v počítačovém systému kladou na paměť se nedají ekonomicky splnit jedinou pamětí. Čím větší je kapacita paměti, tím větší je totiž i její cena. Podobně roste cena i se zkracováním vybavovací doby. Proto rychlé paměti (s krátkou vybavovací dobou) mají obvykle malou kapacitou, pomalé paměti (s delší vybavovací dobou) mají velkou kapacitu. Začlenění jednotlivých úrovní paměti do hierarchie je naznačeno na obrázku.

Hierarchie paměťového podsystému

Operační podsystém provádí všechny aritmetické a logické operace. Přitom spolupracuje s pamětí, z níž vybírá operandy a ukládá do ní výsledky. Operaci, která se má provádět, určuje řídící jednotka. Typické složení operační jednotky je na následujícím obrázku.

Operační podsystém (ALU) počítače

Tři registry, každý je na jedno slovo, tvoří zápisníkovou paměť. Registry uchovávají operandy, mezivýsledky i konečné výsledky. Označení registrů vychází z jejich funkce:

  • RA - střádač (acumulator),

  • RB - báze (base),

  • RQ - podíl (quotient).

ALU obsahuje dále sčítačku, která má i prostředky pro vytváření doplňkových kódů, čímž umožňuje odčítání. Přepínač řídí tok informací a umožňuje přímý zápis informace z jednoho registru do druhého, průchod informace ze dvou registrů sčítačkou, přesun údaje z paměti do některého registru apod. Řadič ALU je autonomní. Dohlíží na činnost ALU. Jakmile se mu předá instrukce, která se má provést, řídí a časově sleduje provádění příslušného algoritmu. (Pozn. ALU současných procesorů obsahují podstatně větší počet registrů.)

Řídící podsystém (řadič) řídí, resp. dohlíží na veškerou činnost a spolupráci všech podsystémů počítače tak, aby celý systém počítače pracoval podle zadaného programu. Dostává instrukce programu, zpracovává je a transformuje je na posloupnost příkazů pro ostatní části počítače. Těmito příkazy přiděluje úkoly jiným podsystémům. Přitom je stále informován o okamžitém stavu všech podsystémů. Základní funkční jednotky řídícího podsystému jsou uvedeny na obrázku.

Řídící podsystém počítače

Řídící podsystém pracuje ve dvou fázích: výběrové a prováděcí.

Výběrová a prováděcí fáze řadiče

Výběrová fáze (fetch):

Obsah čítače instrukcí se přepíše do adresovaného registru paměti (RAP). V paměti se najde specifikovaná adresa, na níž je uložena instrukce. Instrukce se z tohoto místa přepíše do registru dat (RDP) a odtud se uloží do řídícího registru.

Prováděcí fáze (execute):

Vybraná instrukce, uložená v řídícím registru, se analyzuje, čímž se určí, co se má dělat. Pokud se při zpracování požaduje operand, přepíše se adresová část instrukce do adresového registru paměti. Vybraný údaj se pak odesílá registru dat paměti na místo určení, např. do operační jednotky. Jakmile se operand dostane na místo svého určení, řídící podsystém odešle příslušnému podsystému požadavek na zpracování úkolu a kontroluje jeho provádění. Nakonec připraví adresu další instrukce, např. zvětšením obsahu čítače instrukcí o jedničku a zahájí se nová výběrová fáze. V případě provádění instrukce skoku se adresová část instrukce přepíše do čítače instrukcí a tím se určí nová adresa vybírané instrukce

Vstupní a výstupní podsystém počítače je spojovacím článkem mezi přídavnými zařízeními a ostatními podsystémy počítače a zahrnuje v sobě logiku řízení vstupů a výstupů. Požadavky na připojení vstupních a výstupních zařízení nejsou vždy známé nebo se nedají dostatečně přesně předvídat při návrhu počítače, a proto se základní vstupní a výstupní funkce z hlediska organizace a připojení přídavných zařízení zajišťují univerzálně.

2.3 Zobrazení informace v počítači

Informace, které číslicové počítače zpracovávají, musí být kódovány a s ohledem na technickou realizaci je nutné k jejich vyjádření nalézt levné a spolehlivé prvky. Z tohoto hlediska jsou zatím stále nejvhodnější prvky se dvěma jednoznačně rozlišitelnými stavy. Tak se dostáváme k dvojkové číselné soustavě, která je dominující soustavou strojového zpracování informací. Dvojková číslice (0 nebo 1) je bit (elementární informace). Znaky ( alfabetické a numerické) se vyjadřují většinou osmibitovou skupinou. Pro tyto několikabitové skupiny se používá termín slabika nebo byte. Nejbližší větší skupina s pevně stanoveným počtem bitů je slovo. Délka slov bývá 4 slabiky, tj. 32 bitů nebo 8 slabik, tj. 64 bitů. Je-li v počítači pro všechny operace slovo uložené vždy v jedné buňce paměti, pak jde o počítač slovně orientovaný.

2.3.1 Číselné soustavy a kódy

Zobrazení čísla v poziční číselné soustavě o základu b je dána pravidlem

(...a3a2a1a0a-1a-2...)b = ... a3b3+ a2b 2+ a1b1+ a0b0+ a-1b-1+ a-2b-2...

Pro b=10 dostáváme tradiční desítkovou (dekadickou) soustavu. Méně obvyklé jsou soustavy se základem b>1, b je přirozené a různé od 10.
Ve výše uvedeném zápisu znamená každé ak "číslici", představující celé číslo

0 ak < b .

Čárka mezi a0 a a-1 se nazývá „řádová poziční čárka“ (v angličtině se užívá tečky).

Dále se budeme zabývat zejména soustavami:
- dvojkovou (binární) kde b=2,
- osmičkovou (oktalovou) kde b=8,
- šestnáctkovou (hexadecimální) kde b=16.

Ve dvojkové soustavě vystačíme se dvěma číslicemi: 0,1.
V osmičkové soustavě potřebujeme 8 číslic: 0,1,2,3,4,5,6,7.

V šestnáctkové soustavě potřebujeme 16 číslic:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.

Z číselných soustav je nejběžnější dvojková, která jak z hlediska technického, tak i programového vybavení stroje má značné výhody. Z hlediska technického jsou to např. jednoduché algoritmy aritmetických a logických operací a jejich realizace, ve srovnání s jinými soustavami se jedná o menší požadovaný rozsah paměti apod. Z programového hlediska je třeba ocenit možnost dělení a násobení mocninami dvou prostým bitovým posunem čísla. Hlavní nevýhodou dvojkové soustavy je nutnost převodu při vstupu a výstupu z desítkové soustavy do dvojkové a naopak. Desítková soustava má přednost právě v tom, že zmíněné převody odpadají. Proto se u řady počítačů jednotlivé desítkové číslice kódují do dvojkové soustavy, tzv. dvojkovědesítkovým kódem (BCD).

2.3.1.1 Převody mezi číselnými soustavami

Pracujeme-li s různými číselnými soustavami (o různých základech), musíme vědět, jak se číslo, vyjádřené v jedné soustavě, např. se základemk převede do soustavy se základem m. Jde-li o celé číslo >1, potom číslo v soustavě o základu k dělíme základemm, vyjádřeným v soustavě k, zbytek h <0, m-1> je nejnižší řád daného čísla v soustavě m, vyjádřený ovšem opět v soustavě o základu k. Získaný podíl se dělí znovu základem m. Tak dostaneme další řád čísla v soustavě m atd. Poslední podíl, který je h <0, m-1>, je nejvyšší řád převáděného čísla v soustavě o základu m.

Příklad: Převeďme desítkové číslo 287 do soustavy dvojkové, osmičkové a šestnáctkové.

Ve dvojkové soustavě dostáváme:

287 : 2 = 143
zbytek 1
143 : 2 = 71
zbytek 1
71 : 2 = 35
zbytek 1
35 : 2 = 17
zbytek 1
17 : 2 = 8
zbytek 1
8 : 2 = 4
zbytek 0
4 : 2 = 2
zbytek 0
2 : 2 = 1
zbytek 1  zbytek 0

Zbytky sepíšeme od konce. Číslo 28710 je tedy vyjádřeno ve dvojkové soustavě takto:

(100011111)2 = 1·28+0·27+0·26+0·25+1·24+1·23+1·22+1·21+1·20 = 256+16+8+4+2+1 = (287) 10

V soustavě osmičkové dostaneme:

287 : 8 = 35
7
35 : 8 = 4
3

4

Tedy: (437)8 = 4·82 + 3·81 + 7·8 0 = 256 + 16 + 15 = (287)10

Při převodu do šestnáctkové soustavy obdržíme:

287 : 16 = 17
zbytek 15 (F)
17 : 16 = 1
zbytek 1

zbytek 1

Obdobně zbytky sepíšeme od konce a obdržíme:

(11F)16 = 1·162 + 1·161 + 15·16 0 = 256 + 16 + 15 = (287)10

Máme-li převést číslo <1 ze soustavy o základu k do soustavy o základu m postupujeme takto: číslo v soustavě k se násobí základem m, vyjádřeným v soustavě o základu k. Celočíselná část výsledku (před řádovou čárkou) je prvá číslice za řadovou čárkou čísla, převedeného do soustavy o základu m vyjádřená ovšem ještě v soustavě o základě k. Zbývající část výsledku za řádovou čárkou násobíme znovu základem m atd.

Příklad: Převeďme číslo (0,960375)10 ze soustavy desítkové do soustavy dvojkové, osmičkové a šestnáctkové.

Ve dvojkové soustavě dostáváme:

0,960375 · 2
1,92075

celá část je 1
0,92075 · 2
1,8415

celá část je 1
0,8415 · 2
1,683

celá část je 1
0,683 · 2
1,366

celá část je 1
0,366 · 2
0,732

celá část je 1
0,732 · 2
1,464

celá část je 1

Celé části (přetečení přes řádovou čárku) sepíšeme a dostáváme:

(0,960375)10 = (0,111101)2 = 1·2-1+1·2-2+1·2-3+1·2-4+0·2-5+1 ·2-6... = 0,5+0,25+0,125 +0,0625+0,03125 + …..

Při převodu do osmičkové soustavy dostáváme:

0.960375 · 8
7,683
celá část je 7
0.683 · 8
5,464
celá část je 5
0,464 · 8
3,712
celá část je 3

Celé části opět sepíšeme a dostáváme:

(0,960375)10 = (0,753...)8 = 7·8-1 + 5·8-2 + 3 ·8-3 + ... = 0.875 + 0,078125 + 0,005859375 + ..,

V šestnáctkové soustavě obdržíme:

0,980375 · 16
15,366
celá část je 15 (F)
0,366 · 16
5,856
celá část je 5
0,856 · 16
13,895
celá část je 13 (D)

Tedy:

(0,960375)10 = (0,F5D...)16 = 15·16-1 + 5·16-2 + 13 ·16-3...= 0,9375 + 0,01953125 + 0,003173828 + ….

Všimněte si, že existuje prostý vztah mezi zápisem čísel v soustavách o základu b a bk:

(...a3a2a1a0.a-la-2...)b = (...A3A2A1A 0.A-l A-2….)bk

kde Aj=(akj+k-1 …….akj+l akj )b

Slovy lze tento vztah zhruba vyjádřit tak, že v zápise čísla v soustavě o základu b vytvoříme k-tice číslic nalevo i napravo od řádové tečky, a každou tuto k-tici číslic vyjádříme jednou číslicí v soustavě o základu b k.

Příklad: Převeďte dvojkové číslo 10100110011001,10011101 do osmičkové a šestnáctkové soustavy.

Při převodu do osmičkové soustavy platí b=2, k=3, 2k=23=8

Tedy vytvoříme trojice dvojkových číslic, které nahradíme osmičkovými číslicemi dle následující tabulky.

osmičkovédvojkové
0000
1001
2010
3011
4100
5101
6110
7111
šestnáctkovédvojkové
00000
10001
20010
30011
40100
50101
60110
70111
šestnáctkovédvojkové
81000
91001
A1010
B1011
C1100
D1101
E1110
F1111

Převodní tabulka mezi osmičkovou a šestnáctkovou do dvojkové soustavy

Vytvořené trojice dvojkových čísel jsou:

010 100 110 011 001 100 111 010
2 4 6 3 1 4 7 2

Osmičkový zápis výše uvedeného čísla je (24631,472)8.

Převádíme-li číslo do šestnáctkové soustavy, platí: b=2, k=4, 2k=24=16

Zde vytváříme čtveřice dvojkových číslic, které nahradíme šestnáctkovými číslicemi dle výše uvedené tabulky.

0010 1001 1001 1001 1001 1101
2 9 9 9 9 D

Šestnáctkový zápis daného čísla je (2999,9D)16.

Pozn.: při obráceném převodu z osmičkové (resp. šestnáctkové) soustavy do dvojkové, každou osmičkovou (resp. šestnáctkovou) číslici nahradíme trojicí (resp. čtveřicí) dvojkových číslic.

2.3.1.2 Kódy

V řadě počítačů se používá dvojkově kódovaná desítková soustava. Každá desítková číslice se přitom musí vyjádřit dvojkově. Je zřejmé, že musíme použít pro každou číslici v desítkové soustavě nejméně 4 číslice dvojkové soustavy.

Volba konkrétního kódu závisí na jeho použití. Jiné požadavky se kladou na kódy, s nimiž se mají provádět aritmetické operace a jiné požadavky na kódy, používané při přenosu informaci apod.

Pro aritmetické operace jsou vhodné kódy, které vyhovují tzv. Aikenovým podmínkám:

1. Každé místo v kódu má mít určitou váhu.

2. Součet vah míst, v nichž je dvojková číslice kódu rovna 1, má dát hodnotu přiřazené desítkové číslice nebo alespoň, větší desítkové číslici má odpovídat větší dvojkové číslo příslušného váhového kódu.

3. Vztah mezi lichými a sudými kódy a přiřazenými desítkovými číslicemi může být sice libovolný, ale u zvoleného kódu má být neměnný.

4. Desítkovým doplňkům desítkových číslic mají odpovídat doplňkové kódy, vzniklé inverzí jednotlivých bitů původních kódů.

U kódů určených pro přenos nás zajímá především odolnost kódů vůči poruchám, možnost zajištění vzniklých chyb a příp. jejich odstranění. V následující tabulce jsou uvedeny některé známé kódy, z nichž však všechny nesplňují výše uvedené podmínky.

Tabulka dvojkových kódů pro desítkové číslice

Z více možných způsobů zabezpečení informace (kódů) se stručně zmíníme jen o jedné, tzv. kontrole paritou. Podstata zabezpečení spočívá v tom, že v nejjednodušším případě se k informaci, která je v n-řádech, přidružuje informace n(n+1)-tém řádu, kterou se doplňuje počet jednotkových bitů na sudý nebo lichý počet (sudá nebo lichá parita). V následující tabulce jsou naznačeny n=5 bitové informace se sudou paritou v 6. řádu.

Příklad zabezpečení informace sudou paritou

Při přenosu informace se po každém přepisu kontroluje, zda počet jedniček v informaci je sudý. V případě lichého počtu se signalizuje chyba. Je třeba připomenout, že paritní bit se k informaci přidává při tvorbě informace, např. na paměťové médium.

2.3.2 Kódování ve dvojkové soustavě

Způsob zobrazeni čísel v počítači nazýváme číselný kód. Ukážeme si tři způsoby kódování čísel ve dvojkové soustavě. Je zřejmé, že kladná a záporná čísla jsou zobrazena v počítači stejně, až na znaménko. Aby počítač pracující ve dvojkové soustavě poznal znaménko čísla, musíme tato znaménka vyjádřit znakem, který počítač dovede rozlišit, tj. v našem případě nulou nebo jedničkou (pozn., pracujeme-li s jinou číselnou soustavou, kóduje se znaménko zvláštním znakem). Kvůli zjednodušení budeme uvažovat o zobrazení čísla s pevnou řádovou čárkou (s čárkou před nejvyšším řádem, což značí |x| <1).

2.3.2.1 Přímý kód

Kladné číslo bude mít v přímém kódu před pevnou řádovou čárkou, tj. ve znaménkovém řádu, nulu, číslo záporné jedničku. Čísla kladná jsou tedy vyjádřena v rozmezí od nuly do jedné, čísla záporná od jedné do dvou, což lze psát:

(x)přímý kód = x pro x ≥ 0

(x)přímý kód = 1-x pro x < 0.

Zapíšeme tedy číslo + 0,21875 jako 0,00111,

ale číslo -0,21875 jako 1,00111 = (1-(-0.00111)).

2.3.2.2 Doplňkový kód

Doplňkový kód nezáporného čísla (kladné a nula) x je stejně jako u přímého kódu roven číslu x. Doplňkový kód záporného čísla x dostaneme tak, ze před pevnou řádovou čárku napíšeme znaménkový znak 1, na všech ostatních místech nahradíme nuly jedničkami.

Obecně můžeme psát:

(x)doplňkový kód = x pro x ≥ 0

(x) doplňkový kód = 2 + x pro x < 0.

Zapíšeme tedy + 0,75 jako 0,110

ale číslo - 0,75 jako 1,010

protože 210 v binární soustavě je 102

pak 10,000
- 0,110
1,010

nebo
1,001
    + 1
1,010

Nula má jediné vyjádření 0,000 ... 0.

Maximální záporné číslo 1,000 ... 0 nemá tedy kladný ekvivalent (jeho dvojkový doplněk je totiž zase 1,000 ... 0).

2.3.2.3 Inverzní kód

Inverzní kód kladného čísla x je roven číslu x. Inverze záporného čísla vznikne tak, že se do znaku napíše jednička a v číslicových řádech se zamění jedničky za nuly a naopak. Je tedy záporné číslo v inverzním kódu v posledním číslicovém řádu o jedničku menší než číslo v doplňkovém kódu.

Tedy:

(x)inverzní kód = x pro x >= 0

(x) inverzní kód = 10 + x – 10-n pro x < 0.

Př. + 0,8128 je ve dvojkové soustavě 0,1101 a - 0,8125 je v inverzním kódu 1,0010

2.3.2.4 Modifikovaný doplňkový kód

Modifikovaný doplňkový kód je obecnější verzí doplňkového kódu.

Je definován

(x)modifikovaný doplňkový kód = x pro x >= 0

(x) modifikovaný doplňkový kód = z2 + x pro x < 0.

Ve dvojkové soustavě je z2 = (100)2

Př.

(+ 11/16)10 = (00,1011)2

(- 11/16)10 = (11,0101)2 protože 100,0000
- 00,1011
11,0101
nebo 11,0100
+     1
11,0101

Modifikovaný doplňkový kód nezáporného čísla x je roven tomuto číslu x, přičemž ve znaménkových řádech jsou dvě nuly; u záporného čísla se před pevnou řádovou čárku napíší dvě jedničky, na všech ostatních místech nahradíme nuly jedničkami a jedničky nulami a pak k nejnižšímu řádu přičteme jedničku.

2.3.2.5 Modifikovaný inverzní kód

Je definován

(x) modifikovaný inverzní kód = x pro x >= 0

(x) modifikovaný inverzní kód = 100 + x – 10-n pro x < 0.

Modifikovaný inverzní kód nezáporného čísla x je roven číslu x; u záporného čísla se před pevnou řádovou čárku napíší dvě jedničky a v číslicových řádech se zamění jedničky za nuly a naopak.

Např.

(+ 11/16)10 = (00,1011)2

(- 11/16)10 = (11,0100)2

2.3.3 Zobrazení instrukcí

Požadavek na provedení operace operační jednotkou, případně jinými podsystémy počítače je zakódován do instrukce. Instrukce určuje, o kterou z operací jde (tzn. operační kód) a kde jsou uloženy operandy v paměti, registrech apod. (tzn. adresy) .

Obecná struktura instrukce je na následujícím obrázku.

Obecná struktura instrukce

Adresová část obsahuje tolik samostatných částí, kolik má instrukce adres (většinou 1,2 nebo 3) - hovoříme potom o jednoadresní, dvouadresní nebo tříadresní instrukci.

Instrukce s k = 1,2 ..... adresami mají formát dle následujícího obrázku.

Obecná struktura instrukce s k adresami

Porovnání efektivnosti instrukcí s různým počtem adres budeme ilustrovat na příkladu výpočtu výrazu:

Y = A * B + (C – D) * E / F,

kde A,B,C.D,E,F,Y - proměnné, uložené v buňkách s adresami a,b,c,d,e,f,y.

Budeme předpokládat, že výsledek libovolné operace se ukládá v registru R operační jednotky, a může být použit v roli operandu v následující operaci. Pro uložení mezivýsledků P1, P2, ... máme k dispozici pracovní paměťové buňky p1, p2, ...

Nejpřirozenější pro výpočet aritmetických a logických výrazů je tříadresní systém instrukcí.

Struktura tříadresní instrukce

Zde OK = operační kód,

A1, A2 = adresa dvou operandů,

A3 = adresa výsledku.

Program výpočtu výrazu bude:

Instrukce Význam
Násob a b p1 A * B → P1
Odečti c d C-D → R
Násob e R*E → R
Děl f R/F → R
Sečti p1 y R + P1 → Y

Pomlčka v poli adresy označuje, že tato adresa se nepoužije, i když v poli adres v instrukci se nachází. Protože každá instrukce potřebuje tři m-bitová pole adres, tak pro adresaci informace je potřebné K3 = 3 x 5 = 15 adres, i když pouze 9 je jich využito efektivně. Při vykonání programu se T3 = 14 krát obracíme k paměti:

  • 5x výběr instrukce,

  • 9x čtení / zápis operandů.

Při použití dvouadresních instrukcí:

Struktura dvouadresní instrukce

Proces výpočtu výrazu je popsán následujícím programem:

Instrukce Význam
Násob a b A*B → R
Zapiš p1 R → P1
Odečti c d R-D → R
Násob e R*E → R
Děl f R/F → R
Sečti P1 y R+P1 → Y

Zde Zapiš je operace zápisu výsledku R do paměti. Program je sestaven ze šesti instrukcí, zabírajících K2 = 2x6 = 12 adres a 9 z nich je využito efektivně. Při provádění programu se T2 = 15x obracíme k paměti:

  • 6x výběr instrukce,

  • 9x čtení / zápis operandů.

Při práci s jednoadresní instrukcí:

Struktura jednoadresní instrukce

Program výpočtu výrazu bude:

Instrukce Význam
Ulož a A → R
Násob b R*B → R
Zapiš p1 R → P1
Ulož c C → R
Odečti d R-D → R
Násob e R*E → R
Děl f R/F → R
Sečti p1 R+P1 → R
Zapiš y R → Y

Program je sestaven z 9 instrukcí zabírajících 9 adres. Při provádění programu T1 = 18x obrací k paměti:

  • 9x výběr instrukce,

  • 9x čtení / zápis operandů.

Počet adres instrukcí k 1 2 3

Počet adres v programu K 9 12 15

Počet přístupů k paměti T 18 15 14

Z tabulky je vidět, že s větším počtem adres v instrukci se zvětšují požadavky na velikost paměti pro adresu, ale snižuje se počet přístupů k paměti, tj. snižuje se celková doba výpočtů. Se zvyšováním počtu operandů ve výrazu odpadá nutnost každou operaci provádět třemi adresami; výsledek operace může být uložen v procesoru a může být použit jako operand v následující operaci. Ve vědecko-technických úlohách, na jednu operaci, přísluší v průměru 1,2 až 1,4 operandů, uložených v operační paměti a v úlohách zpracování hromadných dat 1,6 až 1,8 operandů. Proto pro vědecko-technické úlohy jsou výhodné
1-adresní instrukce a pro zpracováni dat 2-adresní instrukce.

2.3.4 Zobrazení abecedně-číslicových znaků

Současné počítače (až na výjimky) mohou pracovat s úplnou abecedou písmen, číslic a různých symbolů, (tzn. 26 písmen mezinárodní abecedy, 10 číslic a interpunkční znaménka, panelové znaky pro některé vstupní a výstupní zařízení). Základní abeceda zejména ve slovanských zemích bývá doplněna písmeny národní abecedy. V paměťových médiích samočinného počítače se zpravidla uchovává až dvakrát tolik číselné informace jako alfabetické informace. Proto je žádoucí, aby vybraný kód byl efektivnější pro vyjadřování číslic. Tuto podmínku splňuje např. osmibitový kód EBCDIC (Extended Binary Coded Decimal Interctange Code), jenž umožňuje vyjádřit 206 různých znaků. Každý znak tedy představuje skupina osmi bitů. Výhoda osmibitového kódu spočívá v tom, že umožňuje v jedné osmibitové skupině uchovávat kódy dvou desítkových číslic. Tyto číslice vstupují do stroje zakódovány osmi bity; čtyři bity levé části tvoří tzv. zónu, která svou hodnotou (1111) určuje, že znak je číslice. Znaky se dají zřetězit a v poslední osmibitové kombinaci se místo zóny udává znaménko čísla. Desítkové číslice 0, 1, 2, ... 9 jsou zakódovány v přímém dvojkovém kódu 8421. Uvedený tvar je "rozvinutý" a používá se pro styk s periferními zařízeními. Číselná informace se před uložením do paměti přeskupí do zhuštěného tvaru. Zhuštěný tvar se uplatňuje při vnitřních operacích s desítkovými čísly.

Znaková sada ASCII

2.3.5 Pevná a pohyblivá řádová čárka

Většina moderních počítačů umožňuje zpracovávat čísla ve dvojím tvaru, a to v pevné a pohyblivé řádové čárce, viz následující obrázek.

Obecné uspořádání čísla v pevné řádové čárce

Obecné uspořádání čísla v pohyblivé řádové čárce

Pro zobrazení čísel v pevné řádové čárce je charakteristické pevné umístění řádové čárky na určité místo. Zpravidla se umísťuje před nejvyšším řádovým místem. Můžeme tedy zobrazit čísla v intervalu <0,1>.

Zápis čísla v pohyblivé řádové čárce má dvě části: mantisu a exponent.

Obecný zápis je x = m. ze

kde

x - zobrazované číslo,

m – mantisa,

e – exponent,

z - základ použité číselné soustavy.

Lze tak zobrazit čísla v rozsahu <z –(emax+m); zemax>

kde emax je maximální hodnota exponentu, která je dána počtem řádových míst exponentu v daném zobrazení, m je počet řadových míst mantisy. Rozsah zobrazení informace v pevné řádové čárce úzce souvisí s délkou slova počítače.

2.4 Metody určování operandů

V číslicových počítačích se setkáváme s různými typy určování operandů. Jsou to:

  • Přímé adresování.

  • Přímý operand.

  • Nepřímé adresování.

  • Implicitní adresování.

  • Implicitní operand.

  • Modifikované adresování.

  • Relativní adresování.

  • Asociativní adresování.

2.4.1 Přímé adresování

Přímé adresování je základní způsob adresování, kdy se pracuje s operandem na adrese uvedené přímo v instrukci.

Přímé adresování

2.4.2 Přímý operand

V tomto případě je (obvykle na místě adresy) v instrukci zapsán vlastní operand. Rozlišení, zda jde o adresu nebo operand, musí být dáno operačním kódem. Provedením instrukce na následujícím obrázku se přesune přímý operand 327 do indexregistru číslo 3.

Přímý operand

2.4.3 Nepřímé adresování

Adresová část instrukce udává adresu, na níž je zaznamenána adresa vlastního operandu. Ve srovnání s přímým adresováním to vyžaduje přídavný cyklus paměti, což je nevýhodné. Uplatní se jen tehdy, jestliže řada instrukcí odkazuje na týž operand, jehož umístění v paměti se však během zpracování programu mění.

Nepřímé adresování

2.4.4 Implicitní adresování

S implicitním adresováním se setkáváme u všech jednoadresových počítačů, které vyžadují, aby pro všechny operace pracující se dvěma operandy bylo umístění jednoho z nich dáno vlastní operací. Místo pro výsledek je ve většině případů určeno také implicitně. Příkladem může být instrukce přenosu mezi dvěma registry, kdy adresy obou registrů jsou implicitně určeny operačním kódem.

2.4.5 Implicitní operand

Jde o případ, kdy operand je určen operačním kódem, např. kód operace „posuň řádovou čárku o jeden bit“ v sobě zahrnuje operaci násobení dvěma (u dvojkového počítače s pevnou řádovou čárkou).

2.4.6 Modifikované adresování

Adresová část instrukce se před vložením do adresového registru paměti RAP modifikuje konstantou uloženou v indexregistru, jehož číslo je dáno příznakem instrukce.

Modifikace základní adresy

2.4.7 Relativní adresování

Adresová část instrukce neurčuje při relativním adresování přímo místo v paměti, ale adresu uloženou k nějaké jiné adrese, označené jako uložená adresa (bázová adresa).

Modifikace relativní adresy

2.4.8 Výběr podle obsahu (asociativní výběr)

Metody adresování, které jsme probrali, se týkají paměti, které jsou adresovány pozičně, tj. každé paměťové místo má svou adresu, což odpovídá Von Neumannově modelu počítače. U asociativních pamětí se vyhledává informace s určitou vlastností. Tato vlastnost bývá určena tzv. klíčem, což je určitá podmnožina bitů slova obsahující uvedený vzorek jedniček a nul. Zbylé bity jsou lhostejné a jsou při hledání maskovány. Každá buňka paměti má údajovou část (uložená informace) a klíčovou část. Obsah registru klíče se najednou srovná se všemi uloženými klíči. V té buňce, kde nastane shoda klíčů, se vyšle obsah údajové části buňky do údajového registru asociativní paměti.

Asociativní adresování

2.5 Odlišná schémata počítačů

Základní odlišnosti dnešních počítačů od von Neumannova schématu:

  • Podle von Neumannova schématu počítač pracuje vždy nad jedním programem. Toto vede k velmi špatnému využití strojového času. Je tedy obvyklé, že počítač zpracovává paralelně více programů zároveň - tzv. multitasking.

  • Počítač může disponovat i více než jedním procesorem.

  • Počítač podle von Neumannova schématu pracuje pouze v tzv. diskrétním režimu.

  • Existují vstupní / výstupní zařízení (I/O devices), která umožňují jak vstup, tak výstup dat (programu).

  • Program se do paměti nemusí zavést celý, ale je možné zavést pouze jeho část a ostatní části zavádět až v případě potřeby.

Jednou z nejpodobnějších architektur k von Neumanově je hardwardské schéma počítače, lišící se oddělenou pamětí pro program a pro data (používají některé jednočipové mikropočítače).

Hardwardské schéma počítače

V poslední době se uplatňují víceprocesorové počítače, tj. počítače s několika CPU. Dělí se podle toho, zda mají sdílenou paměť na :

  • multiprocesory (multiprocessors), které mají sdílenou paměť,

  • multipočítače (multicomputers), které nemají sdílenou paměť, procesory komunikují například pomocí mechanismu zasílání zpráv.

Podle počtu instrukčních a datových proudů se počítače dělí na:

  • SISD (single instruction, single data) - běžné jednoprocesorové počítače,

  • SIMD (single instruction, multiple data) - jedna instrukce se provádí na větší množství dat (například sčítání dvou vektorů) - tzv. vektorové počítače, některé superpočítače jsou SIMD,

  • MISD (multiple instruction, single data) - někdy označované jako řetězené (pipeline) procesory,

  • MIMD (multiple instruction, multiple data) - víceprocesorové systémy; podle toho zda mají nebo nemají sdílenou paměť, se rozdělují na multiprocesory (se sdílenou pamětí) a multipočítače (multicomputers - spolupracující počítače propojené sítí).

Na následujících obrázcích jsou naznačeny principiální vazby procesoru event. procesorů s operační pamětí.

Počítačový systém SISD (single instruction, single data)

Uvedený počítač je shodný s architekturou Von Neumanna. Procesor postupně přebírá instrukce, dekóduje je a provádí.

Počítačový systém SIMD (single instruction, multiple data)

Tento počítačový systém se někdy také označuje jako maticový procesor (array procesor). Operace v procesorech se provádějí podle příkazů centrálního řadiče maticového procesoru. Kvůli efektivnímu zpracování je hlavní paměť rozdělena na dva fyzicky samostatné celky: paměť programů, která spolupracuje s řídící jednotkou maticového procesoru a paměť dat, která komunikuje se všemi procesory. Všechny procesory mohou vykonávat současně tutéž operaci s daty, uloženými v paměti. Proto je maticový procesor užitečný pro operace s maticemi a vektory.

Počítačový systém MISD (multiple instruction, single data)

Tento procesor realizuje základní funkce řetězením operačních modulů, které pracují autonomně. Tím se dosahuje potřebný paralelismus.

Počítačový systém MIMD (multiple instruction, multiple data)

Uvedené multiprocesory mají tyto základní rysy:

  • systém obsahuje dva nebo více fyzicky úplně nezávislé procesory, každý s vlastním tokem instrukcí,

  • procesory sdílejí společnou operační paměť,

  • systém disponuje společným souborem vstupních/výstupních zařízení,

  • celý počítačový systém je řízen jedním operačním systémem (jedna řídící autorita).

Každý procesor je schopen samostatně vybírat a provádět instrukce. Multiprocesor tedy může zpracovávat současně více programů, resp. samostatných částí jednoho programu, což se nazývá souběžné zpracování (multiprocessing). Přitom procesory nemusí být stejného typu – pak mluvíme o nehomogenním multiprocesoru. Sdílení hlavní paměti se rozumí ve smyslu možnosti fyzického přístupu každého procesoru do libovolného paměťového místa.

Příklady konkrétní architektury počítačů SIMD a MIMD se 4 výpočetními uzly jsou naznačeny na následujících obrázcích. SIMD a MIMD se typicky liší v složitosti a výkonu výpočetních uzlů. Uzly v MIMD jsou výkonné samostatné počítače, kdežto SIMD uzly jsou obvykle mnohem jednodušší, což je důsledkem jejich podřízenosti v systému.

Architektura SIMD se 4 výpočetními uzly

Architektura MIMD se 4 výpočetními uzly

Kontrolní otázky:

  1. Čím se liší von Neumannova koncepce počítače od harwardské koncepce?

  2. Kde je uložena adresa právě prováděné instrukce?

  3. O kolik míst se posune řádová čárka binárního čísla násobíme-li jej číslem 16?

Úkoly k zamyšlení:

  1. U jakých typů instrukcí se nezvyšuje obsah čítače instrukcí o 1?

  2. Vedle relativního adresování existuje i samorelativní adresování, kdy bázovou adresou je adresa právě prováděné instrukce. Nakreslete způsob výpočtu konečné adresy.

Korespondenční úkol:

  1. Napište program pro výpočet výrazu Y = A2 + B3 - C * D + E / F s jednoadresními, dvouadresními a tříadresními instrukcemi. Operační jednotka vykonává jen základní operace sečítání, odčítání, násobení a dělení.

Shrnutí obsahu kapitoly

V této kapitole jste se seznámili s architekturou číslicových počítačů. Důraz byl kladen na pochopení instrukčního cyklu řadiče a návaznost a hlavní funkce jednotlivých podsystémů počítače. Velká pozornost byla věnována zobrazování jednotlivých informací v počítači a metodám určování operandů instrukcí.