piątek, 18 października 2013

Architektura komputera








Sposoby przedstawiania liczb – zasada systemu pozycyjnego

Termin „liczba” kojarzy się nam na ogół z jej zapisem w systemie dziesiętnym. Ta sama liczba może  być przedstawiona na wiele sposobów. Wybór reprezentacji dyktują  warunki techniczne. Symbole używane do zapisu liczb nazywamy cyframi. W życiu codziennym do zapisu liczb używamy tak zwanego pozycyjnego systemu dziesiętnego.

System dziesiętny

Polega on na tym, że liczby przedstawia się za pomocą 10 symboli cyfrowych (bo jest to system dziesiętny), a mianowicie 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 zaś znaczenie cyfry zależy nie tylko od niej samej, ale i od jej pozycji (miejsca) w stosunku do innych cyfr (stąd nazwa systemu pozycyjnego).
Na przykład liczba 7710 ( Indeks „10” znajdujący za liczbą informuje w jakim systemie dana liczba jest zapisana) zawiera dwie takie same cyfry, ale ta na lewo oznacza siedem dziesiątek a ta na prawo tylko siedem jednostek.
OGÓLNA ZASADA SYSTEMU POZYCYJNEGO JEST TAKA, ŻE KOLEJNE POZYCJE, IDĄC OD PRAWEJ STRONY DO LEWEJ, OZNACZAJĄ CORAZ WYŻSZE POTĘGI TAK ZWANEJ PODSTAWY SYSTEMU. Dla systemu dziesiętnego podstawą systemu jest oczywiście DZIESIĘĆ. Stąd kolejne pozycje w systemie dziesiętnym oznaczają:

             ...               103 = 1000           102 = 100              101 = 10                100 = 1
       Liczbę                             Liczbę                                Liczbę                          Liczbę
      tysięcy                            setek                                   dziesiątek                     jednostek

Przykład:             63810 =  6•102 + 3•101 + 8•100

W tym zapisie każda cyfra znajdująca się o jedną pozycję w lewo jest zawsze dziesięciokrotnie większa od analogicznej cyfry stojącej obok niej z prawej strony.
W pozycyjnym systemie dziesiętnym największą liczbę, jaka można zapisać przy użyciu pojedynczej cyfry jest liczba dziewięć a liczbę dziesięć zapisuje się już przy użyciu dwóch cyfr: 1 i 0.

Nieprzydatność systemu dziesiętnego w urządzeniach komputera 

System dziesiętny przedstawiania liczb stosowany powszechnie w nauce, technice i życiu codziennym, okazał się bardzo niewygodny w maszynach elektronicznych.
Przy przechowywaniu liczb w urządzeniu technicznym korzystnie jest wartość każdej cyfry przedstawić jako stan pewnego zjawiska fizycznego, np. napięcia na kondensatorze. W systemie dziesiętnym (systemie o podstawie 10) należałoby dziesięciu cyfrom przypisać dziesięć różnych wartości napięcia. Rozpoznawanie cyfry, zakodowanej w formie napięcia, wymagałoby niezawodnego rozróżniania tych napięć, podobnie jak czyni to woltomierz cyfrowy. Jest to technicznie możliwe, lecz w każdym razie gdyby taki układ zbudowano, to pracowałby on niestabilnie. Z tego względu urządzenia elektroniczne preferują tzw. SYSTEM DWÓJKOWY (binarny), gdyż łatwiej i pewniej jest używać tylko dwóch skrajnych stanów, np. 0 Volt i napięcia zbliżonego do pewnej wartości maksymalnej, przypuśćmy 5 Volt. Technologia wytwarzania elementów dwustanowych jest prosta i tania, co decyduje o opłacalności produkcji masowej.

System dwójkowy

Jeśli za podstawę systemu przyjmujemy liczbę DWA to otrzyma się SYSTEM DWÓJKOWY. W systemie dwójkowym istnieją tylko dwie cyfry: 0;1 za pomocą których możemy zapisać dowolną liczbę. Dowolna liczba dwójkowa zawiera więc same zera i jedynki.
W systemie dwójkowym największą liczbę, jaka można przedstawić przy użyciu pojedynczej cyfry jest liczba jeden.
Ponieważ podstawą systemu jest liczba dwa, kolejne pozycje oznaczają:

             ...               23 = 8                    22 = 4                     21 = 2                    20 = 1
                            Liczbę                               Liczbę                             Liczbę                               Liczbę
                                     ósemek                             czwórek                         dwójek                           jednostek
               

