UKŁADY MIKROPROCESOROWE Kodowanie informacji i systemy liczbowe OPRACOWANIE KŁ MALBORK
WPROWADZENIE 1. Pojęcia podstawowe: Czym zajmuje się elektronika? Informacja Sygnał
Uproszczona klasyfikacja układów elektronicznych Układy elektroniczne Układy analogowe Układy cyfrowe Układy liniowe Układy nieliniowe Układy kombinacyjne Uklady kombinacyjne (bez pamięci) Układy sekwencyjne Układy sekwencyjne (z pamięcią) Wzmacniacze... Modulatory Prostowniki Powielacze... Układy synchroniczne Układy asynchroniczne
KLASYFIKACJA SYGNAŁÓW - Analogowe - nieprzerwane w czasie i dziedzinie amplitudy - Próbkowane - przerywany na osi czasu; na osi amplitudy przyjmuje każdą wartość - Kwantowane - nieprzerwane w czasie; przyjmuje ściśle określone poziomy amplitudowe - Cyfrowe - dyskretne, czyli nieciągłe w czasie; nieciągłe w amplitudzie
- cyfrowe: dyskretne, czyli nieciągłe w czasie; nieciągłe w amplitudzie np. binarne (dwójkowe) czyli przyjmujące dwie określone wartości w określonych momentach (chwilach) czasowych; sygnał cyfrowy może mieć wartość amplitudy 0 [V] (niski potencjał), bądź +U [V] (wysoki potencjał), choć trzeba zaznaczyć, że jest to sprawa konwencji, bowiem można też przyjąć - U [V]. Zazwyczaj sygnałowi 0 [V] zwykło się przypisywać cyfrę "0", natomiast sygnałowi +U [V] cyfrę "1" (konwencja dodatnia, pozytywna).
TECHNIKA PCM Z powodu swoich zalet sygnały cyfrowe wykorzystuje się coraz częściej również w dziedzinach elektroniki, gdzie dotychczas stosowanie sygnałów analogowych wydawało się najbardziej naturalne i oczywiste (np. technika PCM - modulacja kodowoimpulsowa w teletransmisji). Podstawowymi parametrami informacji cyfrowej jest liczba cyfr tworzących przetwarzaną cyfrę oraz częstotliwość ich przekazywania. Ponieważ naturalne jest dążenie do zwiększenia ilości informacji przesyłanej w czasie, dlatego zrozumiała jest tendencja do stosowania wąskich impulsów o dużej częstotliwości. Widmo sygnału cyfrowego nie jest istotnym parametrem, dlatego układy cyfrowe logiczne nie są badane częstotliwościowo, zaś jedynie pod kątem zachowania standardowych wartości amplitudy typowej dla "0" lub "1", odpowiedniego czasu narastania i opadania zbocza impulsu.
OKREŚLENIE UKŁADU LOGICZNEGO Układ logiczny - przetwornik informacji podanej w sposób dyskretny, nieciągłej w czasie i wyróżniającej dwie wartości amplitudy sygnału. Układ logiczny a układ cyfrowy - układem logicznym (logic circuits) zwykło się nazywać modele matematyczne (abstrakcyjne) fizycznie istniejącego "układu cyfrowego" (digital circiuts) zbudowanego z elementów cyfrowych. Spotyka się również termin "układy przełączające" (switching circuits) mające swoje pochodzenie w technice układów stykowych.
POJĘCIE UKŁADU CYFROWEGO, POJĘCIE UKŁADU LOGICZNEGO x 1 y 1 x 2 UKŁAD LOGICZNY y 2 x m y n x i {0;1} y j {0;1} i=1,2,...,m j=1,2,...,n
Programowalny układ logiczny x 1 y 1 x 2 UKŁAD LOGICZNY y 2 x m y n s 1 s 2 s k
SPOSOBY PRZEDSTAWIANIA INFORMACJI W UKŁADACH LOGICZNYCH 1. Kodowanie cyfrowe 2. Kody: NKB BCD (Binary Coded Decimal) 1 z n Unitarny Kod wskaźnika 7- elementowego Gray a
Kodowanie cyfrowe KODOWANIE INFORMACJA CIĄGI BINARNE Kodowanie binarne - odwzorowanie przyporządkowujące każdej informacji ze zbioru I (zbiór inf. określonego typu) jednego i tylko jednego słowa binarnego ze zbioru X. Przez kod (I)=X wyrażone jest słowo binarne reprezentujące informację I. Jeśli słowo binarne X o długości (liczbie bitów) n reprezentuje formację liczbową, to jest możliwe podanie wzoru określającego zależności pomiędzy wartościami poszczególnych bitów słowa a wartością reprezentowanej przez to słowo liczby. Zaznaczyć trzeba, że jest to słuszne tylko dla tzw. kodów wagowych - gdzie każdy bit słowa ma określoną wagę.
NKB w zakresie od 0 do 15 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 10 1 0 1 0 11 1 0 1 1 12 1 1 0 0 13 1 1 0 1 14 1 1 1 0 15 1 1 1 1 8 4 2 1
a X n 1 a n 2... a 2 n 1 0, a a KOD DWÓJKOWY 0,1 2 n 2 a n 3 2 n 1 n 2 n 3 0 2 a... a ILORAZ RESZTA Cyfra dziesiętna Wektor informacji cyfrowej 35 2 17... 1 17 8... 1 2 8 2 4... 0 4 2 2... 0 2 2 1... 0 1 2 0... 1 1 0 0 0 1 1 0 1 2 3 4 5 6 7 000 001 010 011 100 101 110 111 7 6 5 4 3 2 1 0 10100111 2 1 2 0 2 1 2 0 2 0 1 2 1 2 1 167 2 10
Kod uzupełnieniowy (ang. complement code) dwójkowa reprezentacja liczby, w której bit najbardziej znaczący jest traktowany jako bit znaku. Zaletą tego kodu jest prostota układów elektronicznych wykonujących działania na przedstawionych w nim liczbach. Rozróżnia się kody uzupełnień do jedności oraz do dwóch, różniące się sposobem zapisu liczb ujemnych oraz co za tym idzie algorytmami wykonywania działań arytmetycznych.
KOD U2 Kod uzupełnień do dwóch (w skrócie U2 lub ZU2) jest obecnie najpopularniejszym sposobem zapisu liczb całkowitych oraz ułamkowych przedstawionych w formacie stałoprzecinkowym na bitach. Jego popularność wynika z faktu, że operacje dodawania i odejmowania są w nim wykonywane tak samo jak dla liczb binarnych bez znaku. Z tego też powodu oszczędza się na kodach rozkazów procesora. Nazwa kodu wzięła się ze sposobu obliczania liczb przeciwnych. Dla jednobitowej liczby wartość przeciwną obliczamy odejmując daną liczbę od 2 (uzupełniamy jej wartość do dwóch). Analogicznie, dla liczb n-bitowych wartości przeciwne uzyskujemy odejmując liczbę od dwukrotnej wagi najstarszego bitu (2 2 n 1 = 2 n ). W analogiczny sposób można stworzyć np. kod uzupełnień do jedności. Zaletą tego kodu jest również istnienie tylko jednego zera. Przedział kodowanych liczb nie będzie zatem symetryczny. W U2 na n bitach da się zapisać liczby z zakresu: Dla 8 bitów (bajta) są to liczby od 128 do 127. Liczba 2 n 1 nie posiada swojego przeciwieństwa w n-bitowej reprezentacji kodu U2.
KOD U2 Zapis liczb W dwójkowym systemie liczbowym najstarszy bit liczby n- cyfrowej ma wagę 2n 1. Jedyną różnicą, jaką wprowadza tu kod U2, jest zmiana wagi tego bitu na przeciwną ( 2n 1). Bit ten jest nazywany bitem znaku, ponieważ świadczy o znaku całej liczby jeśli jest ustawiony (=1) cała liczba jest ujemna, jeśli jest skasowany (=0) liczba jest dodatnia lub równa 0. Zwiększając obszar zajmowany przez liczbę w kodzie U2 (np. z jednego bajta na dwa), dodawany obszar wypełnia się bitem znaku.
KOD U2 Zapis liczb Kod U2 może być połączony z kodem stałopozycyjnym w celu umożliwienia zapisu liczb niecałkowitych. Wymagana jest wtedy umowa co do miejsca położenia przecinka oddzielającego część całkowitą od ułamkowej (może on również leżeć poza cyframi znaczącymi liczby). Liczby takie można traktować jako liczby całkowite przy dodawaniu i odejmowaniu. Przy mnożeniu i dzieleniu wymagane są korekty, jeśli wynik ma mieć w tym samym miejscu przecinek. Zapis dwójkowy liczb zmiennoprzecinkowych na ogół nie używa wcale kodu U2, bądź używa go tylko dla wykładnika. PRZYKŁAD: 11101101 U2 = 1 2 7 + 1 2 6 + 1 2 5 + 0 2 4 + 1 2 3 + 1 2 2 + 0 2 1 + 1 2 0
KOD U2 Liczba przeciwna Aby zamienić liczbę w U2 na przeciwną, należy wykonać dwa kroki: dokonać inwersji bitów, czyli pozamieniać 0 na 1 i odwrotnie; zwiększyć wynik o 1. Można też posłużyć się metodą podaną na wstępie, ale powyższa metoda jest prostsza i działa również na procesorach, które nie mają operacji odejmowania. Przykład Dana jest liczba: 01001010 U2 = 0 -(2 7 ) + 1 2 6 + 0 2 5 + 0 2 4 + 1 2 3 + 0 2 2 + 1 2 1 + 0 2 0 = 74 D Dokonujemy inwersji: 10110101 i zwiększamy o 1: 10110110 U2 = 1 -(2 7 ) + 0 2 6 + 1 2 5 + 1 2 4 + 0 2 3 + 1 2 2 + 1 2 1 + 0 2 0 = -74 D
KOD U2 Dodawanie i odejmowanie liczb Dodawanie i odejmowanie w U2 odbywa się standardową metodą traktujemy liczby jako zwykłe liczby binarne (dodatnie), dodajemy je lub odejmujemy, a wynik otrzymujemy w zapisie U2. Dodawanie i odejmowanie odbywa się łącznie z bitem znaku, a przeniesienia i pożyczki poza najstarszy bit (bit znaku) ignorujemy. Jeśli jednak przepełnienie (lub pożyczka) nie będzie występować jednocześnie na bit znaku i poza niego, wówczas możemy być pewni przekroczenia zakresu wyniku.
KOD U2 Przykład Uwaga: przecinek oznacza odddzielenie części całkowitej od ułamkowej, kropka znaku liczby od wartości w U2 Rezerwujemy odpowiednią ilość "bitów" uzupełniając z lewej strony bitem znaku, a z prawej zerami zgodnie z zasadą zapisu w U2.
KOD U2 Dodawanie 1.10100,010 +1.11000,011 ------------ 1.01100,101
KOD U2 Odejmowanie Odejmowanie jest realizowane, podobnie jak dodawanie 1.10100,010-1.11000,011 ------------ 1.11011,111
KOD U2 Odejmowanie może być zamienione na dodanie liczby przeciwnej, dlatego w niektórych procesorach zrealizowano tylko operację tworzenia liczby przeciwnej i dodawanie. Przykład odejmowania przez zamianę liczby na liczbę przeciwną. przeciwna do 1.11000,011 = 0.00111,101 1.10100,010 +0.00111,101 ------------ 1.11011,111
KOD U2 Mnożenie liczb I wariant metody Bootha Algorytm słowny: Badamy kolejne pary bitów mnożnika. Jeżeli badana para jest kombinacją 10 to od iloczynu częściowego odejmujemy mnożną, wynik przesuwamy o jedno miejsce w prawo. Jeżeli jest to para 01 to dodajemy mnożną do iloczynu częściowego, przesuwamy wynik o jedno miejsce w prawo Jeżeli są to pary 00 lub 11 to nie wykonujemy żadnego działania, tylko przesuwamy o jedno miejsce w prawo. Gdy w skład pary wchodzi bit znaku to nie wykonujemy przesunięcia.
KOD U2 Przykład Uwaga: część całkowita w zapisie binarnym została pominięta - zapis jest postaci bit_znaku.bity_ułamka Analizuję bity liczby B (od prawej do lewej strony), dodaję i odejmuję liczbę A. 0.0000 (iloczyn częściowy) -1.1011 (jest 10, odejmuje) ------ 0.0101 0.00101 -> (i przesuwa) +1.1011 (jest 01, dodaje) ------- 1.11011 1.111011 -> (i przesuwa) 1.1111011 -> (jest 00, tylko przesuwa) -1.1011 (jest 1.0, ale jest bit znaku, to nie przesuwa ) --------- 0.0100011 Wynik otrzymujemy w kodzie znak-moduł (ZM).
KOD U2 Sprawdzenie
KOD UZUPEŁNIEŃ DO JEDNOŚCI ZU1 Kod uzupełnień do jedności to sposób zapisu liczb całkowitych oznaczany jako ZU1 lub U1. Liczby dodatnie zapisywane są jak w naturalnym kodzie binarnym, przy czym najbardziej znaczący bit traktowany jako bit znaku musi mieć wartość 0. Do reprezentowania liczb ujemnych wykorzystywana jest bitowa negacja danej liczby, co sprawia, że bit znaku ma wartość 1. Wynika z tego również występowanie dwóch reprezentacji zera: +0 (00000000 U1 ) i -0 (11111111 U1 ). W związku z tym liczby zapisane w ZU1 na n bitach pochodzą z zakresu: co daje zakres identyczny jak w reprezentacji znak-moduł. Dla 8 bitów (bajta) są to liczby od -127 do 127.
KOD UZUPEŁNIEŃ DO JEDNOŚCI ZU1 Dodawanie i odejmowanie Dodawanie liczb w U1 jest podobne do dodawania liczb binarnych, z tą różnicą że powstałe przeniesienie poza najstarszy bit należy dodać do wynikowej sumy. Na przykład obliczając wartość wyrażenia 7 + ( 3) oczekujemy wyniku 4. Dodając binarnie te liczby zapisane w kodzie U1, dostaniemy liczbę 3 oraz przeniesienie, które dodajemy do otrzymanej liczby aby otrzymać ostateczny wynik 4: 111111 (przeniesienia na poszczególnych bitach) 00000111 U1 7 D + 11111100 U1-3 D ---------- 100000011 00000011 U1 3 D (wynik obcięty do zakresu liczby) + 00000001 D 1 D (dodajemy przeniesienie) ---------- 00000100 U1 4 D (ostateczny wynik) Aby wykonać odejmowanie wystarczy odwrócić bity drugiej liczby i tak powstałe liczby dodać.
Kod znak-moduł to sposób zapisu liczb całkowitych oznaczany jako ZM (bądź SM). Wszystkie bity poza najstarszym mają takie samo znaczenie jak w naturalnym kodzie binarnym. Wyróżniony bit w tym zapisie jest bitem znaku. Jeżeli ma on wartość 0 to dana liczba jest dodatnia, jeżeli 1 to liczba jest ujemna. W związku z tym występują dwie reprezentacje zera: +0 (00000000 ZM ) i -0 (10000000 ZM ). Jednocześnie wpływa to na zakres liczb jaki można przedstawić używając kodowania ZM na n bitach: Dla 8 bitów (bajta) są to liczby od -127 do 127. Liczby zapisane w kodzie ZM na 4 bitach: znak-moduł dziesiętnie 0000 +0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000-0 1001-1 1010-2 1011-3 1100-4 1101-5 1110-6 1111-7
KOD ÓSEMKOWY 3 7 6 4 Cyfra 011 111 110 100 dziesiętna 0 1 2 3 4 5 6 7 Wektor informacji cyfrowej 000 001 010 011 100 101 110 111 L 8 =a n 8 n + a n-1 8 n-1 + +a 1 8 1 + a 0 8 0 3764 (8) =3*8 3 + 7*8 2 + 6*8 1 + 4*8 0 =1536+448+48+4=2036 (10)
F A 4 KOD SZESTNASTKOWY 1111 1010 0100 7 6 4 4 Cyfra szesnast. 0 1 2 3 4 5 6 7 8 9 A B C D E F L hex =a n 16 n + a n-1 16 n-1 + +a 1 16 1 + a 0 16 0 Wektor informacji cyfrowej 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 FA4 hex = 15*16 2 + 10*16 1 + 4*16 0 = 3840+160+4=4004 (10)
BCD 16 8 4 2 1 (25) 10 = ( 1 1 0 0 1 ) NKB (25) 10 = ( 0 0 1 0 0 1 0 1 ) BCD (Każda cyfra oddzielnie) 2 5 4 BITY BO CYFRY SĄ OD 0 DO 9
Unitarny ( 1 ) 1 ( 2 ) 11 ( 3 ) 111 ( 4 ) 1111
Kod wskaźnika 7- elementowego a f e g d b c a b c d e f g 0 1 1 1 1 1 1 0 1 0 1 1 0 0 0 0 2 1 1 0 1 1 0 1 3 1 1 1 1 0 0 1 4 0 1 1 0 0 1 1 5 1 0 1 1 1 0 1 6 1 0 1 1 1 1 1 7 1 1 1 0 0 0 0 8 1 1 1 1 1 1 1 9 1 1 1 1 0 1 1
Kod Gray a 2- bitowy 0 0 0 1 1 1 1 0 3- bitowy 0 000 1 001 2 011 3 010 4 110 5 111 6 101 7 100 10 11 00 01 100 1- bitowy n = 1 0 1 110 111 010 101 000 001 011
Kod Gray a dla czterech zmiennych 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 1 1 0 0 0 0110 0111 0100 0101 0010 0011 0000 0001 1110 1111 1100 1101 1010 1011 1000 1001
Liczby stałopozycyjne Liczby stałopozycyjne i zmiennopozycyjne Przeprowadzanie obliczeń na liczbach całkowitych oraz ułamkowych, o bardzo dużych oraz małych wartościach wymaga stosowanie rożnych metod przedstawienia liczb. Obecnie stosowane są dwa sposoby prezentacji liczb, stałopozycyjne oraz zmienno pozycyjne. Postać liczby stałopozycyjna może być wykorzystywana zarówno do reprezentowania liczb całkowitych jak i ułamkowych. W takiej postaci można przedstawić również liczby składające się z części całkowitej oraz ułamkowej. W przypadku takim pierwszy bit odpowiada za znak liczby, druga część bitów przedstawia część liczby całkowitą, natomiast część ułamkową przedstawia trzecia część bitów.
Liczby stałopozycyjne Rys. 8. Format liczby stałopozycyjnej
Liczby stałopozycyjne W większości komputerów przetwarzane są liczby stałopozycyjne w których przecinek jest umieszczony zaraz po najmłodszej cyfrze liczby, czyli przetwarzane są liczby całkowite. Możliwe jest wtedy przeprowadzenie obliczeń zarówno w systemie binarnym jak również liczb dziesiętnych których pojedyncze cyfry zapisane są za pomocą tetrad. Podczas gdy przecinek umieszczany jest przed najstarszą z cyfr liczby, obliczenia wykonywane są na liczbach ułamkowych. Najrzadziej spotyka się liczbę stałopozycyjną w której przedstawiona jest część całkowita i ułamkowa, ze względu na skomplikowane przetwarzanie takich liczb.
Liczby stałopozycyjne Może się zdarzyć iż liczba cyfr przed przecinkiem jest większa od ilości odpowiednich bitów i mamy wtedy do czynienia z nadmiarem w pozycjach cyfrowych, czego efektem jest przekłamanie w wyniku operacji arytmetycznych. Aby temu zapobiec wprowadza się współczynnik skali. Są to liczby przez które mnoży się liczbę stałopozycyjną aby nie doszło do nadmiaru. Prostszym rozwiązaniem jest przedstawienie liczby jako ułamka właściwego. Możliwy jest również przypadek otrzymania w trakcie operacji arytmetycznych wyniku o bardzo małej wartości, a wtedy liczba stałopozycyjna może być zapisana za pomocą samych zer. Mamy wtedy do czynienia z niedomiarem.
Rozwiązaniem problemów związanych z niedokładnością obliczeń na liczbach stałopozycyjnych jest zastosowanie do reprezentacji liczb postaci zmiennopozycyjnej. Liczbę w takiej postaci przedstawia wzór: X = k p M gdzie: M - mantysa liczby X, p - cecha liczby X, k - podstawa cechy. Rys. 9. Format liczby zmiennopozycyjnej Dla mantysy rezerwowana jest stała liczba cyfr o podstawie k tak, że zakres zmian mantysy może być określony jako k -m < M < 1 k -m. Dla udogodnienia zapisu cechy p liczby mantysa podlega normalizacji, czyli zakres jej zmian zostaje przedstawiony jako k -1 X 1 k -m. W mantysie po normalizacji pierwsza jej cyfra zawiera zawsze cyfrę różna od zera. W systemie dwójkowym będzie to jedynka. Cecha p liczby, przedstawiona jest poprzez liczbę stałopozycyjną i może być zarówno dodatnia jak i ujemna. Dla cechy jest przeznaczone n cyfr o podstawie k, wobec czego zakres zmian przedstawia się wzorem:
Tak więc przedział zmian wartości liczby prezentowanej w postaci zmiennopozycyjnej możemy określić: Po przekształceniu otrzymujemy równanie: Liczby w obydwu formatach, stałopozycyjnym oraz zmiennopozycyjnym są obarczone błędami względnymi i wynoszą one:
Wady i zalety systemu stałopozycyjnego i zmiennopozycyjnego Błąd względny w przypadku kiedy liczba jest reprezentowana za pomocą formy zmiennopozycyjnej jest równomiernie rozłożony w całym zakresie liczby. W przypadku zastosowania formy stałopozycyjnej błąd względny jest tym mniejszy im dłuższa jest mantysa w związku z czym w tej postaci zapisuje się duże liczby, podczas gdy w formie zmiennopozycyjnej liczby małe. Aby uzyskać dużą dokładność obliczeń w komputerach stosuje się kombinację obydwu form przedstawienia liczb. Wykorzystując do obliczeń liczby stałopozycyjne uzyskujemy możliwość użycia prostej jednostki arytmetyczno-logicznej komputera, z drugiej strony uzyskujemy mały zakres liczb jaki możemy przedstawić za pomocą takiej jednostki.
5.1 Dodawanie i odejmowanie Algorytm sumy arytmetycznej bitów: bity przeniesienie C suma S 0 + 0 0 0 0 + 1 0 1 1 + 0 0 1 1 + 1 1 0 W sumowaniu liczb wielobitowych dodawaniu podlegają bity o identycznych wagach np. 1001 + 0101 = 1110 C = 0, S = 1110 1101 + 1011 = 11000 C = 1, S = 1000
W sumowaniu liczb wielobitowych dodawaniu podlegają bity o identycznych wagach np. 1001 + 0101 = 1110 C = 0, S = 1110 1101 + 1011 = 11000 C = 1, S = 1000 Operacje arytmetycznie wygodnie jest wykonywać w kodzie U2. Wykażemy, że -a = a' + 1 a = (1010)U2 = -8 + 2 = (-6)10 -a = (1010)'U2 + 1 = 0101 + 1 = (0110)U2 = 4 + 2 = (6)10 a - a = 0, a + a' + 1 = 0 1010 + 0110 = 10000 C = 1 S = 0 Operacja odejmowania w kodzie U2 sprowadza się do dodawania : a - b = a + (-b) = a + b' + 1 Przykład: a = (36)10 b = (71)10, oblicz a - b a = (00100100)U2 b = (01000111)U2 -b = (01000111)? + 1 = 10111000 + 1 = (10111001)U2 a - b = 00100100 + 10111001 = (11011101)U2 = -128 + 64 + 16 + 8 + 4 + 1 = (- 35)10 C = 0, S = 11011101
Mnożenie i dzielenie przez dwa - przesunięcia arytmetyczne Mnożenie przez dwa ( nazywane inaczej arytmetycznym przesunięciem w lewo ) realizujemy zawsze przez przesunięcie liczby w lewo z dopisaniem 0 na najmniej znaczącej pozycji. W razie przekroczenia zakresu może pojawić się nadmiar. Przykład: - przesunięcie w lewo (2)10 = (0010)U2 ------(0100)U2 = (4)10 (-2)10 = (1110)U2 ------ (1100)U2 = - 4 Jeżeli w wyniku przesunięcia znak liczby (najbardziej znaczący bit ) nie ulegnie zmianie to przesunięcie w lewo poprawnie realizuje mnożenie przez dwa. W poniższych przykładach znak liczby zmieni się: (4)10= (0100)U2 -----(1000)U2 = (-8)10? (-6)10= (1010)U2 ------ (0100)U2 = (4)10? Wystąpił nadmiar i wynik jest błędny. Wynika on z faktu, że zwiększyliśmy wartość liczby tak bardzo, że przekroczyła ona zakres liczb możliwych do wyrażenia w ograniczonym słowie.
Dzielenie przez dwa (nazywane inaczej arytmetycznym przesunięciem w prawo) realizujemy przez przesunięcie liczby w prawo z powielenia na najbardziej znaczącej pozycji takiego bitu, jaki się tam znajdował przed przesunięciem. Operacja jest zawsze możliwa do wykonania. Przykład przesunięcia w prawo: (6)10 = (0110)U2 ----- (0011)U2 = (3)10 Przesuwając liczbę ujemną w prawo musimy na najbardziej znaczącą pozycję dopisywać 1, a nie 0: (-6)10 = (1010)U2 ----- (1101)U2 = (-3)10 Przy przesuwaniu w prawo może nastąpić utrata dokładności np. (7)10 = (0111)U2 ---- (0011)U2 = (3)10 Aby dokładnie wyznaczyć wynik dzielenia należy wartość gubionego najmniej znaczącego bitu zapamiętać i traktować jako część ułamkową liczby czyli (0011,1)U2 = (3,5)10
Działania na liczbach binarnych
Działania na liczbach binarnych
Podstawy algebry Boole a 1. Założenia algebry Boole a 2. Definicja działań + i * 3. Aksjomaty 4. Twierdzenia 5. Ilustracja dowodu twierdzenia a + a * b = a 6. Ilustracja praw pochłaniania w algebrze zbiorów 7. Funkcja boolowska 8. Tabela prawdy (logiczna) 9. Zapis numeryczny 10. Dekompresja Shannona 11. Minimalizacja funkcji boolowskich
Założenia algebry Boole a Algebra Boole'a jest "narzędziem" matematycznym służącym m.in. do opisu, analizy i syntezy układów logicznych. Stanowi ona uogólnienie rachunku zdań i algebry zbiorów uznając jedno i drugie tyko za szczególne przypadki ogólniejszej teorii. Również szczególnym przypadkiem algebry Boole'a jest binarna algebra Boole'a. Dla zdefiniowania każdej algebry potrzebne jest określenie pewnego zbioru, działań w tym zbiorze (operacji), elementów wyróżnionych w tym zbiorze oraz zespołu aksjomatów i twierdzeń Binarną algebrę Boole a tworzą: Zbiór dwuelementowy {0;1} Wyróżnione elementy tego zbioru 0 i 1 (czyli oba są wyróżnione ) Dwa działania (operacje, funktory) suma logiczna (+) oraz iloczyn logiczny (*) zdefiniowane dalej zestawy aksjomatów 1-5, 1-5 Wynikający z aksjomatów zestaw twierdzeń 1-7, 1-7, 8
Definicja działań + i * w algebrze Boole a lub i a b a+b a*b 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 a, b {0;1}
Aksjomaty według Huntingtona Aksjomaty Określenia 1. a + b {0,1} 1. a * b {0,1} Wynik sumy (iloczynu) należy do zbioru {0;1} 2. a + b = b + a 2. a * b = b * a Przemienność sumy (iloczynu) 3. a * (b + c) = a * b + a *c 3. a + b * c = (a + b) * (a + c) Rozdzielność iloczynu (sumy) względem sumy (iloczynu) 4. a + 0 = a 4. a * 1 = a Istnieje element neutralny pod względem sumy (iloczynu) 5. Istnieje taki element a, że a + a = 1 5. Istnieje taki element a, że a * a = 0 Aksjomat ten stanowi właściwie definicję działania - zwanego
Twierdzenia Twierdzenia Określenia 1. a + (b + c) = (a + b) + c 1. a * (b * c ) = (a * b) * c Prawo łączności sumy (iloczynu) 2. a + a * b = a 2. a * (a + b) = a Prawo absorbcji (pochłaniania) 3. a + a * b = a + b 3. a * (a + b) = a * b 4. a + 1 = 1 4. a * 0 = 0 Prawo dominacji elementu max (min) 5. a + a = a 5. a * a = a Prawo idempotentności 6. a + b = a * b 6. a * b = a + b Prawa de Morgana! 7. 0 = 1 7. 1 = 0 Prawo istnienia elementu przeciwnego 8. a = a Prawo podwójnej negacji
Ilustracja dowodu twierdzenia a + a * b = a metodą zero jedynkową tabelkową a b Lewa Prawa a a * b a + a * b a 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 L = P
Ilustracja praw pochłaniania w algebrze zbiorów a B a B a B a a a a B = a a (a B) = a a a B a B a
Przejścia Rachunek Zdań Algebra zbiorów Algebra Boole a v + * ~ - Fałsz 0 Prawda 1
Interpretacja fizyczna binarnej algebry Boole a negacja zestyk rozwierny afirmacja zestyk zwierny + + + + suma logiczna iloczyn logiczny
Interpretacja fizyczna aksjomatów binarnej algebry Boole a 2. 2. a b b a a b b a 3. 3. a b c a a b c b a c a b a c 4. 4. a a a a 5. 5. a a a a
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów 1 Liczby całkowite, ze znakiem (U2) i bez znaku dodawanie (ADD) przykład: mov EAX,10 ;wpisanie do rejestru EAX liczby 10 add EAX,20 ;dodanie do zawartość EAX liczby 20 ;(EAX:=EAX+20) C=0 dodawanie z przeniesieniem (ADC) W=A+B+C (C=0 lub 1)
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów 2 odejmowanie (SUB) mov EAX,10 ;wpisanie do rejestru EAX liczby 10 sub EAX,20 ;odjęcie od zawartość EAX liczby 20 (w tym przypadku wynik będzie ujemny (N=1), oraz nastąpi pożyczka (C=1)) odejmowanie z pożyczką (SBB) W=A-B-C
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów 3 inwersja bitów (NOT) - tak jak w systemie uzupełnień do jedynki U1 mov EAX,12 ;wpisanie do rejestru EAX liczby 12 NOT EAX negacja liczby (NEG) system uzupełnień do dwóch (U2) W=(NOT A) +1 mov EAX,12 ;wpisanie do rejestru EAX liczby 12 NEG EAX ;w EAX jest 12 (U2)
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów 4 mnożenie liczb (MUL) : - wynik ma dwa razy więcej bitów niż składniki mnożenia (wynik zawsze w DX:AX) mov ax,2000h mov bx,10h mul bx po wykonaniu mnożenia w rejestrze DX znajdzie się liczba 2h, a w AX liczba 0000h (łączny wynik 20000h)
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów 5 dzielenie liczb (DIV) : dzielna w DX:AX wynik w postaci: część całkowita (AX) i reszta (DX) mov dx,3h mov ax,205h mov bx,100h div bx ;AX = 302h = (30205h/100h) ;DX = 5 (reszta z dzielenia)
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów 6 Iloczyn logiczny (AND) : mov dx,11000011b and dx,11110000b ;w dx będzie 11000000b AND A 0 1 0 1 B 0 0 1 1 W 0 0 0 1
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów 7 Suma logiczna (OR) : mov ax,11000011b or ax,11110000b ;w ax będzie 11110011b OR A 0 1 0 1 B 0 0 1 1 W 0 1 1 1
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów 8 Funkcja EXOR: mov ax,11000011b exor ax,11110000b ;w ax będzie 00110011b XOR A 0 1 0 1 B 0 0 1 1 W 0 1 1 0
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów Przesuwanie bitów logiczne: SHR,SHL: Arytmetyczne: SAR,SAL:
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów Przesuwanie bitów: ROR,ROL
Podstawowe operacje arytmetyczno-logiczne mikroprocesorów Przesuwanie bitów:ror,rol - przykład ;wartość początkowa C bez znaczenia mov ax,11000011b ror ax,1 11100001b ;po wykonaniu C=1 ;przesunięcie o trzy pola mov ax,11000011b ror ax,3 01111000b ;po wykonaniu C=0 79