Profesjonalne programowanie Czesc 1 Zrozumiec komputer.pdf

(480 KB) Pobierz
Profesjonalne programowanie. Część 1. Zrozumieć komputer
IDZ DO
PRZYK£ADOW Y ROZDZIA£
SPIS TREŒCI
Profesjonalne programowanie.
Czêœæ 1. Zrozumieæ komputer
KATALOG KSI¥¯EK
Autor: Randall Hyde
T³umaczenie: Tomasz ¯mijewski
ISBN: 83-7361-859-7
Tytu³ orygina³ u: Write Great Code.
Volume 1: Understanding the Machine
Format: B5, stron: 392
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
Chcesz zostaæ programist¹ doskona³ym?
Zacznij od poznania szczegó³ów dzia³ania komputera
Zapis wartoœci liczbowych oraz arytmetyka zmiennoprzecinkowa i binarna
Organizacja dostêpu do pamiêci komputera
Proces wykonywania programu oraz operacje wejœcia i wyjœcia
Kod napisany przez profesjonalnego programistê jest wydajny i efektywny.
Aby tworzyæ wydajny kod, nale¿y poznaæ architekturê komputera i sposób, w jaki
program jest wykonywany. Zrozumienie tego, w jaki sposób komputer realizuje kolejne
instrukcje programu i jak s³owa kluczowe jêzyków wysokiego poziomu s¹ przenoszone
na rozkazy procesora, jest kluczem do napisania kodu, który po skompilowaniu
da szybko i bezb³êdnie dzia³aj¹cy program.
„Profesjonalne programowanie. Czêœæ 1. Zrozumieæ komputer” to pierwszy tom serii
ksi¹¿ek przeznaczonych dla tych programistów, którzy chc¹ podnieœæ swoje
kwalifikacje. Przedstawia wewnêtrzn¹ architekturê komputera od strony, której
znajomoœæ jest niezbêdna programiœcie. Opisuje sposoby zapisu wartoœci liczbowych
i tekstów, dzia³ania na liczbach binarnych i zmiennoprzecinkowych oraz logikê Boole’a.
Czytaj¹c tê ksi¹¿kê, dowiesz siê, w jaki sposób procesor przetwarza rozkazy asemblera,
jak odbywa siê dostêp do danych zapisanych w pamiêci oraz jak przesy³ane s¹ dane
do i z urz¹dzeñ zewnêtrznych.
Zapis liczb w systemie binarnym, ósemkowym i szesnastkowym
Dzia³ania na liczbach binarnych i zmiennoprzecinkowych
Sposoby reprezentacji danych znakowych
Organizacja pamiêci i tryby adresowania
Z³o¿one typy danych
Projektowanie uk³adów cyfrowych i logika Boole’a
Architektura procesora i rozkazy asemblera
Operacje wejœcia i wyjœcia
Jeœli chcesz, aby napisane przez Ciebie oprogramowanie budzi³o podziw, koniecznie
przeczytaj tê ksi¹¿kê.
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
ONOWOŒCIACH
ZAMÓW CENNIK
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
400257506.001.png 400257506.002.png 400257506.003.png 400257506.004.png
Spis treści
Podziękowania .................................................................................. 9
Rozdział 1. Co trzeba wiedzieć o programowaniu doskonałym ............................ 11
1.1. Seria książek „Profesjonalne programowanie” .................................................... 11
1.2. O czym jest ta książka ......................................................................................... 12
1.3. Wymagania wobec Czytelnika ............................................................................ 15
1.4. Cechy kodu doskonałego ..................................................................................... 15
1.5. Wymagane środowisko ........................................................................................ 16
1.6. Dalsze informacje ................................................................................................ 17
Rozdział 2. Zapis liczb ...................................................................................... 19
2.1. Czym jest liczba? ................................................................................................. 19
2.2. Systemy liczbowe ................................................................................................ 20
2.2.1. Dziesiętny pozycyjny system liczbowy ................................................... 21
2.2.2. Podstawa .................................................................................................. 22
2.2.3. Binarny system liczbowy ......................................................................... 23
2.2.4. Szesnastkowy system liczbowy ............................................................... 24
2.2.5. Liczby ósemkowe .................................................................................... 26
2.3. Konwersja między liczbą a tekstem ..................................................................... 28
2.4. Zapis liczb całkowitych ....................................................................................... 29
2.4.1. Bity .......................................................................................................... 29
2.4.2. Łańcuchy bitowe ...................................................................................... 30
2.5. Liczby ze znakiem i bez znaku ............................................................................ 32
2.6. Pewne przydatne cechy liczb binarnych .............................................................. 34
2.7. Rozszerzenie znakiem, uzupełnienie zerami i zawężenie .................................... 35
2.8. Nasycenie ............................................................................................................ 38
2.9. Zapis dziesiętny kodowany binarnie (BCD) ........................................................ 39
2.10. Zapis stałopozycyjny ........................................................................................... 40
2.11. Skalowane formaty liczbowe ............................................................................... 43
2.12. Zapis wymierny ................................................................................................... 45
2.13. Więcej informacji ................................................................................................ 45
Rozdział 3. Arytmetyka binarna i działania na bitach ......................................... 47
3.1. Działania arytmetyczne na liczbach dwójkowych i szesnastkowych ................... 47
3.1.1. Dodawanie wartości binarnych ................................................................ 48
3.1.2. Odejmowanie liczb binarnych .................................................................. 49
3.1.3. Mnożenie wartości binarnych .................................................................. 50
3.1.4. Dzielenie wartości binarnych ................................................................... 51
3.2. Operacje logiczne na bitach ................................................................................. 52
3.3. Operacje logiczne na liczbach binarnych i ciągach bitów .................................... 54
 
