Operácie

Aritmetické operácie v dvojkovej sústave

Z SensorWiki

Základné aritmeticko-logické operácie

Aritmeticko-logické operácie sa väčšinou vykonávajú v artitmeticko-logickej jednotke (ALJ) ( Arithmetics and Logic Unit (ALU)), ktorá je súčasťou centrálnej procesorovej jednotky (Central Process Unit CPU )

Sčítanie

Pre sčítanie dvoch binárnych čísel platia nasledujúce pravidlá:

   0 + 0 =   0

   0 + 1 =   1

   1 + 0 =   1

   1 + 1 = 1 0 
           ↓
           CY: prenos do vyššsieho rádu (Carry)

Príklad 1

    0 0 1 0 0                    4
 +  0 0 1 1 0                  + 6
   ______________              ____
    0 1 0 1 0                   10
 

Prenos (carry) sa vždy jednoducho pripočíta k číslici vo vyššom ráde. Ak máme obmedzenú dĺžku slova (8-bit, 16-bit, 32-bit) tak posledný prenos už nie je kam pripočítať a dôjde k tzv. pretečeniu (overflow).

Odčítanie

Pre odčítanie dvoch binárnych čísel sa používa pripočítanie čísla s opačným znamienkom v doplnkovom kóde.


Násobenie

Príklad 2

Vypočítame súčin 3 x 6 v dvojkovej sústave:

    0 1 1     (3)
    1 1 0     (6)
  ________    
    0 0 0
  0 1 1
0 1 1
___________
1 0 0 1 0    (18)

Elementárne aritmeticko-logické operácie

Logické operácie sa uskutočňujú nad pamäťovými miestami obyčajne s registrami CPU, pričom sa operácia vykonáva so všetkými dvojicami bitov pamäťových miest.

Pamäťové miesta (slová) môžu byť jedno a viacbajtové. Bity v slovách označujeme indexom, ktorého počiatočná hodnota je 0 a index narastá sprava doľava :

Označovanie bitov v 8-bitovom slove (v jednobajtovom slove) Pr 04 01.jpg

Označovanie bitov v 16-bitovom slove (v dvojbajtovom slove) Pr 04 02.jpg

LSB – Least Significant Bit ( bit s najmenšou váhou) MSB – Most Significant Bit ( bit s najväčšou váhou)

Bit (1b), Nibble (4b), Byte (8b = 1B), Word (2B, …..)


Operácie delíme na:

unárne – vykonávajú sa s jedným pamäťovým miestom

binárne – vykonávajú sa s dvoma pamäťovými miestami

Medzi elementárne operácie, ktoré vykonávajú takmer všetky CPU sú :

Negácia (NOT)

Patrí medzi unárne operácie: Pravidlá pre jednobitové operandy sú:

Pr 04 03.jpg