Na przykład, jeśli ktoś posługujący się systemem dwójkowym napisze 10112, to ma na myśli: 1•23+0•22+1•21+1•20  czyli liczbę, którą w systemie dziesiętnym zapisuje się tak: 1110

Dwójkowy zegarek pokazujący godzinę 3:25

System szesnastkowy

Gdy za podstawę systemu przyjęta zostanie liczba SZESNAŚCIE to otrzyma się SYSTEM SZESNASTKOWY - tzw. system heksadecymalny o podstawie 16 który nie jest używany bezpośrednio przez układy cyfrowe. Używa się go głównie do prezentacji niektórych danych m.in. adresów komórek pamięci.
.
W systemie szesnastkowym kolejne miejsca w liczbie oznaczają:

             ...               162 = 256             161 = 16                160 = 1
                                Liczbę                            Liczbę                           Liczbę
                                        dwustu–                           szesnastek                jednostek 
                                        pięćdziesiątek–                                                                                                         
                                        szóstek

Istnieje w nim 16 cyfr : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,C, D, E, F
Do zapisania cyfr dziesięć, jedenaście,... piętnaście, wykorzystano litery od A do F.
Jeżeli ktoś posługujący się systemem szesnastkowym napisze  1A316, to ma na myśli:
1•162+10•161+3•160, czyli liczbę, która w systemie dziesiętnym zapisuje się jako 41910.
Największą liczbę, jaka można zapisać w systemie szesnastkowym za pomocą  pojedynczej cyfry jest liczba  piętnaście (litera F).

Relacje pomiędzy poszczególnymi  systemami numeracji

  
System
dziesiętny
System
dwójkowy
System
szesnastkowy
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
10
1010
A
11
1011
B
12
1100
C
13
1101
D
14
1110
E
15
1111
F

Konwersja systemów

Ponieważ komputer posługuje się systemem dwójkowym, a ludzie – dziesiętnym, przekształcenie postaci zapisu liczb (tzw. konwersja systemów) z systemu dwójkowego na dziesiętny i odwrotnie jest czynnością dość częstą.

Konwersja dwójkowo – dziesiętna

Ponieważ podstawą liczenia systemu dwójkowego jest liczba DWA (zapisywana jako 10 – czytaj: jeden zero) to kolejne pozycje oznaczają (wagi bitów):

Nr bitu
7
6
5
4
3
2
1
0
Waga bitu
27 = 128
26=64
25=32
24=16
23=8
22=4
21=2
20=1

Bity są ponumerowane od prawej do lewej, zaczynając od 0. WAGA BITU to podstawa systemu podniesiona do potęgi odpowiadającej numerowi bitu. Waga bitu zerowego wynosi 1. We wszystkich systemach pozycyjnego zapisu liczb całkowitych, skrajnie prawa pozycja jest zawsze równa liczbie 1 bo jest to podstawa systemu do potęgi zero.
Aby znaleźć dziesiętny odpowiednik liczby dwójkowej najprościej dokonać jej rozwinięcia. Każdej pozycji przypisana jest waga, a wykładnikiem potęgi jest numer pozycji.
Np.: Liczba 101002) = 1x24 + 0x23 + 1x22 + 0x21 +0x20
=1*16 =0*8+1*4+0*2+0*1=      20

Konwersja dziesiętno – dwójkowa

W celu przekształcenia liczby wyrażonej w systemie dziesiętnym na system dwójkowy należy liczbę tę dzielić kolejno przez 2, dopóki iloraz nie będzie równy zero. Po każdym dzieleniu należy zapisać otrzymaną resztę. Zapis liczby w systemie dwójkowym otrzymamy odczytując kolejno reszty z dzielenia, począwszy od ostatniej reszty do pierwszej.

PRZYKŁAD: przekształcenie liczby 43710 na liczbę zapisaną w systemie dwójkowy.

Dzielenie   Iloraz          Reszta
przez 2       cząstkowy
437 : 2        218              1
218 : 2        109              0
109 : 2        54                1
54 : 2          27                0
27 : 2          13                1
13 : 2          6                   1
6 : 2             3                   0
3 : 2             1                   1
1 : 2             1                   1
WYNIK : 1101101012 (kierunek odczytywania - od dołu)
Liczba dziesiętna 43710 ma w systemie dwójkowym postać 1101101012
Powyższa metoda tłumaczenia liczb z systemu dziesiętnego na dwójkowy może być zastosowana wyłącznie do liczb całkowitych.