4
Profesjonalne programowanie. Część 1. Zrozumieć komputer
3.4. Przydatne operacje bitowe ................................................................................... 55
3.4.1. Sprawdzanie poszczególnych bitów łańcucha za pomocą operatora AND ....55
3.4.2. Sprawdzanie, czy grupa bitów zawiera same zera ...........................................56
3.4.3. Porównywanie zestawu bitów z łańcuchem binarnym ....................................56
3.4.4. Tworzenie liczników modulo n za pomocą operacji AND ..............................57
3.5. Przesunięcia i rotacje ........................................................................................... 58
3.6. Pola bitowe i pakowanie danych .......................................................................... 61
3.7. Pakowanie i rozpakowywanie danych ................................................................. 64
3.8. Więcej informacji ................................................................................................ 68
Rozdział 4. Zapis zmiennopozycyjny .................................................................. 69
4.1. Wprowadzenie do arytmetyki zmiennopozycyjnej .............................................. 69
4.2. Formaty zmiennopozycyjne IEEE ....................................................................... 74
4.2.1. Zmiennopozycyjny format pojedynczej precyzji ..................................... 75
4.2.2. Format zmiennopozycyjny o podwójnej precyzji .................................... 77
4.2.3. Format zmiennopozycyjny zwiększonej precyzji ..................................... 77
4.3. Normalizacja i wartości nienormalizowane ......................................................... 78
4.4. Zaokrąglanie ........................................................................................................ 79
4.5. Specjalne wartości zmiennopozycyjne ................................................................ 80
4.6. Wyjątki obliczeń zmiennopozycyjnych ............................................................... 82
4.7. Działania zmiennopozycyjne ............................................................................... 82
4.7.1. Zapis liczb zmiennopozycyjnych ............................................................. 83
4.7.2. Dodawanie i odejmowanie zmiennopozycyjne ........................................ 83
4.7.3. Mnożenie i dzielenie zmiennopozycyjne ................................................. 93
4.8. Więcej informacji ................................................................................................ 99
Rozdział 5. Dane znakowe .............................................................................. 101
5.1. Dane znakowe .................................................................................................... 101
5.1.1. Zestaw znaków ASCII ........................................................................... 101
5.1.2. Zestaw znaków EBCDIC ....................................................................... 104
5.1.3. Dwubajtowe zestawy znaków ................................................................ 105
5.1.4. Zestaw znaków Unicode ........................................................................ 106
5.2. Łańcuchy znakowe ............................................................................................ 108
5.2.1. Formaty łańcuchów znakowych ............................................................. 108
5.2.2. Rodzaje łańcuchów — statyczne, pseudodynamiczne i dynamiczne ..... 112
5.2.3. Zliczanie odwołań do łańcucha .............................................................. 114
5.2.4. Łańcuchy w Delphi i Kyliksie ................................................................ 114
5.2.5. Tworzenie własnych formatów łańcuchów ............................................ 115
5.3. Zbiory znaków ................................................................................................... 115
5.3.1. Zbiory znaków w formie zbioru przynależności .................................... 115
5.3.2. Listowa reprezentacja zbiorów znaków ................................................. 117
5.4. Definiowanie własnego zestawu znaków ........................................................... 117
5.4.1. Tworzenie wydajnego zestawu znaków ................................................. 118
5.4.2. Grupowanie znaków odpowiadających cyfrom ..................................... 120
5.4.3. Grupowanie liter .................................................................................... 120
5.4.4. Porównywanie liter ................................................................................ 122
5.4.5. Inne grupowania znaków ....................................................................... 123
5.5. Dodatkowe informacje ....................................................................................... 124
Rozdział 6. Organizacja pamięci i dostęp do niej ............................................. 127
6.1. Podstawowe elementy systemu .......................................................................... 127
6.1.1. Magistrala systemowa ............................................................................ 128
6.2. Fizyczna organizacja pamięci ............................................................................ 130
6.2.1. 8-bitowe magistrale danych ................................................................... 132
6.2.2. 16-bitowe magistrale danych ................................................................. 133
6.2.3. 32-bitowe magistrale danych ................................................................. 134
Spis treści
5
6.2.4. Magistrale 64-bitowe ............................................................................. 136
6.2.5. Dostęp do pamięci w procesorach innych niż 80x86 ............................. 136
6.3. Kolejność bajtów ............................................................................................... 136
6.4. Zegar systemowy ............................................................................................... 141
6.4.1. Dostęp do pamięci a zegar systemowy ................................................... 142
6.4.2. Stany oczekiwania ................................................................................. 143
6.4.3. Pamięć podręczna .................................................................................. 145
6.5. Dostęp procesora do pamięci ............................................................................. 148
6.5.1. Bezpośredni tryb adresowania pamięci .................................................. 149
6.5.2. Tryb adresowania pośredniego ............................................................... 149
6.5.3. Tryb adresowania indeksowanego ......................................................... 150
6.5.4. Skalowane indeksowane tryby adresowania .......................................... 151
6.6. Dodatkowe informacje ....................................................................................... 151
Rozdział 7. Złożone typy danych i obiekty w pamięci ....................................... 153
7.1. Typy wskaźnikowe ............................................................................................ 153
7.1.1. Implementacja wskaźników ................................................................... 154
7.1.2. Wskaźniki i dynamiczna alokacja pamięci ............................................. 155
7.1.3. Działania na wskaźnikach — arytmetyka wskaźników .......................... 155
7.2. Tablice ............................................................................................................... 159
7.2.1. Deklaracje tablic .................................................................................... 160
7.2.2. Reprezentacja tablic w pamięci .............................................................. 162
7.2.3. Dostęp do elementów tablicy ................................................................. 163
7.2.4. Tablice wielowymiarowe ....................................................................... 164
7.3. Rekordy (struktury) ........................................................................................... 170
7.3.1. Rekordy w Pascalu i Delphi ................................................................... 170
7.3.2. Rekordy w C i C++ ................................................................................ 171
7.3.3. Rekordy w HLA ..................................................................................... 171
7.3.4. Zapis rekordów w pamięci ..................................................................... 171
7.4. Unie ................................................................................................................... 174
7.4.1. Unie w C i C++ ...................................................................................... 174
7.4.2. Unie w Pascalu, Delphi i Kyliksie ......................................................... 174
7.4.3. Unie w asemblerze HLA ........................................................................ 175
7.4.4. Unie w pamięci ...................................................................................... 176
7.4.5. Inne zastosowania unii ........................................................................... 176
7.5. Dodatkowe informacje ....................................................................................... 177
Rozdział 8. Logika boolowska i projektowanie cyfrowe .................................... 179
8.1. Algebra Boole’a ................................................................................................. 179
8.1.1. Operatory boolowskie ............................................................................ 179
8.1.2. Prawa algebry boolowskiej .................................................................... 180
8.1.3. Priorytety operatorów boolowskich ....................................................... 181
8.2. Funkcje logiczne i tabele prawdy ...................................................................... 182
8.3. Numery funkcji .................................................................................................. 183
8.4. Algebraiczne przekształcanie wyrażeń logicznych ............................................ 185
8.5. Formy kanoniczne ............................................................................................. 186
8.5.1. Forma kanoniczna sumy termów minimalnych a tabele prawdy ............ 187
8.5.2. Algebraiczne wyprowadzanie formy kanonicznej
sumy termów minimalnych .................................................................... 189
8.5.3. Forma kanoniczna jako iloczyn termów maksymalnych ........................ 189
8.6. Upraszczanie funkcji logicznych ....................................................................... 190
8.7. Ale co to wszystko ma wspólnego z komputerami? .......................................... 197
8.7.1. Równoważność układów elektronicznych i funkcji logicznych ............. 198
8.7.2. Obwody złożone .................................................................................... 199
8.7.3. Sterowanie sekwencyjne i zegarowe ...................................................... 204
8.8. Dodatkowe informacje ....................................................................................... 208
6
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Rozdział 9. Architektura procesora ................................................................. 209
9.1. Podstawy budowy procesora ............................................................................. 209
9.2. Dekodowanie i wykonywanie instrukcji — logika przypadku a mikrokod ....... 211
9.3. Wykonywanie instrukcji krok po kroku ............................................................. 213
9.3.1. Instrukcja mov ....................................................................................... 213
9.3.2. Instrukcja add ......................................................................................... 215
9.3.3. Instrukcja jnz .......................................................................................... 217
9.3.4. Instrukcja loop ....................................................................................... 218
9.4. Równoległość — klucz do przyspieszenia ......................................................... 218
9.4.1. Kolejka wstępnego pobrania .................................................................. 222
9.4.2. Okoliczności ograniczające wydajność kolejki wstępnego pobrania ..... 225
9.4.3. Potoki — jednoczesne wykonywanie wielu instrukcji ........................... 226
9.4.4. Bufory instrukcji — wiele dróg do pamięci ........................................... 230
9.4.5. Zagrożenia związane z potokami ........................................................... 231
9.4.6. Działanie superskalarne — równoległe wykonywanie instrukcji ........... 233
9.4.7. Wykonywanie kodu bez zachowania kolejności .................................... 235
9.4.8. Zmiana nazw rejestrów .......................................................................... 235
9.4.9. Architektura z bardzo długim słowem instrukcji (VLIW) ...................... 236
9.4.10. Przetwarzanie równoległe ...................................................................... 237
9.4.11. Wieloprocesorowość .............................................................................. 238
9.5. Dodatkowe informacje ....................................................................................... 239
Rozdział 10. Konstrukcja zbioru instrukcji ......................................................... 241
10.1. Dlaczego projekt zbioru instrukcji jest ważny ................................................... 241
10.2. Podstawowe cele projektowe zestawu instrukcji ............................................... 243
10.2.1. Dobór długości kodu instrukcji .............................................................. 245
10.2.2. Plany na przyszłość ................................................................................ 247
10.2.3. Dobór instrukcji ..................................................................................... 247
10.2.4. Przypisywanie instrukcjom kodów ........................................................ 248
10.3. Hipotetyczny procesor Y86 ............................................................................... 248
10.3.1. Ograniczenia Y86 .................................................................................. 249
10.3.2. Instrukcje Y86 ........................................................................................ 249
10.3.3. Tryby adresowania Y86 ......................................................................... 251
10.3.4. Kodowanie instrukcji Y86 ..................................................................... 252
10.3.5. Przykłady kodowania instrukcji Y86 ..................................................... 254
10.3.6. Rozszerzanie zbioru instrukcji Y86 ....................................................... 257
10.4. Kodowanie instrukcji 80x86 .............................................................................. 259
10.4.1. Kodowanie operandów instrukcji .......................................................... 260
10.4.2. Kodowanie instrukcji add — kilka przykładów ..................................... 266
10.4.3. Stałe jako operandy ................................................................................ 268
10.4.4. Kodowanie operandów 8-, 16- i 32-bitowych ........................................ 269
10.4.5. Alternatywne kodowanie instrukcji ....................................................... 270
10.5. Znaczenie projektu zbioru instrukcji dla programisty ........................................ 270
10.6. Więcej informacji .............................................................................................. 271
Rozdział 11. Architektura pamięci i jej organizacja ............................................ 273
11.1. Hierarchia pamięci .................................................................................................... 273
11.2. Jak działa hierarchia pamięci .................................................................................... 276
11.3. Względna wydajność podsystemów pamięci .......................................................... 277
11.4. Budowa pamięci podręcznej .................................................................................... 279
11.4.1. Pamięć odwzorowywana bezpośrednio ..........................................................280
11.4.2. Pamięć w pełni powiązana ..............................................................................281
11.4.3. Pamięć powiązana n-krotnie ...........................................................................281
11.4.4. Dobieranie schematu pamięci podręcznej do rodzaju dostępu do danych ....282
Zgłoś jeśli naruszono regulamin