Pre viacbitové ( budeme uvádzať príklady pre 8-bitové operandy ( jeden bajt):

Pr 04 04.jpg


Logický súčet (OR)

Patrí medzi binárne operácie. Pravidlá pre jednobitové operandy sú:

Pr 04 05.jpg

Pre jednobajtové operandy:

Pr 04 06.jpg

Použitie: Vnútenie logickej jednotky do ľubovolnej pozície v byte, v bytoch tzv. maskou. Napr.: Vykonaním logického súčtu ľubovolného bytu s maskou, ktorá je reprezentovaná bytom s obsahom

\ 1\ 1 \ 0\ 0\ \ 0\ 1\ 0\ 0 \ [C4_H]

bude v uvedenom byte v bitoch s indexom 7, 6 a 2 vždy logická jednotka bez ohľadu na predchádzajúci obsah bytu

\ 1\ 1 \ X\ X\ \ X\ 1\ X\ X \ [C4_H]

kde X je obsah bitu pred vykonaním operácie.

Logický súčin (AND)

Patrí medzi binárne operácie. Pravidlá pre jednobitové operandy sú: Pr 04 07.jpg

Pre jednobajtové operandy:

Pr 04 08.jpg

Použitie: Vnútenie logickej nuly do ľubovolnej pozície v byte, v bytoch tzv. maskou. Napr.: Vykonaním logického súčtu ľubovolného bytu s maskou, ktorá je reprezentovaná bytom s obsahom

\ 0\ 0\ 1\ 1\ \ 1\ 0\ 1\ 1 \ [3B_H]

bude v uvedenom byte v bitoch s indexom 7, 6 a 2 vždy logická nula bez ohľadu na predchádzajúci obsah bytu

\ 0\ 0\ X\ X\ \ X\ 0\ X\ X \ [3B_H]

Pomocou masky môžeme testovať logickú hodnotu vybraného bitu, bitov, bajtu a bajtov. Použitím, napríklad, masky

\ 0\ 0\ 0\ 0\ \ 0\ 0\ 1\ 0 \ [02_H]

po vykonaní logického súčinu s vybraným bajtom, bude výsledok operácie nulový, ak v bite s indexom 1 bola logická nula, a naopak nenulový, ako v danom bite bola logická jednotka. Nulový výsledok znamená, že bajt (bajty), do ktorých sa zapíše výsledok aritmeticko-logickej operácie obsahuje vo všetkých bitoch binárnu hodnotu nula.

neekvivalencia (XOR)

Patrí medzi binárne operácie. Nazýva sa tiež exluzívny súčet, súčet modulo 2, EOR. Pravidlá pre jednobitové operandy sú:

Pr 04 09.jpg

Pre jednobajtové operandy:

Pr 04 10.jpg

Použitie: Inverovanie logickej hodnoty v ľubovolnej pozícii bajtu ( bajtoch) maskou. Napríklad. Vykonaním logického súčtu ľubovolného bytu s maskou, ktorá je reprezentovaná bytom s obsahom

\ 0\ 0\ 1\ 1\ \ 1\ 0\ 1\ 1 \ [3B_H]

bude výsledok operácie

\ X\ X\ X\ X\ \ X\ X\ X\ X \ [3B_H]

Posuny a rotácie

Medzi najzákladnejšie operácie ALU patria posuny a rotácie obsahov pamäťových miest. Patria medzi unárne operátory. Operácie sa vykonávajú posúvaním obsahov bitov doľava, alebo doprava, prípadne n-tica pamäťových bitov sa doplní formálne o pomocný bit na (n+1) –ticu ( pomocným bitom bývajú príznakové (stavové) bity CPU, napr. Carry bit)

Rotácie Rotácia obsahu pamäťového miesta doprava

Pr 4 11.jpg

Rotácia obsahu pamäťového miesta doľava

Pr 4 12.jpg


Posuny obsahu pamaťového miesta môžu byť:

  • logické
  • aritmetické

Logické posuny Logický posun obsahu pamäťového miesta doprava

Pr 4 13.jpg

Logický posun obsahu pamäťového miesta doľava

Pr 4 15.jpg

Aritmetické posuny Aritmetický posun obsahu pamäťového miesta doprava

Pr 4 16.jpg

ale pre bajt

Aritmetický posun obsahu pamäťového miesta doľava

Pr 4 17.jpg

ale pre bajt


Použitie :

  • cyklické testovanie obsahu bitov
  • vytváranie slov pri kódovaní
  • arimetické posuny
    • doprava

-je celočíselným delením číslom 2

- pri n posunoch ide o celočíselné delenie číslom 2n

    • doľava

- je násobením číslom 2

- pri n posunoch ide o násobenie číslom 2n

Celočíselná arimetika

Medzi základné celočíselné aritmetické operácie, ktoré realizuje ALU, patria:

  • súčet
  • rozdiel
  • násobenie
  • delenie

Všetky tieto operácie sú binárne.


Celočíselný súčet

Ak interpretujeme binárny obsah slova, ako zobrazenie dekadického čísla v pozičnej číselnej sústave so základom 2, ide o zobrazenie celých nezáporných čísel, t.j. celých čísel bez znamienka ( sú to celé čísla typu unsigned).


Súčet celých čísel bez znamienka

Pre súčet binárnych čísel platia pravidlá binárnej aritmetiky pre jednobitové slová kde okrem výsledného bitu, treba uvažovať signalizáciu prenosu do,z vyššieho rádu.

Pr 4 20.jpg

V prípade súčtu dvoch 8-bitových slov bude

Pr 4 21.jpg

v ďalšom príklade

Pr 4 22.jpg

V tomto prípade pošlo k požiadavke na prenos do vyššieho rádu, po skončení sčítania. ALU obsahujú stavové slovo, ktorého jeden bit (Carry Bit) slúži na zapisovanie tejto informácie. Po vykonaní súčtu vieme, pamäťové miesto nestačí svojou veľkosťou na zápis výsledku sčítania.

  • pri viacslovnom sčítaní musíme uvažovať hodnotu tohoto bitu pri sčitaní slov vyšších rádov
  • v prípade súčtu celých čísel bez znamienka platí, že zároveň signalizuje tzv. pretečenie (overflow) ( neplatí všeobecne, že carry bit signalizuje pretečenie). Pretečenie znamená, že výsledok operácie nie je zobraziteľný ( to, čo je vo výsledku nie je správny výsledok operácie).

Pretečenie znamená, že výsledok operácie nie je zobraziteľný (to čo je vo výsledku mie je správny výsledok operácie). Na realizáciu sčítania sa v ALU používajú sčítačky realizované pomocou logických obvodov. Pri sčítaní na najnižšom ráde platí ( sčítanie nultého rádu) sa používa polovičná sčítačka. Popis polovičnej sčítačky pomocou aritmetických operácií

\ s_0=(a_0+b_0)mod2  c_1=(a_0+b_0)/2

a logických operácií \ s_0=a_0/b_0+/a_0b_0  c_1=(a_0b_0)

Polovičná sčítačka sa dá realizovať pomocou kombinačných obvodov

Tri možné spôsoby realizácie polovičnej sčítačky

Pr 4 23.jpg Onesklorenie: "S"= 3 a "C" = 1,2

Pri sčítaní na ďalších rádoch treba uvažovať prenosy s predchádzajúcich rádov


Možné realizácie úplnej sčítačky :


použitím polovičnej sčítačky :

Na sčítanie dvoch n-bitových čísel sa dajú použiť paralelná alebo sériová sčítačka, pričom sa vo všetkých stupňoch používa úplná sčítačka ( realizácia prenosu z predchádzajúceho sčítania, realizácia inkrementácie nastavením carry bitu a pričítaním nuly)

Paralelná sčítačka

Sériová sčítačka

Rozdiel čísel bez znamienka

Pre odčítanie binárnych čísel platia pravidlá binárnej aritmetiky pre jednobitové slová


kde okrem výsledného bitu, treba uvažovať signalizáciu výpožičky z vyššieho rádu (borrow).


V prípade odčítania dvoch 8-bitových slov bude

V druhom prípade je po vykonaní operácie nastavený príznak podtečenia - v prípade viacbajtového odčítania je potrebné tento príznak uvažovať - inak výsledok je nesprávny – výsledok nie je zobraziteľný

Hardvérovo sa dá odčítačka realizovať, ale na inom princípe, nie realizáciou pravidiel pre odčítanie.


Zobrazenie záporných celých čísel

Možné reprezentácie celých záporných čísel

  • Priamy kód

Bit s najväčšou váhou MSB – znamienkový bit, n-1 bitov absolútna hodnota čísla MSB = 0 kladné číslo MSB = 1 záporné číslo číslo Napr.

- rozsah zobraziteľných čísel je symetrický <-(2n-1 –1), 2n-1 –1> - pri aritmetických operáciách treba vyhodnocovať znamienka - nejednoznačná nula


  • Inverzný kód (1´st complement)

Bit s najväčšou váhou MSB – znamienkový bit MSB = 0 kladné číslo MSB = 1 záporné číslo číslo

Číslo s opačným znamienkom sa vytvára inverziou bit po bite

- rozsah zobraziteľných čísel je symetrický <-(2n-1 –1)1, 2n-1 –1> - aritmetické operácie

pri sčítaní treba korigovat výsledok pripočítaním obsahu carry bitu k LSB

- nejednoznačná nula

- kód pre n-bitové záporné číslo je vytvorený podľa vzťahu

  • Doplnkový kód (2´st complement)

Bit s najväčšou váhou MSB – znamienkový bit, n-1 bitov absolútna hodnota čísla MSB = 0 kladné číslo MSB = 1 záporné číslo číslo Číslo s opačným znamienkom sa vytvára v dvoch krokoch - inverzia bit po bite - pripočítanie jednotky ( inkrementácia)


Bit s najväčšou váhou MSB – znamienkový bit, n-1 bitov absolútna hodnota čísla MSB = 0 kladné číslo MSB = 1 záporné číslo číslo Napr.

z uvedeného vyplýva, že platí

- je len jedna nula


- výsledok sčítania dvoch čísel s ľubovolnou kombináciou znamienok v doplnkovom kóde dáva správny výsledok bez korekcie

- v prípad súčtu čísel v doplnkovom kóde nastavenie carry bitu neznamená pretečenie. V prípade nerovnakých znamienkových bitov (MSB) k pretečeniu nemôže dôjsť. Len v prípade, že MSB obidvoch opernadov je rovnake, pretečenie nastane vtedy, ak MSB výsledku sa nezhoduje s MSB operandov!!!!


Problém je, že hodnota MSB jedného z operandov v reálnom prípade je zmenená, preto na detekciu overflow sa používajú prenosy do vyšších rádov (carry bity) posledných dvoch stupňov paralelnej sčítačky

- kód pre n-bitové záporné číslo v doplnkovom kóde je vytvorený podľa vzťahu - rozsah zobraziteľných čísel je nesymetrický <-2n-1, 2n-1 –1>

Sčítačka-odčítačka v doplnkovom kóde

BCD kód

BCD ( Binary Coded Decimal) – dvojkovo-desiatkové kódovanie - zostáva desiatková sústava - číslice sa kódujú do binárneho kódu Existuje veľa možností kódovať dekadické číslice. Najväčší majú váhové kódy. Na kódovanie stačia 4 bity ( nevyužívajú sa všetky kombinácie). Nech


Aby kód bol vhodný pre aritmetické operácie mal by splniť nasledovné podmienky

1. Jednoznačnosť – každej dekadickej číslici je priradená jednoznačne jediná štvorica binárnych číslic 2. Aditívnosť – binárny súčet kódov číslic je rovný kódu ich súčtu 3. Symetričnosť – ak pre dve dekadické číslice platí


potom medzi číslicami platí


4. Usporiadanosť – väčším dekadickým čísliciam sú priradené väčšie kódy ( možnosť porovnávania číslic) 5. Párnosť – párnym čísliciam zodpovedajú párne kódy, nepárnym nepárne Najpoužívanejší kód je pre :

Binárny kód Dekadická číslica 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010-1111 nevyužité

Pre dekadické číslo 235710 = 0010 0011 0101 0111BCD Pozn.: Môžeme sa stretnúť s pojmami zhustený a nezhustený zápis čísel v BCD kóde. Posledne uvedený príklad zodpovedá zhustenému zápisu. V prípade nezhusteného kódu sa každá číslica kóduje do osobitného bajtu, doplnením núl do horných štyroch bitov

235710 = 0000 0010 0000 0011 0000 0101 0000 0111


Sčítanie a odčítanie v BCD kóde

Tento kód nie je symetrický, preto pri aritmetickom sčítaní a odčítaní je treba upravovať výsledok, v prípade prenosu do vyššieho rádu, alebo výpožičke z vyšších rádov.

Súčet dvoch operandov kódovadých v BCD kóde sa vykonáva rovnakým spôsobom ako súčet dvoch binárnych celých čísel, majme tri príklady : Vykonajme súčet čísel kódovaných v BCD kóde 23+45, 23+29, 27+29




V prvom prípade BCD kód výsledku sčítania zodpovedá BCD kódu správneho výsledku. V druhom prípade je kód dolnej štvorice bitov nesprávny, v treťom prípade obidve číslice patria medzi správne BCD kódy, ale výsledok je nesprávny (prenos do vyššieho rádu medzi bitmi 3 a 4) . Po vykonaní súčtu BCD čísel treba testovať - buď prenos do vyššieho rádu z každej štvorice bitov - alebo, či kód číslice patrí do množiny kódov číslic 0 až 9 - buď nastane jedej z dvoch predchádzajúcich prípadov, vtedy vykonáme opravu pripočítaním čílsice 6 na príslušnom ráde, alebo je výsledná číslica správna


V obidvoch prípadoch sme získali po korekcii správny kód výsledku.

V prípade odčítania môže nastať rovnaká situácia ako pri sčítaní, že dôjde k podtečeniu medzi štvoricami bitov alebo k nesprávnemu kódu číslice.

V tomto prípade vo výsledku je neplatný kód číslice s najnižšou váhou a došlo k podtečeniu medzi bitmi 3 a 4.


Súčin celých čísel bez znamienka

Majme dva binárne osembitové operandy

Príklad :

Ak sú operandy n-bitové, výsledok bude 2n-bitový. Blokov schéma celočíselnej násobičky


Súčin celých čísel ( so znamienkom)

Budeme uvažovať len čísla vyjadrené v doplnkovom kóde. Na to aby algotimus násobenia bol použiteľný, okrem možnosti previesť operandy na kladné čísla, a potom upraviť výsledok podľa výsledného znamienka súčinu, je potrebné korigovať výsledok získaný popísaným algoritmom. Majme operandy X a –Y, v doplnkovom kóde -Y=2n-Y, potom


obrazom -XY je v doplnkovom kóde

potom musíme korigovať výsledok pripočítaním čísla


čo je vlastne o n-bitov posunutý opernand (–X) zobrazený v doplnkovom kóde.

Príklad : Majme čísla 15 a –13. Na ich zobrazenie potrebuje 5 bitov 1 znamienkový a 4 bity na zobrazenie čísel 13 a 15. Výsledok násobenia týchto čísel bude 10 bitový.


Podobná situácia nastane v prípade, že sú obidva operandy záporné


Aby bol výsledok spravny musíme pripočítať k výsledku 2n.X a 2n.Y, a ignorovať jednotku v Carry Bite.


Príznakové bity

Sú súčasťou príznakového registra ( stavového slova procesora), ktorý agreguje okrem iného aj jednobitové informácie o výsledku aritmeticko-logickej operácie, medzi ktoré patria : - ( C ), (CY) (Carry) ( signalizácia prenosu do vyššieho rádu/ výpožičky z vyššieho rádu) - (Z) (Zero) príznak nuly ( všetky bity výsledku sú nulové) - (S) (Signum) kopíruje MSB výsledku - Overflow, Parity atď. Význam príznakových bitov pri vetvení programu !!