Aritmetické operácie v dvojkovej sústave: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
Riadok 35: | Riadok 35: | ||
Pre odčítanie dvoch binárnych čísel sa používa pripočítanie čísla s opačným znamienkom v doplnkovom kóde. | 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 == | == Elementárne aritmeticko-logické operácie == |
Aktuálna revízia z 11:04, 19. september 2017
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)
Označovanie bitov v 16-bitovom slove (v dvojbajtovom slove)
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ú:
Pre viacbitové ( budeme uvádzať príklady pre 8-bitové operandy ( jeden bajt):
Logický súčet (OR)
Patrí medzi binárne operácie. Pravidlá pre jednobitové operandy sú:
Pre jednobajtové operandy:
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
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
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ú:
Pre jednobajtové operandy:
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
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
Pomocou masky môžeme testovať logickú hodnotu vybraného bitu, bitov, bajtu a bajtov. Použitím, napríklad, masky
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ú:
Pre jednobajtové operandy:
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
bude výsledok operácie
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
Rotácia obsahu pamäťového miesta doľava
Posuny obsahu pamaťového miesta môžu byť:
- logické
- aritmetické
Logické posuny Logický posun obsahu pamäťového miesta doprava
Logický posun obsahu pamäťového miesta doľava
Aritmetické posuny Aritmetický posun obsahu pamäťového miesta doprava
ale pre bajt
Aritmetický posun obsahu pamäťového miesta doľava
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.
V prípade súčtu dvoch 8-bitových slov bude
v ďalšom príklade
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í
a logických operácií
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
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 !!