1. Powtórka z budowy komputera
1.1. Trochę matematyki
Komputery pracują na liczbach w systemie dwójkowym. Co potrafi zrozumieć maszyna to tylko: "jest prąd" lub "nie ma prądu". Te dwa stany oznaczone są jako logiczne 1 - jest napięcie (około pięciu wolt) oraz 0 - nie ma napięcia (0 wolt). Taką porcję informacji nazywamy bitem. Nas interesuje możliwość przedstawienia więcej niż dwóch stanów, używamy kombinacji zer i jedynek. Będzie się stosować kombinację jedynie ośmiu bitów. Taka porcja informacji to jeden bajt. Gdy możliwości komputera były coraz większe, wymyślono słowo - szesnaście bitów. Składa się ono z dwóch bajtów. Żeby je łatwo było rozpoznać to pierwsze osiem bitów (bajt) nazwano mniej znaczącym bajtem (LSB) lub też bajtem niższym lub młodszym. Następne osiem bitów nazwano bardziej znaczącym bajtem (MSB) lub prościej wyższym lub starszym.
MSB LSB
10110011 10010101 - słowo - szesnaście bitów
Później wymyślono podwójne słowo (32 bity).
1.1.1. System dziesiętny
Liczba zapisana w systemie dziesiętnym jest sumą kolejnych potęg liczby dziesięć, Na przykład:
1*10^2 + 3*10^1 + 5*10^0
Współczynniki stojące przed potęgami (1,3,5) są cyframi z zakresu (0..9), czyli tymi, które są używane w systemie dziesiętnym. Jednocześnie zauważ, że są to cyfry tworzące liczbę 135.
1.1.2. System dwójkowy
Liczbę w systemie dwójkowym (binarnym) możemy rozpisać jako sumę kolejnych potęg liczby 2, na przykład:
10010110 = 1*2^7 + 0*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 0*2^0
Współczynniki stojące znów przed potęgami są liczbami używanymi przez system dwójkowy i tworzą liczbę
10010110
1.1.2.1. Przeliczanie z systemu dwójkowego na dziesiętny
1. Zapisujemy liczbę binarną (dwójkową), na przykład:
1010110
2. Dokładnie pod kolejnymi cyframi zaczynając od końca (ważne!) piszemy potęgi liczby 2, czyli: 1,2,4,8,16,32,64,128.
3. Sumujemy te potęgi liczby dwa, nad którymi mamy liczbę jeden.
Liczba 1010110 w systemie dziesiętnym jest równa 86. Skrótem zapisujemy liczbę binarną z małą literką b (1010110b), a przy liczbie dziesiętnej nie piszemi nic lub piszemy małe d.
1010110b = 86
Inny sposób przeliczania liczb binarnych na dziesiętne nazywamy sposobem Hornera. Jego algorytm przedstawia się następująco:
1. Wejź pierwszą liczbę cyfry dwójkowej.
1
2. Podwój ją.
1*2 = 2 2 + 0 = 0 / 0
3. Dodaj do niej kolejną cyfrę liczby dwójkowej, otrzymasz sumę.
2*2 = 4 4 + 1 = 5 / 1
4. Powróć do punktu 2.
5*2 = 10 10 + 0 = 10 / 0
10*2 = 20 20 + 1 = 21 / 1
21*2 = 42 42 + 1 = 43 / 1
43*2 = 86 86 + 0 = 86 / 0
5. Gdy dodaż jużwszystkie cyfry, odtrzymana liczba będzie wartością przeliczanej liczby binarnej.
1.1.2.2. Przeliczanie z systemu dziesiętnego nadwójkowy
Jest bardziej skomplikowane i wygląda następująco:
1. Liczbę dziesiętną dzieli się przez dwa.
2. Jeżeli wynik jest całkowity to zapisuje się zero, jeżeli zostaje reszta to zapisuje się jeden.
3. Zapisuje się tylko liczbę całkowitą.
4. Powraca się do punktu 1.
Przykład
86/2 = 43 - zapisujemy 0
43/2 = 21,5 - zapisujemy 1
21/2 = 10,5 - zapisujemy 1
10/2 = 5 - zapisujemy 0
5/2 = 2,5 - zapisujemy 1
2/2 = 1 - zapisujemy 0
1/2 = 0,5 - zapisujemy 1
0/2 = 0 - jemy możemy zapisać 0 (nie musimy)
To co zapisaliśmy na boku, stworzy nam liczbę binarną, lecz uwaga: zapisaną od końca. Aby wszystko było jak należy, trzeba czytać od końca: 86 = (0)1010110b.
Zastanówmy się jakie największe lub najmniejsze liczby możemy zapisać za pomocą bajtu (osiem bitów).
00000000b = 0d
11111111b = 1*128 + 1*64 + 1*32 + 1*16 + 1*8 + 1*4 + 1*2 + 1*1 = 255
A więc za pomocą bajtu można zapisać liczby z zakresu: od 0 do 255. A co można przedstawić za pomocą słowa (szestaście bitów)?
1111111111111111b = 65536
Łatwo policzyć, co można przedstawić za pomocą 32 bitów.
Co zrobić, gdy chcemy zapisać liczbę ujemną? Przed liczbą binarną nie stawia się znaku + czy -. KOmputer nie rozróżnia liczb ujemnych od dodatnich. Umożliwia to dopiero jego oprogramowanie i intencje programisty. Jeżeli operujemy na ośmiu bitach, mamy do wyboru: albo liczby od 0 do 255, albo od -127 do +128. Jak to zapisać.
Za pomocą siedmiu bitów można zapisać:
1111111 = 127
Pozostały, ósmy bit, wykorzystujemy jako bit znaku. Gdy jest równy 0, liczbę uznajemy za dodatnią. Gdy równy 1, za ujemną. Zapis nie jest taki prosty.
Przykład
Zadanie
Zapisać w systemie binarnym liczbę -60.
1. Liczbę 60 zamieniamy na liczbę w kodzie dwójkowym.
60/2 = 30 - zapisujemy 0
30/2 = 15 - zapisujemy 0
15/2 = 7 - z resztą - 1
7/2 = 3 - z resztą - 1
3/2 = 1 - z resztą - 1
1/2 = 0 - z resztą - 1
60d = 00111100b (dwa zera na początku - uzupełnienie do ośmiu bitów jewst potrzebne).
2. Negujemy otrzymaną liczbę, to znaczy cyfry w jej zapisie zmieniamy na przeciwne, to jest: 0 na 1 i 1 na 0. Jest to tak zwane uzupełnienie do jeden.
00111100 po negacji - 11000011
3. Do otrzymanej liczby dodajemy 1. Jest to tak zwane uzupełnienie do dwóch.
11000011
+ 1
--------
11000100
4. Otrzymana liczba jest liczbą - 60 w zapisie binarnym, w tak zwanym kodzie uzupełnień do dwóch.
Zamiana liczby binarnej w kodzie uzupełnień do dwóch na postać dziesiętną zachodzi następująco:
1. Od liczby binarnej odejmujemy 1.
2. Negujemy otrzymaną liczbę.
3. Otrzymaną liczbę zamieniamy na liczbę dziesiętną, według podanych sposobów.
Rozróżnienie teraz czy chodzi o liczbę - 60, czy o liczbę 196 (przelicz 11000100) zależy jedynie od użytych orzkazów i od naszej interpretacji. Dla odróżnienia tych interpretacji często będziemy mówili o dodawaniu lub odejmowaniu (w domyśle: bez znaku, to jest na liczbach z zakresu: od 0 do 255, lub odejmowaniu ze znakiem, to jest z zakresu: od -127 do 127). Ponieważ operowanie na liczbach może być nieco skomplikowane, pomocne będą ci tak zwane znaczniki szczegółowo omówione w dalszej części rozdziału.
Warto jeszcze wiedzieć jakie są jednostki, w których podaje się rozmiary zajmowanych pamięci, miejsca na dysku itp. W systemie dziesiętnym przedrostek kilo oznaczał 10 (do potęgi 10) i wynosił 1000. w systemie wybrano liczbę najbardziej zbliżoną i jest to 2 (do potęgi 10) i wynosi 1024.
Przykłady
1024 = 1 kilobajt (kB)
1024 kB = 1 megabajt (mB) = 1048576 bajtów
1024 mB = 1 gigabajt (GB) = 1048576 kB = 1073741824 bajty
1.1.3. Działania arytmetyczne na liczbach dwójkowych
1.1.3.1. DOdawanie
Spróbujmy dodać do siebie dwie liczby binarne. Przedtem powinieneś wiedzieć, że:
0+0 = 0
1+0 = 1
0+1 = 1
1+1 = 10
I to cała filozofia. Jedyny problem z tym 10, ale to nic prostrzego. Po prostu zapisujesz 0, a jedynkę przenosisz w jak normalnym dodawaniu.
Liczba pierwsza: 00101100
Liczba druga: 10110001
1+0 = 1 / 1 / 0
0+0 = 0 / 0 / 0
1+0 = 1 / 0 / 1
1+0 = 1 / 0 / 1
0+1 = 1 / 1 / 0
1+1 = 10, zapisujemy 0, przenosimy 1 / 1 / 1
0+0 = 0, ale z przeniesienia 1, więc
0+1 = 1 -/0 / 0
0+1 = 1 / 1 / 0
Spróbuj przeanalizować poniższe przykłady:
10101110
+ 01110100
--------
100100010
10100111
+ 11000011
--------
101101010
1.1.3.2. Odejmowanie
Jest ono analogiczne do dodawania dziesiętnego. Podstawowe działania to:
1-0 = 0
10-1 = 1
0-0 = 0
Przykład
1010 1 - 101 = 101
0-1 - nastąpiła pożyczka z następnego bitu, stąd
10-1 =1
Po pożyczce zostało nam 0. Zamiast
1-0
będzie
0-0 = 0
0-1 - nastąpiła kolejna pożyczka, stąd
10-1 = 1
Spróbujmy teraz czegoś trudniejszego.
0000 0001 (1) - 0000 0011 (3) = 1111 1110
Jak widać nastąpiła pożyczka z nieistniejącego dziewiątego bitu. Otrzymany wynik, jako liczba binarna bez znaku, jest bez sensu. Otrzymaliśmy bowie 254. Lecz potraktujemy podany wynik jako liczbę ze znakiem.
1111 1110 - 1 = 1111 1101 - Odjęliśmy jeden
Teraz negujemy i otrzymujemy
0000 0010
00000010 = 2
A więc wynik ma sens i wynosi -2. Pamiętać należy, że wszystkie działania na odejmowanie można sprowadzić do dodawania. A więc 65 - 109, można zapisać jako (-109 + 65). Czasami daje to duże efekty.
1.1.3.3. Mnożenie
Robimy to tak samo, jak w przypadku liczb dziesiętnych.
Przykład
1010 * 1011 = 1101110
1.1.3.4. Działania logiczne na liczbach dwójkowych
Jedno działanie już poznałeś - negację. Tutaj pokażemy i opiszemy ci wszystkie. Z technicznego punktu widzenia, za podstawowe operacje logiczne odpowiadają tak zwane bramki logiczne, Zazwyczaj o dwóch lub trzech wejściach i jednym wyjściu. Oto przegląd bramek:
1. AND
Posiada dwa wejścia i jedno wyjście. Na wyjściu tej bramki uzyskujemy sygnał o wartości logicznej jedynki, w tedy i tylko w tedy, gdy na wejściu wszystkie sygnały będą jedynkami. W przeciwnym wypadku na wyjściu uzyskujemy sygnał zero.
1010 0111 AND 1100 0011 = 1000 0011
Inaczej mówiąc uzyskujemy prawdę w tedy i tylko w tedy, gdy wszystkie warunki będą prawdziwe.
2. OR
Na wyjściu uzyskujemy sygnał logiczny jedynki, w tedy i tylko w tedy, gdy choć na jednym wejściu będzie sygnał jedynki. Inaczej mówiąc uzyskujemy prawdę w tedy i tylko w tedy, gdy choć jeden warunek będzie prawdziwy. Posiada dwa wejścia i jedno wyjście.
1010 0111 OR 1100 0011 = 1110 0111
3. NOT
To jest właśnie wspomniana bramka negacji. Posiada jedno wejście i jedno wyjście. Stany wejściai wyjścia są zawsze różne, gdy na wejściu jeden, to na wyjściu zero i odwrotnie.
Not 1010 0111 = 0101 1000
4. NAND - (NOT AND)
Posiada dwa wejścia. Na wyjściu uzyskujemy logiczne zero w tedy i tylko w tedy, gdy wszystkie sygnał wejściowe będą miały wartość logiczną jedynki. W przeciwnym razie uzyskamy sygnał o wartości jeden.
1010 0111 NAND 1100 0011 = 0111 1100
5. NOR - (NOT OR)
Posiada dwa wejścia. Na wyjściu uzyskujemy sygnał logiczny jedynki w tedy i tylko w tedy, gdy na żadnym z wejść nie będzie sygnałyu jeden.
1011 0111 NOR 1100 0011 = 001 1000
6. XOR - (eXclusive OR)
Posiada dwa wejścia. Na wyjściu otrzymamy jedynkę w tedy i tylko w tedy, gdy na wejściu będzie choć jeden sygnał o wartości logicznej jeden.
1010 0111 XOR 1100 0011 = 1110 0111
1.1.5. System szesnastkowy (heksadecymalny)
Na pewno spotkałeś się z zapisem liczby jako: np. 3Fh lub 0Ah. Otuż są to liczby zapisane w systemie szesnastkowym, zwanym też systemem heksadecymalnym, w skrócie hex. Zaletą jego jest proste przeliczanie z i na system binarny, a także zapis takiej liczby zajmuje mniej miejsca. Cyfry w tym systemie to:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
gdzie A - odpowiednik dziesiętnego 10, B - 11, itd. Literka h na końcu oznacza, żeliczba jest zapisana w systemie szesnastkowym. Natomiast, gdy liczba zatrzyna się od litery, piszemy liczbę 0.
Przeliczanie:
1. Dzielimy liczbę binarną na grupy cztero-cyfrowe zaczynając od prawej strony.
2. Zamieniamy te grupy według poniższej tabeli.
3. Otrzymana liczba to liczba szesnastkowa.
Wartość binarna | Wartość hex
0000 | 0
0001 | 1
0010 | 2
0011 | 3
0100 | 4
0101 | 5
0110 | 6
0111 | 7
1000 | 8
1001 | 9
1010 | A
1011 | B
1100 | C
1101 | D
1110 | E
1111 | F
Przykład
Mamy liczbę 10101000 zamienić na szesnastkową.
1010 1000
A 8
1010 1000b = 0A8h
Przeliczanie w drógą stronę jest równie łatwe:
0C5; C = 1100; 5 = 0101
więc
0C5h = 11000101b
A teraz przeliczanie z systemu dziesiętnego na szesnastkowy:
1. Liczbę całkowitą dzielimy na szesnaście.
2. Otrzymaną resztę zapisujemy na boku (ewentualnie zmieniając np. 11 na B).
3. Zapisujemy jedynie liczbę całkowitą.
4. POwracamy do punktu 1.
Przykład
Mamy liczbę 493.
493 / 16 = 30, reszty 13 - zapisujemy D
30 / 16 = 1, reszty 14 - zapisujemy E
1 / 16 = 0, reszty 1 - zapisujemy 1
Otrzymana liczba hex: 1ED
493 = 1EDh
Zostało przeliczenie z systemu szesnastkowego na dziesiętny. Jest to podobne do przeliczenia z binarnego na dziesiętny. Liczbę szesnastkową możemy przedstawić jako iloczyn kolejnych potęg liczby 16:
3B8D2 = 3*16^4 + 11*16^3 + 8*16^2 + 13*16^1 + 2*16^0
1. Mając liczbę szesnastkową, zapisujemy dokładnie pod kolejnymi cyframi kolejne potęgi liczby, szesnaście zaczynając od prawej strony.
2. Mnożymy kolejne cyfry przez potęgi liczby szesnaście stojące pod nimi (pamiętając o zamianie np. B na 12).
3. DOdajemy iloczyny:
2 | 7 | C
256 | 16 | 1
2*256 + 7*16 + 12 + 1 = 636
27Ch = 636d
1.1.6 Kod BCD
Na koniec omówimy kod dwójkowo-dziesiętny, tak zwany BCD. Jest on często stosowany do zapisu daty i czasu zegara systemowego. Istota tego godu polega na zapisie jednej cyfry w czterech bitach. Oto sposób postępowania:
1. Liczbę dziesiętną podziel na osobne cyfry, na przykład: 94 - 9 4.
2. Każdą cyfrę zamień na cztero-bitową liczbę binarną (9 - 1001, 4 - 0100).
3. Otrzymany bajt (1001 0100) jest liczbą 94 zapisaną w kodzie BCD.
Kod ten jest bardzo przydatny, gdzy chcemy np. zapisać liczbę większą od 255. Jest też bardzo łatwy do przeliczenia z dziesiętnego na BCD i odwrotnie.
1.2. Omówienie budowy komputera
Schemat budowy:
1. Szyna sterująca
2. Szyna danych
3. Szyna adresowa
Sercem komputera jest procesor. Ze światem zewnętrznym komunikuje się za pomocą trzech wiązek, przewodów zwanych szynami lub magistralami. W zależności od typu procesora liczba tych przewodów jest większa lub mniejsza, z tąd mowa o szerszej lub węższej szynie (magistrali). W komputerach XT szyna adresowa jest równocześnie szyną danych (sterowana na przemiennie) i ma szerokość szesnastu bitów (szesnaście przewodów). Tak jest w wypadku procesora 8086. W tańszym jego odpowiedniku sprawa się nieco komplikuje. Wewnętrznie procesor komunikuje się ze swoimi częściami składowymi za pomocą szyny szesnasto-bitowej. Natomiast na zewnątrz szyna ma jedynie szerokość ośmiu bitów. A więc aby procesor wykonał rozkaz musi czekać, aż cała porcja informacji zostanie mu dostarczona. Podomnie ma się rzecz w przypadku procesora 80386 SX. Wewnątrz pracuje on na danych o wielkości 32 bitów (podwujnego słowa). Natomiast ze światem zewnętrznym komunikuje się za pomocą szyny szesnasto-bitowej. Takie procesory noszą nazwę hybrydowych. Szyny możemy również podzielić na systemowe (te obsługujące karty rozszerzeń) i lokalne (służące na przykład w połączeniach procesora z pamięcią). Procesor, układy pamięci, podstawowe układy wejścia/wyjścia są zamontowane na jednej płydce drukowanej, tak zwanej płycie głównej.
1.2.1. Procesor
W każdym procesorze możemy wyróżnić następujące bloki funkcjonalne:
- jednostkę arytmetyczno-logiczną (ALU) wraz z rejestrami wewnętrznymi odpowiada za bezpośrednie manipulowanie danymi (dodawanie, odejmowanie itp.),
- jednostkę rozkazową (IU). Odpowiada za dekodowanie instrukcji pobranych z pamięci za pośrednictwem BIU. Zawiera trzy-elementową kolejkę instrukcji, która jest uzupełniana bez użycia oprogramowania,
- jednostkę wykonawczą (EU) - odpowiada za interpretację rozkazów odnoszących się do rejestrów jak i komórek pamięci. Ztąd połączenie z jednostką arytmetyczno-logiczną i ze sterownikami magistral,
- układ adresujący (AU) - odpowiada za wytworzenie na szynie adresowej adresu, pod który zostaną przesłane dane,
- układ sterownika szynami (magistralami) (BIU) - odpowiada za przesyłanie danych magistralą danych oraz wysterowanie magistrali sterującej,
- blok rejestrów,
- w nowszych procesorach występuje tak zwana pamięć podręczna (CACHE).
Procesory mogą pracować w kilku (maksymalnie trzech) trybach. Podstawowym jest tryb Real, oznaczający pracę procesora 8086 (8088); w trybie tym procesory nowszej generacji (286, 386, 486) są w pełni kompatybilne z procesorem 8086. Poprostu udają bardzo szybkie komputery XT.
Tryb Protected (chroniony) pozwala procesorom (od 286 wzwyrz) używać rozszerzonej pamięci. Tryb Enhnced (rozszerzony) umożliwia pracę jakby na kilku procesorach 8086. Jednocześnie jest to symulacja wielozadaniowości (procesory nie są realizowane jednocześnie, lecz bardzo szybko przełączane między sobą).
1.2.2. Rejestry
Procesor, a ściślej ALU, pracuje jedynie na danych zgromadzonych w rejestrach, więc żeby procesor wykonał jakieś zadanie, trzeba najpierw załadować rejestry, później odczytać znajdujący się w nich wynik. W praktyce jest to szereg komórek pamięci, które znajdują się w obudowie procesora, a nie na zewnątrz w osobnych układzie scalonym. Wszystkie mają rozmiar szesnastu bitów. Oto ich schematyczna postać:
AH (15 do 7) - AL (7 do 0) - akumulator AX
BH - BL - rejestr bazowy BX
CH - CL - rejestr zliczający CX
DH - DL - Rejestr danych DX
sp (od 15 do 0) - wskaźnik stosu
BP - wskaźnik bazy
SI - rejestr indeksowy źródła
DI - rejestr indeksowy przeznaczenia
CS (od 15 do 0) - rejestr segmentowy programu
DS - rejestr segmentowy danych
SS - rejestr segmentowy stosu
ES - rejestr segmentowy dodatkowy
IP - wskaźnik programu
FLAGS - rejestr znaczników (flag)
W komputerach 32-bitowych sprawy się nie co komplikują. Oto obraz rejestrów procesorów typu 80386, I486 oraz Pentium:
miejsce puste (31 do 15) - AH (15 do 7) - AL (7 do 0) - akumulator EAX (AH i AL dają AX)
miejsce puste - BH - BL - rejestr bazowy EBX (BH i BL dają BX)
miejsce puste - CH - CL - rejestr zliczający ECX (CH i CL dają CX)
miejsce puste - DH - DL - rejestr danych (DH i DL dają DX)
miejsce puste (31 do 15) - SP (15 do 0) - wskaźnik stosu ESP
miejsce puste - BP - wskaźnik bazy EBP
miejsce puste - SI - rejestr indeksowy źródła ESI
miejsce puste - DI - rejestr indeksowy przeznaczenia EDI
CS (15 do 0)- rejestr segmentowy programu
SS - rejestr segmentowy stosu
ES - rejestr segmentowy dodatkowy
FS
GS (15 do 0)
miejsce puste (31 do 15) - IP (15 do 0) - wskaźnik programu EIP
miejsce puste (od 31 do 15) - FLAGS (od 15 do 0) - rejestr znaczników (flag) EFLAGS
miejsce puste (31 do 15) - MSW (15 do 7) - CR0
CR2, CR3 (od 31 do 0) - blok rejestrów sterujących pracą procesora
DR0, DR1, DR2, DR3, DR4, DR5, DR6, DR7 (od 31 do 0) - zbiór rejestrów uruchomieniowych słóżących sterowaniu pułapkami sprzętowymi
TR6, TR7 (od 31 do 0) - rejestry testujące pamięć asocjacyjną
GDTR (od 47 do 0) - rejestr systemowy
IDTR (od 47 do 0) - rejestr systemowy
LDTR (15 do 0) - rejestr systemowy
TR (15 do 0) - rejestr systemowy
A oto ich przeznaczenie:
- rejestry: AX,BX, CX, DX są rejestrami ogólnego przeznaczenia. Są wykorzystywane do przechowywania danych, wykonywania operacji logicznych arytmetycznych itp. Każdy z nich można traktować jako parę rejestrów ośmio-bitowych np. AL i AH.
Przykład
Rejestr AL zawiera 10h, rejestr AH zawiera wartość 2Bh, natomiast rejestr AX, jako para ośmiobitowych AL i AH zawiera wartość 2B10h.
Do każdego z tych ośmio-bitowych rejestrów istnieje niezależny dostęp.
- W komputerach 32-bitowych rejestry: EAX, EBX, ECX, EDX pełnią rolę rejestrów ogólnego przeznaczenia. Podobnie jak powyżej istnieje dostęp do bajtu (AH lub AL), słowa (AX) lub podwójnego słowa (EAX).
- Rejestry SP i BP (ESP i EBP) są rejestrami wskaźnikowymi. Są używane do adresowania pamięci.
- Rejestry: SI, DI (ESI, EDI) służą do adresowania danych w zasięgu segmentu.
- Rejestr CS wskazuje segment programu, z którego pobierane są rozkazy do wykonania.
- Rejestr DS wskazuje segment, w którym znajdują się dane zadeklarowane w programie.
- Rejestr ES wskazuje dodatkowy segment danych.
- Rejestr SS wskazuje segment, w którym jest zdefiniowany stos.
- Rejestr IP (EIP) wskazuje aktualnie wykonywaną instrukcję programu.
- Rejestr FLAGS jest słowem, którego kolejne bity ustawiane są w zależności od zaistnienia jakiegoś zjawiska.
Oto bajt znaczników:
x x x x OF DF IF TF SF ZF x AF x PF x CF
x - nie używane
CF - nastąpiło przeniesienie
PF - parzystość
AF - przeniesienie pomocnicze
ZF - zero
SF - znak
TF - praca krokowa
IF - zezwolenie na przerwanie
DF - znacznik kierunku
OF - nadmiar (przepełnienie)
Przykłady
1. Gdy dodajemy do siebie dwie liczby, załóżmy binarne, to w momencie, gdy wyniku nieda się przedstawić na zadanej liczbie bitów, ustawiany jest znacznik CF.
1010 1110 + 0111 0100 = 1 0010 0010
Liczba przekracza osiem bitów = CF=1.
2. Gdy wykonane, czy to arytmetyczne, czy też logiczne, da nam wynik o parzystej liczbie bitów o wartości 1, ustawiany jest znaczniik PF.
0010 1100 + 1101 1101 = 1101 1101 - 6 bitów ustawionych = PF = 1
3. Gdy w wyniku działania na liczbach w kodzie BCD nastąpi przeniesienie z bitu 3 na 4, lub nastąpiła pożyczka z bitu 4 na 3, ustawiany jest wskaźnik AF.
0010 1110 + 0111 0100 = 1010 0010 - nastąpiło przeniesienie = AF=1
4. Gdy wynik dowolnego działania jest równy 0, ustawiany jest znacznik ZF.
5. Gdy najbardziej znaczący bit w wyniku dowolnego działania jest ustawiony, ustawiany jest także znacznik SF. Jak już wiesz, ma to znaczenie, gdy operujesz na liczbach binarnych ze znakiem. Znacznik ten jest zgodny z bitem znaku.
6. Gdy podczas jakiegoś działania, nastąpiło przeniesienie lub pożyczka z bitu znaku, to znacznik OF jest ustawiany. Ta flaga jest szczególnie istotna, gdy operujesz na liczbach ze znakiem.
7. Gdy znacznik IF jest ustawiony, przerwanie maskowalne nie będzie wykonywane. Gdy IF równa się 0, procesor może wykonać skok do adresu obsługi przerwania.
- W komputerach 32-bitowych rejestr EFLAGS jest nieco rozszerzony i wygląda następująco (opisano jedynie nowe):
x x x ... VM RF NT IOPL OF DF IF TF SF ZF X AF x PF x CF
x - nieużywane
IOPL - znacznik poziomu ochrony wejścia/wyjścia
NT - znacznik zadania zagnieżdżonego
RF - znacznik znowienia
VM - znacznik trybu wirtualnego
- Rejestr CR0 służy do sterowania procesora 80386 i wygląda on następująco:
Bit:
31 0
PG x x ... x x x ET TS EM MP PE
x - nieużywane
PE - bit trybu wirtualnego
MP - bit monitorowania kooprocesora
EM - bit trybu emulacji kooprocesora
TS - bit przełączania zadania
ET - bit typu kooprocesora
PG - bit stronicowania
- Rejestry GDTR i LDTR służą do ustawienia adresów globalnych i lokalnych tablic teskryptorów (patrz p.1.2.5.).
- Rejestr TR służy do przechowywania segmentu stanu aktualnie wykonywanego zadania.
- Rejestr IDTR służy do przechowywania adresu tablicy deskryptorów przerwań.
1.2.3. Stos
Często zdaża się, że obrócz rejestrów potrzebna jest jakaś pamięć podręczna, która, co ważne, nie uległaby wymazaniu przez np. wywołania przerwania czy inne procesy. Taką pamięcią, wyodrębnioną z pamięci operacyjnej, jest właśnie stos. Jego działanie jest bardzo specyficzne. Otóż ze stosu, czyli z tej pamięci, możemy zdejmować, czyli pobierać dane, tylko w takiej kolejności, w jakiej je sami tam położyliśmy. Inaczej mówiąc: jeżeli by porównać dane do książek, to poszczególne książki kładziemy jedna na drugą w wielką piramidę, w właśnie stos. Jeżeli chcemy teraz wziąć jakąś książkę, a nie chcemy żeby całość nam się zawaliła, to musimy zdejmować pokolei po jednej książce.
Powracając do komputerów, wierzchołek stosu, zawsze określa para rejestrów SS:SP. System operacyjny (w naszym przypadku będzie to DOS) każdemu programowi przydziela określoną część pamięci RAM, przeznaczoną na stos. Stos jest też czasem nazywany pamięcią LIFO (Last Input First Output). W komputerach IBM PC, pod kontrolą systemu DOS, mamy właśnie do czynienia z trzema stosami:
- stos wejścia/wyjścia (Ang. I/O stack),
- stos podstawowy, zwany czasem stosem dyskowym,
- stos obsługi błędów krytycznych (Ang. Critical error stack).
1.2.4. Przerwania
O przerwaniach będziemy mówić trochę później, teraz poznasz niezbędne podstawy.
Procesor wykonuje określone działanie np. wykonuje program. Co pewien czas dociera do niego sygnał, że ma przerwać pracę i zrobić coś innego. Potem powraca do pracy i dla użytkownika z zewnątrz, wygląda to tak, jakby procesor nie przerwał ani na moment swojej pracy. Co się stało? Otóż do procesora został przesłany sygnał, że ma wykonać tak zwane przerwanie (Ang. Interrupt) maskowalne (INTR), to jest takie, które daje się ukryć przed użytkownikiem. W momencie wywołania takiego przerwania procesor wywołuje skok do odpowiedniego miejsca w pamięci, gdzie jest zapisany program tego przerwania, potem następuje powrót, do dawniej wykonywanego zadania. Za pomocą tego typu przerwań, wykonywanych jest wiele procesów , na przykład: wyświetlanie znaków na ekranie, współpraca z klawiaturą lub dyskami. Są też przerwania, tak zwane niemaskowalne (NMI), które w momencie wywołania przerywają pracę komputera, najczęściej wysyłają komunikat: "Error at..." i zawieszają komputer. Jednym lekarstwem jest naciśnięcie guzika reset. Może oczywiście się zdażyć, że dwa przerwania są zgłaszane jednocześnie. Wtedy o tym, które ma być wywołane pierwsze, decyduje jego priorytet.
Jak wygląda obsługa przerwania przez procesor? Otóż następująco:
1. Procesor po uzyskaniu zgłoszenia przerwania, identyfikuje jego numer.
2. Odkłada na stos rejestr flagowy, adres powrotny, zeruje flagę IF.
3. Ustala adres obsługi przerwania, ładuje go do pary rejestrów CS:IP, a tym samym wykonuje skok pod podany adres.
4. Procedura obsługi programu musi się kończyć instrukcją IRET, wskazującą na powrót do dawniej wykonywanego zadania.
Następny podział, jaki można wprowadzić, to podział na przerwania: sprzętowe, generowane przez generator przerwań sprzętowych, układ 8259A i przerwania programowe zgłaszane przez programy.
1.2.4.1. Przerwania sprzętowe (IRQ)
Przerwania sprzętowe są zgłaszane przez użądzenia zewnętrzne (klawiaturę, stację dysków, dysk twardy itp.) w momencie wykonania przez nie jakiegoś określonego zadania. Ponieważ procesor ma tylko jedno wejście INT sygnalizujące potrzebę wywołania przerwania sprzętowego, a tym samym potrzebę określenia ważności jednego przerwania względem drugiego (określenie priorytetu), stworzono specjalizowany układ scalony, tak zwany 8259A, który może przyjąć osiem żądań przerwania. Była to liczba wystarczająca w momencie produkcji IBM PC XT. Później była potrzeba stworzenia większej ilości przerwań sprzętowych, nazywanych w skrócie IRQ. Zrobiono to następująco: Do jednej lini przerwania układu 8259A dołączono drugi, taki sam układ, który też mógł przyjąć osiem żądań wywołania przerwania. Stąd w komputerach klasy AT, można wywołać piętnaście IRQ. A oto tabela przerwań IRQ w komputerach XT i AT:
System XT: HD - dysk twardy, FDD - dyskietki
IRQ | obsługa użądzenia
0 | zegar systemowy
1 | klawiatura
2 | zarezerwowane
3 | COM2
4 | COM1
5 | kontroler HDD
6 | kontroler FDD
7 | LPT1
System AT: HD - dysk twardy, FDD - dyskietki, RTC - zegar czasu rzeczywistego
I Q ||obsługa użądzenia
0 | zegar systemowy
1 | klawiatura
2 | wyjście do 8259A
3 | COM2
4 | COM1
5 | LPT2
6 | kontroler FDD
7 | LPT1
8 | RTC
9 | wywołanie IRQ1
10 | zarezerwowane
11 | zarezerwowane
12 | zarezerwowane
13 | kooprocesor
14 | kontroler HDD
15 | zarezerwowane
1.2.5. Pamięć
Z technicznego punktu widzenia jest ona szeregiem przerzutników typu D, który może mieć dwa stany: 0 lub 1. Z punktu widzenia programisty, konstrukcja przerzutnika nie ma znaczenia, a i sama jego znaczenia jest zastępowana raczej nazwą - komórka pamięci. Pamięć komputera możemy podzielić na pamięć stałą, której zawartość jest niewymazywalna, zawiera ona podstawowe oprogramowanie pozwalające uruchomić komputer i wczytać system operacyjny. Pamięć ta nosi nazwę ROM (Read only memory), oraz na pamięć wymazywalną, której zawartość ginie bezpowrotnie po wyłączeniu zasilania, lub też zapisaniu inną zawartością. Pamięć ta ma nazwę RAM (Random access memory). Cała pamięć Ram komputera (nie mylić z pamięcią zewnętrzną - dyskami twardymi) składa się z setek tysięcy takich komórek. Wszystkie znajdują się w kilku układach scalonych, umieszczonych na płycie głównej komputera.
Co zrobić, aby zaadresować całą pamięć? Otóż podzielono całą pamięć na tak zwane segmenty po 64 kilobajty. STąd adres poszczególnych komórek pamięci w komputerze składa się z adresu konkretnego segmentu oraz przemieszczenia względem tego segmentu. A więc adres podaje się w następującej postaci:
segment:przemieszczenie (Ang. Offset) - np. 0B00:2Fb6
Adres fizyczny oblicza się ze wzoru:
adres_fiz = 16 * segment + offset
Ponieważ adresy najczęściej podawane są w postaci heksadecymalnej, sprawa jest ułatwiona, ponieważ mnożenie przez 16 odbywa się na zasadzie dopisania zera do liczby określającej segment.
Przykład
Adres logiczny: 2F63:B000
2F63 * 16 = 2F630
2F630 + B000 = 43630(h)
Wraz z postępem technicznym nadeszła możliwość adresowania za pomocą 32-bitów. Jednak chęć zgodności z poprzednimi modelami komputera, narzuca adresowanie za pomocą segmentu i przemieszczenia. Jednak jest możliwe łatwiejsze adresowanie w trybie wirtualnym, za pomocą tzw. deskryptorów, to jest 8-bitowych rekordów opisujących położenie i wielkość danego segmentu.
1.2.6. Kanały DMA
Kanały DMA (Ang. Direct memory access) są używane do szybkiego, bezpośredniego przesyłania bloków pamięci do użądzeń wejścia/wyjścia bez udziału procesora. Zazwyczaj kożystają z tego napędy dyskietek i twardego dysku. Komputery klasy IBm PC XT posiadają 4, 8-bitowe kanały DMA, sterowane przez wyspecjalizowany układ 5237A, PC AT posiadają dołączony kaskadowo drugi identyczny układ, co pozwala zwiększyć liczbę kanałów do siedmiu.
1.2.8. Układy wejścia/wyjścia
Komputer komunikuje się z otoczeniem (z użytkownikiem) za pomocą dość uniwersalnych złącz zwanych interface'ami lub sprzęgami. Abyśmy mogli poruszać się myszką, dżojstikiem, używać drukarki, omówimy dwa najpopularniejsze: interface szeregowy, RS232SC i równoległy - Centronics. Czym się różnią? Otóż w sprzęgu szeregowym kolejne bity danych biegną kolejno po jednym kablu. W sprzęgu równoległym osiem bitów danych biegnie równolegle ośmioma przewodami.
1.2.8.1. RS-232C
Ten sprzęg był początkowo dedykowany jedynie komunikacji komputera z modemem telefonicznym. Później zaczęto wykorzystywać go także do innych celów, na przykład: dołączenie myszki. Fizycznie stanowi go przewód 25-żyłowy. Ztyn że w standardzie używa się jedynie 9 przewodów. Stąd spotyka się wtyki 25-końcówkowe (DB-25) oraz 9-końcówkowe (DB-9). Oto specyfikacja złącza:
Wtyk DB-25 | Wtyk DB-9 | Sygnał | Kierunek transmisji
2 | 3 | TxD | komputer - urządzenie zewnętrzne
3 | 2 | RxD | użądzenie zewnętrzne - komputer
4 | 7 | RTS | komputer - użądzenie zewnętrzne
5 | 8 | CTS | użądzenie zewnętrzne - komputer
6 | 6 | DSR | użądzenie zewnętrzne - komputer
7 | 5 | - | masa
8 | 1 | DCD | użądzenie zewnętrzne - komputer
20 | 4 | DTR | komputer - użądzenie zewnętrzne
22 | 9 | RI | użądzenie zewnętrzne - komputer
23 | - | DSRD | użądzenie zewnętrzne - komputer
Znaczenie poszczególnych sygnałów:
TxD - przesłanie danych do komputera od użądzenia peryferyjnego
RxD - przesyłanie danych do użądzenia peryferyjnego od komputera
RTS - komputer sygnalizuje użądzeniu zewnętrznemu chęć przekazywania danych
CTS - użądzenie peryferyjne zgłasza gotowość po sygnale CTS
DSR - w praktyce nie używany lub zawsze aktywny. Oznacza tyle, co gotowość użądzenia peryferyjnego do pracy
DTR - gotowość komputera. Musi być zawsze aktywny
DCD - w przypadku podłączenia modemu, sygnalizuje odbiór fali nośnej
RI - w przypadku podłączenia modemu, sygnalizuje wywołanie abonamenta (dzwonek)
DSRD - nie używane we ftyku DB-9. POzwala dostosować się komputerowi i użądzeniu peryferyjnemu do jednej z dwóch prędkości transmisji
Rozróżnia się trzy tryby pracy:
- SIMPLEX - na stałe w jednym kierunku (komputer - użądzenie zewnętrzne lub odwrotnie)
- PÓŁDUPLEX - naprzemiennie dwustronny, lecz dostępny tylko jeden kanał danych
- DUPLEX - jednocześnie dwóstronny, dostępne dwa kanały danych
1.2.8.2. Centronicix
Głównym przeznaczeniem tego złącza jest komunikacja z drukarką, choć spotyka się czasem inne zastosowania. Spotyka się jedynie wtyk 25-końcówkowy DB-25. Opis złącza:
Komputer | Drukarka | Sygnał | Kierunek transmisji
1 | 1 | STR | komputer - drukarka
2 | 2 | D0 | komputer - drukarka
3 | 3 | D1 | komputer - drukarka
4 | 4 | D2 | komputer - drukarka
5 | 5 | D3 | komputer - drukarka
6 | 6 | D4 | komputer - drukarka
7 | 7 | D5 | komputer - drukarka
8 | 8 | D6 | komputer - drukarka
9 | 9 | D7 | komputer - drukarka
10 | 10 | ACK | drukarka - komputer
11 | 11 | BUSY | drukarka - komputer
12 | 12 | PAP | drukarka - komputer
13 | 13 | ONLINE | drukarka - komputer
14 | 14 | ALF | komputer - drukarka
15 | 32 | ERR | drukarka - komputer
16 | 31 | INI | komputer - drukarka
17 | 36 | DSL | komputer - drukarka
18-25 | 19-30,33 | GND | -
| 16 | 0V | -
| 17 | obudowa | -
| 18 | +5 wolt | -
| 34,35 | wolne | -
PAP - sygnał wskazujący, że skończył się papier (PAPER OUT)
ONLINE - sygnał mówi, o logicznym podłączeniu drukarki (drukarka wstanie ON-LINE)
ALF - sygnał nakazujący po znaku końca wiersza (CR) wysunąć wiersz (LF)
ERR - sygnał wskazujący na błąd działania. Przyczyną może być: brak papieru; drukarka nie jest w stanie ON-LINE; drukarka została wyłączona; inny błąd
INI - w niektórych drukarkach, sygnał ten uruchamia procedurę inicjującą
DSL - sygnał wybierania drukarki. Zazwyczaj stale połączony z masą
1.2.8.3. Standardowe nazwy użądzeń We/Wy
W codziennej pracy z komputerem nie używa się nazwy typu RS232C czy CENTRONICS. Jest to niewygodne dla człowieka jak i dla komputera.
Kilkuliterowe skróty, które oznaczają konkretne użądzenie:
CON: klawiatura lub monitor
COM1: port szeregowy numer 1
AUX: port szeregowy numer 1 (nazwa wymienna z COM1:)
COM2: port szeregowy numer 2
LPT1: port równoległy numer 1
PRN: port równoległy numer 1 (nazwa wymienna z LPT1:)
LPT2: port równoległy numer 2
LPT3: port równoległy numer 3
NUL: użądzenie puste, nieistniejące (utworzone, żeby wysłać np. komunikat w miejsce, którego nie ma, czyli nigdzie się nie pojawi)
CLOCK$: zegar
Przykłady
Jeżeli chcemy wysłać plik proba.doc do drukarki zainstalowanej do LPT1, wystarczy napisać
COPY PROBA.DOC PRN: lub COPY PROBA.DOC LPT1:
Trochę kłopotu może ci sprawić użądzenie NUL, ale jeżeli znasz potoki w DOS, szybko zrozumiesz. Otóż jeżeli chcesz, aby program (np. jeden.EXE) wysłał komunikat normalnie wyświetlany na ekranie np. na drukarkę, napiszesz
JEDEN.EXE>PRN:
Od tej chwili, wszystkie komunikaty programu JEDEN, będą ukazywać się na drukarce. Żeby się wogóle nie pokazywały, piszesz:
JEDEN.EXE>NUL
1.2.8.4. Porty
W praktyce mówi się, że na przykład: "Ja piszę po portach". PO prostu w danym języku programowania, bez różnicy czy: Turbo Pascal, czy na przykład C++, można albo skorzystać z procedur i funkcji udostępnianych przez kompilator, albo samemu ustalać, gdzie każda dana ma trafić. Albowiem każde użądzenie wejścia/wyjścia (karta graficzna, kontroler dysków) komunikuje się z procesorem za pośrednictwem szeregu wejść i wyjść zwanych portami. I czasem dla zoptymalizowania czasu działania programu, stosuje się metody adresowania bezpośrednio portów, nie mówiąc już o takich sytuacjach, gdy adresowanie portów jest jedynym możliwym sposobem dla osiągnięcia jakiegoś efektu, na przykład wydobycie dźwięku z COVOX'A. Każdy z portów ma osobny muner (z zakresu od 0 do 65535).
1.2.9. Karty rozszerzeń
Głównym powodem umieszczenia pewnych podzespołów na osobnych, wymiennych kartach, a nie integrowanie ich na płycie głównej, jest troska o użytkownika. Najczęściej spotykane karty rozszerzające możliwości systemu to:
- karta video (zawsze)
- karta I/O z interface RS-232C i CETRONICS
- karta modemu telefonicznego
- karta obsługi dżojstika tak zwana GAME Cart
- karta obsługi skanera
- każde inne specjalizowane użądzenie ma swoją kartę
1.2.10. Konfigurowanie
Komputer mimo, że jest użądzeniem niesłychanie szybkim, jest też niewiarygodnie głupim i trzeba mu wyraźnie zaznatrzyć, z czego on się sam się składa. Są dwa sposoby takiego informowania w komputerach klasy IBM PC.
1.2.10.1. Zwory
Zwory (DIP Sfitches) występują tylko w komputerach XT. Jest to mała kostka z sześcioma przełącznikami, znajdująca się między kartami rozszerzeń.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ON (1) | OFF (0)
7, 8 - stalowane dyski: 11 - jeden dysk; 01 - dwa dyski; 10 - trzy dyski; 00 - cztery dyski
5, 6 - zainstalowany monitor: 11 - żaden lub EGA; 01 - CGA (40*25); 10 - CGA (80*25); 00 - MDA
3, 4 - typ pamięci na karcie: 01 - 128 kB; 10 - 192 kB; 11 - 256 kB
2 - obecność kooprocesora 80 87: 1 - jest; 0 - nie ma
1 - pętla POST (zawsze OFF)
1.2.10.2. Pamięć CMOS
Wyposażone są w nią komputery z procesorami 80*86. Jest to specjalny układ scalony, którego pamięć można zmieniać i jest ona podtrzymywana baderyjnie, podczas wyłączenia komputera. Znajdują się w niej wszystkie dane dotyczące konfiguracji komputera oraz zegar czasu rzeczywistego (RTC).
1.2.11. Pamięć masowa
Wszystkie programy muszą być po pierwsze gdzieś składowane, po drógie - w jakiś posób przenoszone. Bez nośnikamagnetycznego, nie istnieje pojęcie programu. Te dwa pojęcia: program i nośnik, są ze sobą nierozerwalnie związane. Nośniki możemy podzielić generalnie na dwie grupy:
1. Nośniki przenośne, o stosunkowo małej objętości - dyskietki.
2. Nośniki zamontowane w nętrzach naszych komputerów, o bardzo dużych objętościach - dyski twarde.
Dyskietka jest krążkiem materiału magnetycznego w plastikowej kopercie. Możemy je podzielić ze względu na wielkość oraz na objętość. Krążek magnetyczny podzielony jest na sektory (wycinki koła) oraz na ścieszki.
Dyski twarde różnią się od dyskietek gabarytami i pojemnością. Składają się więcej, niż z jednego krążka materiału magnetycznego.
Wyszukiwarka
Podobne podstrony:
98 01 J O Kephart (Walka z komputerowymi wirusami)01 Ergonomia stanowiska komputerowego101 Linux Przygotowanie komputera do pracy w sieci TCP IP09 01 Zagospodarowanie placu budowy planRozdział 01 Komunikacja procesora z innymi elementami architektury komputeraSieci komputerowe wyklady dr Furtakt informatyk12[01] 02 101r11 012570 01introligators4[02] z2 01 nInformacja komputerowaBiuletyn 01 12 2014beetelvoiceXL?? 0101ANALIZA KOMPUTEROWA SYSTEMÓW POMIAROWYCH — MSE2007 01 Web Building the Aptana Free Developer Environment for Ajaxwięcej podobnych podstron