Programowanie Niskopoziomowe Wykład 2: Reprezentacja danych Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie
Plan Kilka ciekawostek Zapisy binarny, oktalny, decymalny i heksadecymalny Algebra Boole a
Pierwsze komputery
Pierwsze narzędzia programistyczne
Pierwsze komputery osobiste
Pierwszy komputer klasy PC IBM PC XT Procesor Intel 8086 786 kb RAM 20 MB HDD Drukarka 9-igłowa
Interfejs użytkownika w latach 1990-tych
Współczesne GUI
To też są komputery
Maszyna wirtualna High-Level Language Assembly Language Operating System Instruction Set Architecture Microarchitecture Digital Logic Level 5 Level 4 Level 3 Level 2 Level 1 Level 0 Poziom 5 języki zorientowane aplikacyjnie, programy kompilowane do postaci asemblerowej Poziom 4 Instrukcje odpowiadają jednoznacznie (1 do 1) instrukcjom języka maszynowego, wywoływane funkcje na poziomie systemu operacyjnego (poziom 3), programy translowane do języka maszynowego Poziom 3 udostępnia usługi, program translowany na poziomie ISA (poziom 2) Poziom 2 poziom języka maszynowego, wykonywany przez program z poziomu 1 Poziom 1 poziom mikroarchitektury, interpretuje instrukcje języka maszynowego (poziom 2) na poziomie logiki sprzętowej (poziom 0) Poziom 0 poziom elektronicznych układów cyfrowych (CPU, PAO, szyna)
Reprezentacja danych Dwa stany fizyczne: niskiego i wyższego napięcia 3.3V 0 1 0 2.8V 0.5V 0.0V Logiczna interpretacja: 0 i 1 Systemy: binarny, oktalny, decymalny i heksadecymalny
Liczby binarne Alfabet dwuznakowy: 0 i 1 Każda liczba binarna składa się z jednej lub więcej cyfr tzw. bitów Bity numerowane są po kolei od 0 począwszy od prawej strony (najmniej znaczący bit) do lewej (najbardziej znaczący bit). Przykład liczby 16 bitowej: MSB LSB 1 0 1 1 0 0 1 0 1 0 0 1 1 1 0 0 15 0
Liczby binarne, oktalne, decymalne i heksadecymalne System Podstawa Alfabet Binarny 2 0 1 Oktalny 8 0 1 2 3 4 5 6 7 Decymalny 10 0 1 2 3 4 5 6 7 8 9 Heksadecymalny 16 0 1 2 3 4 5 6 7 8 9 A B C D E F
Liczby binarne ze znakiem i bez Liczby binarne mogą reprezentować liczby całkowite: bez znaku lub ze znakiem Liczby bez znaku są z definicji dodatnie Liczby ze znakiem mogą być dodatnie lub ujemne Zero uznawane jest za liczbę dodatnią
Liczby binarne bez znaku 1 1 1 1 1 1 1 1 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 Wartości dziesiętne poszczególnych bitów 0 1 2 3 4 5 6 7 8 9 1 2 4 8 16 32 64 128 256 512 10 11 12 13 14 15 1024 2048 4096 8192 16384 32768
Translacje między systemem binarnym a systemem dziesiętnym Liczba_dziesiętna = =(B n-1 2 n-1 )+(B n-2 2 n-2 )+ +(B 1 2 1 )+(B 0 2 0 ) Translacja liczby dziesiętnej do liczby binarnej polega na dzieleniu tej liczby przez 2 i zapisywaniu reszty z tego dzielenia jako kolejnych bitów liczby binarnej począwszy od bitu najmniej znaczącego.
Przykłady binarne 00001001 = decymalna 9: (1 2 3 ) + (1 2 0 ) = 9 decymalne 37 to 100101 binarnie
Dodawanie liczb binarnych Dodawanie poszczególnych cyfr: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 Przykład dodawania liczb ośmiobitowych Przeniesienie: 1 0 0 0 0 0 1 0 0 (4) + 0 0 0 0 0 1 1 0 (6) 0 0 0 0 1 0 1 0 (10) Dodawanie liczby 1111.1111 oraz 0000.0001 daje w wyniku 1.0000.0000 lecz jeśli mamy do dyspozycji tylko 8 bitów to wynik będzie 0000.0000
Rozmiary przechowywanych danych bajt 8 słowo 16 podwójne słowo 32 poczwórne słowo 64
Liczby heksadecymalne Stosowane ze względu na nieporęczność zapisu binarnego
Translacja binarna-heksadecymalna Każda cyfra heksadecymalna to 4 cyfry binarne Przykład: translacja liczby binarnej 0001.0110.1010.0111.1001.0100 na liczbę heksadecymalną: 1 6 A 7 9 4 0001 0110 1010 0111 1001 0100
Konwersja z heksadecymalnej na dziesiętną Mnożenie każdej cyfry przez odpowiadającą jej potęgę 16: dec = (H 3 16 3 ) + (H 2 16 2 ) + (H 1 16 1 ) + (H 0 16 0 ) 1234 h (1 16 3 ) + (2 16 2 ) + (3 16 1 ) + (4 16 0 ), or decymalnie 4.660 3BA4 h (3 16 3 ) + (11 * 16 2 ) + (10 16 1 ) + (4 16 0 ), or decymalnie 15.268.
Potęgi 16
Konwersja decymalnej na heksadecymalną decymalnie 422 = 1A6 heksadecymalnie
Dodawanie heksadecymalne Bardzo przydatna umiejętność 1 1 36 28 28 6A 42 45 58 4B 78 6D 80 B5
Odejmowanie heksadecymalne -1 C6 75 A2 47 24 2E
Liczby ze znakiem Na ujemną liczbę wskazuje najstarszy bit ustawiony na 1 sign bit 1 1 1 1 0 1 1 0 Negative 0 0 0 0 1 0 1 0 Positive
Uzupełnienie do 2 (U2) Kroki: Uzupełnij (odwróć) każdy bit Dodaj 1 Uwaga!: 00000001 + 11111111 = 00000000
Odejmowanie binarne Przy odejmowaniu A B, zamień liczbę B na kod U2 Dodaj A do ( B) 0 1 1 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 0 1 0 1 0 0 1 Zalety kodu U2: Tylko 1 zero Bit znaku Wyeliminowano potrzebę osobnych układów dla dodawania i odejmowania
Zakresy liczb całkowitych ze znakiem
Znaki alfanumeryczne Zbiór znaków Standardowe ASCII (0 127) Extended ASCII (0 255) ANSI (0 255) Unicode (0 65.535) Null-terminated String Tablica znaków zakończona znakiem null byte Korzystanie z kodów ASCII
Algebra Boole a Wyrażenia Bool e tylko dla 3 operacji logicznych NOT, AND i OR
NOT Negacja bitowa Tabela stanów Bramka NOT
AND Tabela stanów: AND
OR Tabela stanów: OR
Priorytety operacji NOT > AND > OR Przykłady pokazujące porządek operacji: Stosuj nawiasy by uniknąć nieporozumień
DZIĘKUJĘ ZA UWAGĘ