Konwersja szesnastkowo – dziesiętna 

W celu znalezienia wartości liczby szesnastkowej w zapisie dziesiętnym należy zastosować ten sam algorytm, który został podany dla konwersji dwójkowo – dziesiętnej.
Przykład
Znajdź wartość następującej liczby szesnastkowej w zapisie dziesiętnym:
C1C0A6E16

C1C0A6E16 = 12•167+1•166+12•165+0•164+8•163+10•162+6•161+14•160 = 325062103810

Konwersja dziesiętno – szesnastkowa

Konwersja ta przebiega zgodnie z algorytmem podanym dla konwersji dziesiętno – binarnej (dwójkowej), przy czym dzielnikiem jest tu liczba 16. Liczba dzieleń jest równa liczbie cyfr zapisu szesnastkowego. Odczytanie wartość liczby dziesiętnej odpowiadającej liczbie heksadecymalnej 4C2 (16) polega na następujących działaniach:
4C2 (16)= 4x162 + Cx161 + 2x160
4C2 (16) = 4x256 + 12x16 + 2x1
4C2 (16) = 1218 (10)
Lub 4C2 H = 1218 D

Zasady wykonywania działań arytmetycznych w systemie dwójkowym

Dodawanie

Dwie liczby dwójkowe dodaje się tak jak dwie liczby dziesiętne tzn. dodaje się najpierw ostatnią cyfrę jednej liczby do ostatniej cyfry drugiej liczby, następnie przedostatnią cyfrę pierwszej liczby do przedostatniej cyfry drugiej liczby itd., ponieważ jednak w liczbach dwójkowych występują jedynie cyfry 0 i 1, to przy dodawaniu występują tylko 3 następujące przypadki:
0 + 0 = 0
0 + 1 = 1
1 + 1 = 10 ( 1+1 daje nam zero w danej pozycji cyfrowej oraz przeniesienie 1 do następnej pozycji).
W systemie dziesiętnym 1+1=2, ale w systemie dwójkowym liczbę 2 zapisuje się jako 10
Stosując te zasady łatwo dodać do siebie dwie przykładowe liczby dwójkowe:

    0 0 0 1 0 1 1 0        (dwadzieścia dwa)                                               1•24+0•23+1•22+1•21+0•20= 2210
+ 0 0 0 0 1 0 1 1        (jedenaście)                                                                      1•23+0•22+1•21+1•20= 1110
    ––––––––––– 
    0 0 1 0 0 0 0 1        (trzydzieści trzy)                                       1•25+0•24+0•23+0•22+0•21+1•20= 3310

Nieco trudniejsza jest operacja dodawania, gdyby trzeba dodać nie dwie liczby, jak w podanym przykładzie, lecz cały szereg liczb. W tym wypadku pewne kłopoty sprawia pamiętanie jedynek przenoszonych do starszych pozycji cyfrowych. Aby nie komplikować schematów liczących komputera ta trudność rozwiązana została w ten sposób, że w urządzeniach arytmetycznych komputera są sumowane wyłącznie 2 liczby. Do sumy 2 liczb dodaje się liczbę trzecią, do sumy 3 liczb liczbę czwartą itd.

Przykład
Dodaj do siebie w zapisie dwójkowym następujące liczby dziesiętne 16; 23; 61; 95

        000100002         (1610)
        001101112         (2310)
        010100012         (8110)
+     010111112         (9510)
        –––––––
        110101112         (21510)

Odejmowanie

Kod prosty liczby (KP)

Wprowadzamy pozycję znaku (po lewej stronie)
Zapis znaku:
L ≥ 0 to znak = 0
L ≤ 0 to znak = 1
Znak oddzielamy od liczby kropką
+1410 to 0.000011102
–1410 to 1.000011102

Kod uzupełnieniowy(KU) liczby

Kod uzupełnieniowy (dopełnieniowy) liczby która jest nie ujemna = kodowi prostemu (KP)
Kod uzupełnieniowy liczby ujemnej:
-          Przepisać znak bez zmian
-          zanegować wszystkie bity(zamieniamy 0 na 1 i 1 na 0)
-          dodać 1 do wyniku

Oto jak wyznaczyć dwójkową postać liczby – 1410:
      1.000011102          –1410

      1.111100012          negacja wszystkich bitów (znak pozostaje bez zmian)
