Wprowadzenie do architektury komputerów – systemy liczbowe

Transkrypt

Wprowadzenie do architektury komputerów – systemy liczbowe
Wprowadzenie do architektury komputerów – systemy liczbowe, operacje
arytmetyczne i logiczne
1. Bit
Pozycja rejestru lub komórki pamięci służąca do przedstawiania (pamiętania) cyfry
w systemie (liczbowym) dwójkowym. Może przyjmować dwa stany 0 lub 1.
3. Bajt
Ciąg ośmiu bitów, stanowiący najmniejszą adresowalną porcję informacji,
przechowującą jeden znak alfanumeryczny lub liczbę z zakresu 0-255.
2.Słowo
Ciąg bitów, stanowiących porcję danych.
Ustalona dla danego komputera (procesora) pojemność komórki pamięci (rejestru).
Najczęściej słowo jest wielokrotnością bajtu.
Konwersja systemów liczbowych
• dzielenie przez podstawę
• dodawanie i odejmowanie potęg 2
Operacje przesunięcia i obracania – związek z mnożeniem i dzieleniem przez 2
Zapis liczb w NKB
Dodawanie – przeniesienie
Odejmowanie - pożyczka
Mnożenie
5x6=30
dodaj 6
i przesuń w prawo
dodaj 0
i przesuń w prawo
dodaj 6
0000 0101 0110
0110
0110 0101
0011 0010
0000
0011 0010
0001 1001
0110
i przesuń w prawo
dodaj 0
i przesuń w prawo
0111 1001
0011 1100
0000
0011 1100
0001 1110
Liczby ułamkowe stałopozycyjne
0011,0101 = 3 i 5/16
Kod uzupełnień do 2 (U2)
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). Wartość
dziesiętną liczby U2 wyraża wzór:
Najstarszy bit koduje wartość liczby, ale jest też nazywany bitem znaku, ponieważ świadczy o
znaku liczby:
•
•
jeśli jest ustawiony (=1), to liczba jest ujemna,
jeśli jest skasowany (=0), to 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 jest może być również użyty do przechowywania liczb ułamkowych o stałej pozycji
przecinka. Zapisywany jest wówczas licznik ułamka o mianowniku będącym potęgą liczby
dwa (2n, np. 2, 4, 8, ...), mianownik nie jest zapisywany. Przy mnożeniu i dzieleniu takich
liczb wymagane są korekty, jeśli wynik ma mieć przecinek w tym samym miejscu.
Tworzenie liczby ujemnej U2:
• negacja
• dodanie 1
Dodawanie w U2 – normalnie
Odejmowanie w U2 – dodawanie liczby przeciwnej
Dodawanie i odejmowanie liczb U2
Dodawanie i odejmowanie w U2 odbywa się standardową metodą – traktujemy liczby jako
zwykłe liczby binarne (dodatnie), dodajemy je i odejmujemy, a wynik otrzymamy w kodzie
U2. Dodawanie i odejmowanie odbywa się łącznie z bitem znaku. Jeśli przeniesienie (lub
pożyczka dla odejmowania) wystąpi tylko na bit znaku albo poza niego (nie jednocześnie lub
wcale), wówczas mamy do czynienia z przepełnieniem. Oznacza to że wynik nie mieści się w
kodowanym zakresie.
Przykład
W precyzji do części czwartych, w ośmiobitowej reprezentacji, liczby są kodowane:
Dodawanie
11010001
+11100010
-------110110011
Dziewiąty bit wyniku jest odrzucany przy określaniu liczby (jest on używany tylko do
określenia czy nastąpiło przepełnienie). Tu wystąpiło przeniesienie na bit znaku i z niego,
dlatego przepełnienie nie wystąpiło – wynik nie przekroczył zakresu i jest poprawny.
Odejmowanie
Odejmowanie jest realizowane, jak odejmowanie w naturalnym kodzie dwójkowym. Przykład
z reprezentacją do części czwartych:
11010001
−11100010
-------111101111
Odejmowanie może być zamienione na dodanie liczby przeciwnej, Powyższe działanie
realizowane jako wzięcie liczby przeciwnej i dodawanie
przeciwna do 11100010
11010001
+00011110
-----------11101111
= 00011110
Liczby zmiennoprzecinkowe
Wartość liczby zmiennoprzecinkowej jest obliczana według wzoru:
gdzie:S (ang. sign) – znak liczby, 1 lub -1
•
•
•
M (ang. mantissa) – znormalizowana mantysa, liczba ułamkowa
B (ang. base) – podstawa systemu liczbowego (2 dla systemów komputerowych)
E (ang. exponent) – wykładnik, liczba całkowita
Mantysa jest znormalizowana, tj. należy do przedziału
1. Mantysa należy do przedziału [1,2), jest więc postaci 1.xxxxx.... (x – bit o
dowolnej wartości). Ponieważ część całkowita jest znana, i równa zawsze 1, przeto nie
jest zapamiętywana, co daje dodatkowy bit na część ułamkową.
2. Ponieważ znak liczby jest zapamiętywany na jednym bicie, przeto otrzymanie modułu
i wartości przeciwnej wymaga, odpowiednio, wyzerowania tego bitu (logiczna
operacja AND), lub zmiany na wartość przeciwną (logiczna operacja XOR).
Przykład 1
0 0100 0100 111 1100 1010 0010 0111 1100 = 1,111110010100 01001111100*2−59
= 1 *1,8168060 *2−59
DŁUGOŚĆ: 32 bity
znak s (1 bit) = 0 (liczba dodatnia)
wykładnik E (8 bit) = 0100 0100 = 68-127= -59 (odejmujemy 127, bo kod z przesunięciem
2k-1-1)
M = 1,111 1100 1010 0010 0111 11002 = 1,816806010
Dodajemy 1 z przecinkiem bo ją pominięto w zapisie mantysy
1 0100 0100 111 1100 1010 0010 0111 1100 = −1,11111001010 001001111100*2−59 =
−1 *1,8168060 *2−59
DŁUGOŚĆ: 32 bity
s (1 bit) = 1 (liczba ujemna)
E (8 bit) = 0100 0100 = 68-127= -59
M = 1,111 1100 1010 0010 0111 11002 = 1,816806010
0 0111 1111 000 0000 0000 0000 0000 0000 = 1 * 1,0 * 20 = 1
DŁUGOŚĆ: 32 bity
s (1 bit) = 0 (liczba dodatnia)
E (8 bit) = 0111 1111 = 127-127 = 0
M = 1,000 0000 0000 0000 0000 00002 = 1,010
Dodawanie i odejmowanie
Załóżmy że chcemy dodać lub odjąć dwie dodatnie liczby zmiennoprzecinkowe:
oraz
, przy czym
.
Mnożenie i dzielenie
Mając dane liczby zmiennoprzecinkowe
i
:
Zadania i problemy:
1. Przedstaw w naturalnym kodzie binarnym następujące liczby dziesiętne: 25, 55, 125,
625
2. Przedstaw w systemie szesnastkowym następujące liczby dziesiętne: 25, 55, 125, 625
3. Wykonaj następujące operacje logiczne na liczbach 8 bitowych: NOT 25, 55 AND 25,
34 OR 71, 187 XOR 21, 32 NAND 23, 76 NOR 136,
4. Przedstaw w systemie stałoprzecinkowym (8 bitów, po 4 na część całkowitą i
ułamkową) następujące liczby: 21/16, 18/4, 3/8, 15/2
5. Przedstaw w kodzie U2 (8bit) następujące liczby całkowite: - 100, 59, -25, -89
6. Przedstaw w kodzie U2 stałoprzecinkowym (8 bitów, po 4 bity na część ułamkową)
następujące liczby: -1/16, -10/4, 3/8, -5/2
7. Wykonaj dodawanie następujących liczb w kodzie U2: 50+60, -21+35,
8. Wykonaj odejmowanie następujących liczb w kodzie U2: 20-31, 17-8
9. Wykonaj mnożenie i dzielenie liczb binarnych za pomocą przesuwania: 17*4, 11*8,
54/2, 67/16
10. Wykonaj mnożenie następujących liczb binarnych: 7*5, 11*8
11. Wykonaj dzielenie następujących liczb binarnych: 45/9, 23/4
12. Dane są liczby w formacie zmiennoprzecinkowym pojedynczej precyzji (32bit),
przedstaw je w postaci dziesiętnej:
a. 01000010110010000000000000000000,
b. 11000011111010000000000000000000