+   0.000000012          inkrementacja (dodajemy liczbę jeden)
      ––––––––––
      1.111100102    


W identyczny sposób można zmienić na przeciwny, znak liczby ujemnej:
      1.111100102          –1410

      1.000011012          negacja wszystkich bitów
+   0.000000012          inkrementacja
      ––––––––––
      0.000011102    

System uzupełnienia dwójkowego jest korzystny z technicznego punktu widzenia. Z odejmowania można zrezygnować, zastępując je prostą negacją i dodawaniem, zaś dodawanie liczb dodatnich i ujemnych jest prowadzone w myśl jednolitych reguł. Działanie:
+7 – 7 można zastąpić działaniem +710 + (–710)


Przykład:
Wykonujemy działanie 810 – 1310

Na początku zapiszemy liczbę – 1310 używając kodu uzupełniającego:

      1.000011012              –1310

      1.111100102              negacja wszystkich bitów
+   0.000000012              inkrementacja
      –––––––––
     1.111100112       

Następnie wykonujemy dodawanie liczby 810 + (–1310)

      0.000010002                810
+   1.111100112              –1310
      –––––––––
      1.111110112             

Jeżeli wynik jest ujemny (liczba 1 przed kropką) to należy go przenieść z kodu uzupełniającego na kod prosty wykonując następujące czynności:
-          Przepisać znak bez zmian
-          zanegować wszystkie bity(zamieniamy 0 na 1 i 1 na 0)
-          dodać 1 do wyniku
-          znak zostawiamy bez zmian

      1.111110112              –510 K. uzupełniający

      1.000001002              negacja wszystkich bitów
+   0.000000012              inkrementacja
      –––––––––
     1.000001012        –510 K. prosty

Jeżeli wynik jest ≥ 0 to KU = KP

Mnożenie

Mnożenie w systemie dwójkowym wykonuje się tak jak w systemie dziesiętnym, metodą mnożenia przez poszczególne cyfry mnożnika oraz sumowania otrzymanych w ten sposób cząstkowych iloczynów.
Ponieważ w liczbach dwójkowych występują jedynie cyfry 0 i 1, to przy mnożeniu występują tylko następujące przypadki:

0 • 0 = 0
0 • 1 = 0
1 • 0 = 0
1 • 1 = 1
Posługując się tymi regułami można pomnożyć dwie dowolne liczby dwójkowe.

Przykład
Wykonamy działanie 1410 1510 = 21010

                                1    1    1    02              Liczba 1410
•                             1    1    1    12              Liczba 1510
–––––––––––––––––––––

+                             1    1    1    0              
                         1    1    1    0                    
                   1    1    1    0                           
             1    1    1    0   
–––––––––––––––––––––                                                     
      1    1    0    1    0    0    1    02              Liczba 21010

Sprawdzenie:

1•27+1•26+0•25+1•24+0•23+0•22+1•21+0•20 = 21010

Dzielenie

Dzielenie w systemie dwójkowym wykonuje się pisemnie tak jak w systemie dziesiętnym.
Przykład
Podziel liczbę 8510 przez 510 w systemie dwójkowym.

8510          →          10101012
510           →          1012

     0  0  1  0  0  0  1                 
     1  0  1  0  1  0  12     :   1  0  12
     1  0  1                                   
     0  0  0  0  1  0  1                 
                      1  0  1                 
                      0  0  0                 

0  0  1  0  0  0  12         →         1710

        

Ćwiczenie 1

Zamień do postaci dwójkowej liczby dziesiętne  1610, 3110,6510
Obliczyć wartość dziesiętną liczby dwójkowej 11100101(2) , 10101010(2) ,11111111(2)
Ćwiczenie 2

Zamień do postaci dziesiętnej liczby heksadecymalne: 10 H , 1A H , 100 H , BABA H .

Ćwiczenie 3

Wykonaj w systemie dwójkowym działania na liczbach:  10010+5010, 9910+110, 19910+10010

Ćwiczenie 4

Wykonaj w systemie dwójkowym działania na liczbach: 810*810, 610*1210, 1110*1110


Ćwiczenie 5

Wykonaj w systemie dwójkowym działania na liczbach: podziel 12610 przez 2110, podziel 24610 przez 310

Ćwiczenia wykonaj w edytorze tekstu i prześlij w postaci pliku o nazwie jak w nagłówku tego tekstu na adres pocztowy wskazany przez prowadzącego.