wyklady, wykl1,2,3, Narodziny komputera datuje się na 1938 rok kiedy to Konrad Zuse konstruuje w swoim mieszkaniu w Berlinie pierwszy na świecie


1. Historia komputera.

Narodziny komputera datuje się na 1938 rok kiedy to Konrad Zuse konstruuje w swoim mieszkaniu w Berlinie pierwszy na świecie komputer Z1 wykorzystujący nowoczesny system dwójkowy ,była to maszyna pracująca na zasadzie czysto mechanicznej. Dwa lata później na zamówienie ministerstwa lotnictwa powstaje Z3 pracujący na przekaźnikach telefonicznych. W latach 1939-1944 w USA powstaje MARK 1, pierwsza maszyna elektromechaniczna . W 1946 roku też w USA J.P. Eckert i J.W.Mauchly konstruują pierwszą w pełni elektroniczną maszynę ENIAC (17 468 lamp) wykorzystującą lampy elektronowe. Rok później J.Bardeen, W.Brattain i William Shockley opracowują pierwszy tranzystor. Była to przełomowa chwila w rozwoju maszyn liczących, które zaczęły powstawać jak grzyby po deszczu.

0x01 graphic
1948 - John van Neumann proponuje aktualną do dzisiaj architekturę komputera polegającą na umieszczeniu programu i danych w jednej pamięci jako identycznie reprezentowanych struktur. Na rynek wchodzi IBM z maszyną SSEC(12 500 lamp), a nieco później Model 604 (1 400 lamp);

0x01 graphic
1951 - konstruktorzy ENIAC'a tworzą UNIVAC 1 (5 600 lamp), pierwszy komputer produkowany seryjnie;

0x01 graphic
1952 - IBM wypuszcza komputer o szybkości mnożenia 0,4ms IBM 701;

0x01 graphic
1953 - Powstaje pamięć oparta na rdzeniach ferrytowych;

0x01 graphic
1954 - Backus i Ziller tworzą pierwszy język wyższego rzędu FORTAN, przeznaczony do obliczeń matematycznych;

0x01 graphic
1955 - Bell Telephone Labs produkuje pierwszy komputer oparty na tranzystorach;

0x01 graphic
1956 - Powstaje IBM 305, pierwszy komputer z pamięcią magnetyczną; 0x01 graphic
1958 - J.Kolby opracowuje dla Texas Instruments pierwszy układ scalony;

0x01 graphic
1959 - Powstaje język COBOL;

0x01 graphic
1961 - Texas Instruments produkuje na potrzeby armii pierwszy komputer oparty na układach scalonych z pamięcią półprzewodnikową;

0x01 graphic
1968 - R.Noyce i G.Moore zakładają firmę INTEL; D.Engelbart prezentuje NLS używający jako urządzenie wskazujące mysz;

0x01 graphic
1971 - INTEL wypuszcza pierwszy czterobitowy procesor i4004 (108khz);

0x01 graphic
1974 - ED Roberts tworzy pierwszy komputer osobisty ALTAIR; INTEL wypuszcza ośmiobitowy procesor 8080;

0x01 graphic
1975 - B.Gates i P.Allen zakładają MICROSOFT oraz opracowują język BASIC dla ALTAIR'a;

0x01 graphic
1976 - S.Woźniak i S.Jobs tworzą komputer APPLE I;

0x01 graphic
1977 - S.Woźniak i S.Jobs zakładają firmę APPLE COMPUTER oraz wypuszczają APPLE II. [5]

2. Reprezentacja liczb w różnych systemach liczbowych.

2.1. Pozycyjne systemy zapisu liczb.

Sposób zapisywania liczb nazywamy pozycyjnym, gdy wartość cyfry zależy od miejsca, czyli pozycji, jaką ta cyfra zajmuje w napisanej liczbie. Każda pozycja ma określoną i niezmienną wagę liczbową.

Postać n-cyfrowej liczby całkowitej zapisanej w systemie pozycyjnym o podstawie p jest następująca:

0x08 graphic

gdzie: ci oznacza i - tą cyfrę liczby oraz ci należy do zbioru

{0,1,2, ... ,p - 1}

Wartość tak przedstawionej liczby wynosi:

0x08 graphic

Postać m-cyfrowej liczby ułamkowej zapisanej w systemie pozycyjnym o podstawie p oraz jej wartość jest następująca:

0x08 graphic
0x08 graphic

Łącząc część całkowitą i ułamkową mamy następującą postać liczby mieszanej o n-cyfrowej części całkowitej i m-cyfrowej części ułamkowej:

0x08 graphic
0x08 graphic

0x08 graphic

Cyfry ci służą do zapisywania liczb. Są one znakami z pewnego zbioru znaków. Najczęściej są to cyfry arabskie (0 - 9) plus dodatkowe znaki w przypadku zbiorów większych od 10. [4]

System liczbowy

Cyfry używane w systemie liczbowym

2

Dwójkowy (binary)

0,1

3

Trójkowy (ternary)

0,1,2

8

Ósemkowy (octal)

0,1,2,3,4,5,6,7

10

Dziesiętny (decimal)

0,1,2,3,4,5,6,7,8,9

12

Dwunastkowy (duodecimal)

0,1,2,3,4,5,6,7,8,9,α,β

16

Szesnastkowy (hexadecimal)

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

0x08 graphic

2.2. Dwójkowy system liczbowy.

W systemie dwójkowym p = 2. Dwójkowa liczba mieszana, składająca się z n-cyfrowej części całkowitej i m-cyfrowej części ułamkowej ma postać:

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

[4]

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic

DEC

HEX

BIN

DEC

HEX

BIN

0

0

0000

8

8

1000

1

1

0001

9

9

1001

2

2

0010

10

A

1010

3

3

0011

11

B

1011

4

4

0100

12

C

1100

5

5

0101

13

D

1101

6

6

0110

14

E

1110

7

7

0111

15

F

1111

[4]

3. Bajty i bity.

Najmniejsza, liczona w bitach (bit) jednostka pamięci bezpośrednio dostępna (adresowalna) w danym systemie komputerowym. W dawniejszych systemach bajt liczył 6-9 bitów. Obecnie stosowana jest powszechnie 8-bitowa organizacja pamięci i "bajt" rozumiany jest zwykle jako 8 bitów.

Termin pochodzi od słowa "bite" (kęs), które w angielskim języku technicznym oznaczało także porcję (np. porcję danych). Aby uniknąć pomylenia ze słowem bit, inżynier Werner Buchholz w 1956 roku, zmieniając nieznacznie pisownię, przerobił "bite" na "byte". Według jego definicji bajt to "a group of bits used to encode a character, or the number of bits transmitted in parallel to and from input-output units" (grupa bitów używana do kodowania znaku lub liczba bitów przesyłanych równoległe do i z urządzeń wejściowych lub wyjściowych).

Symbolem bajta jest B (w odróżnieniu od b oznaczającego bit). Jednostki większe oznaczane są przedrostkami podobnymi do tych, jakie występują w metrycznym systemie miar (kilo-, mega-, giga-, tetra-), ale oparte są na mnożniku 1024 (2^10), a nie metrycznym tysiącu, co w systemach cyfrowych jest bardziej poręczne. Dla zaznaczenia, że nie są to jednostki metryczne, ich symbole zapisywane są za pomocą dużej litery:

kilobajt (KB) = 1024 B

megabajt (MB) = 1024 KB (1048576 B)

gigabajt (GB) = 1024 MB (103741824 B).

[5]

4. Kody.

Informacja dyskretna składa się ze znaków, którymi mogą być zarówno liczby (cyfry), litery oraz inne symbole. Znakom tym przyporządkowane są wektory informacji cyfrowej (kody dwójkowe). Długość słowa kodowego zależy od liczby znaków, które należy zakodować (np. 8 bitów daje możliwość zakodowania 256 znaków). [5]

4.1. Kody dwójkowe wagowe i niewagowe.

Jeżeli każdy bit (pozycja) kodu ma określoną i niezmienną wagę liczbową, to kod nazywamy kodem wagowym. Pozostałe kody są niewagowe. Dla kodów wagowych wartości liczbowe słowa kodowego będą sumą wag tych pozycji, które zawierają jedynki. [1]

4.2. Naturalny kod dwójkowy (binarny) - NKB

Najprostrzym wagowym kodem dwójkowym jest tzw. naturalny kod binarny - NKB. Wynika on bezpośrednio z dwójkowego systemu liczbowego. [1]

PRZYKŁAD:

DEC

8 4 2 1 NKB

DEC

8 4 2 1 NKB

0

0000

8

1000

1

0001

9

1001

2

0010

10

1010

3

0011

11

1011

4

0100

12

1100

5

0101

13

1101

6

0110

14

1110

7

0111

15

1111

4.3. Kod GRAYA.

Przykładem popularnego kodu niewagowego może być kod GRAYA

DEC

GRAYA

DEC

GRAYA

0

0000

8

1100

1

0001

9

1101

2

0011

10

1111

3

0010

11

1110

4

0110

12

1010

5

0111

13

1011

6

0111

14

1011

7

0100

15

1000

[1]

4.4. Kody dwójkowo - dziesiętne.

Ważną odmianę kodów dwójkowych stanowią kody dwójkowo-dziesiętne BCD. W kodach tych poszczególne cyfry liczby dziesiętnej przedstawiane są w kodzie dwójkowym. Wśród kodów BCD wyróżniamy wagowe i niewagowe. Najbardziej popularny jest kod BCD 8421.

PRZYKŁAD:

74910 = 7 4 9 = 011101001001BCD

0111 0100 1001

011000110010010BCD = 0011 0001 1001 0010 = 319210

3 1 9 2

[1]

4.4. Kody detekcyjne i korekcyjne.

Kody detekcyjne i korekcyjne służą do wykrywania i korekcji błędów powstałych między innymi w czasie transmisji sygnałów cyfrowych.

Z tej grupy kodów omówimy kod z kontrolą parzystości oraz kod ze stałą liczbą jedynek. [1]

4.4.1. Kody z kontrolą parzystości.

Kod z kontrolą parzystości jest tworzony przez dodanie do każdego słowa kodowego (kodu dwójkowego) dodatkowego bitu przyjmującego taką wartość, żeby liczba jedynek w słowie (łącznie z bitem parzystości) była parzysta (lub nieparzysta). Można to stosować w dowolnym kodzie dwójkowym.

PRZYKŁAD:

DEC

8 4 2 1 NKB

Bit parzystości - p

0

0000

0

1

0001

1

2

0010

1

3

0011

0

4

0100

1

5

0101

0

6

0110

0

7

0111

1

8

1000

1

9

1001

0

[1]

4.4.2. Kod ze stałą liczbą jedynek.

Do klasy kodów detekcyjnych należą kody ze stałą liczbą jedynek we wszystkich słowach kodowych. Ogólnie nazywamy je kodami „1 z n” i mogą one być wagowe lub niewagowe.

PRZYKŁAD:

Kod „1 z10”

DEC

„1 z 10”

0

0000000001

1

0000000010

2

0000000100

3

0000001000

4

0000010000

5

0000100000

6

0001000000

7

0010000000

8

0100000000

9

1000000000

[1]

4.5. Kody korekcyjne.

Oprócz kodów detekcyjnych, w systemach cyfrowych, np. w systemach transmisji danych, stosowane są kody korygujące błędy. Istnieje wiele takich kodów. Tu przedstawiony zostanie tylko jeden z nich, który ma zastosowanie w magnetycznych systemach zapisu informacji - kod CRC. [1]

4.5.1. Budowa kodu CRC.

Rozpatrzmy klasyczne dzielenie dwóch liczb całkowitych. Bez względu na system liczbowy (dziesiętny, binarny) obowiązuje tu zasada:

DZIELNA : DZIELNIK = ILORAZ + RESZTA

PRZYKŁAD:

32410 : 1910 = 1710 r. 1 = 1010001002 : 100112 = 100012 r. 1

101000100 : 10011 = 10001

10011

000010

00000

00101

00000

01010

00000

10100

10011

00001 - reszta

Zastępując klasyczne odejmowanie działaniem suma modulo 2 otrzymamy:

101000100 : 10011 = 10111 0 + 0 = 0

10011 0 + 1 = 1

001110 1 + 0 = 1

00000 1 + 1 = 0

011101

10011

011100

10011

011110

10011

01101 - reszta

Kody CRC korzystają właśnie z takiego działania. Pod pojęciem sumy kontrolnej danego ciągu danych w kodzie CRC rozumiemy resztę z dzielenia tego ciągu przez określony dzielnik.

Dowolnie długi ciąg danych zabezpieczony przy użyciu kodu CRC traktuje się jako dzielną. Ustalony dzielnik jest generatorem kodu. Reszta z dzielenia jest kodem CRC - sumą kontrolną w kodzie CRC.

PRZYKŁAD:

Na nośniku magnetycznym stosuje się 17-bitowy generator kodu o postaci 10001000000100001, który generuje 16-bitową resztę - kod CRC. Blok danych o wielkości 512 bajtów (sektor na dysku) zabezpieczony jest przez dopisanie w polu 2 bajtów kodu CRC.

[1]

4.6. Kody alfanumeryczne.

Najbardziej popularny obecnie jest kod ASCII. (ang. American Standard Code for Information Interchange) lub inaczej kod ISO (International Standard Organization). Kod ten stosowany jest dla znaków alfanumerycznych, tj. dla cyfr, liter, znaków pisarskich i znaków redakcyjnych sterujących. Zbiór znaków kodu ASCII składa się ze standardowych znaków (128) i rozszerzonych znaków (128). Razem 256 znaków. [1]

Nazwy znaków graficznych ASCII

Wartość kodowa

znak

Nazwa

32

space, spacja

33

!

exclamation mark, wykrzyknik

34

"

double quote, cudzysłów

35

#

hash, znak numeru

36

$

dollar, znak dolara

37

%

percent, procent

38

&

39

'

quote, apostrof

40

(

open parenthesis, lewy nawias okrągły

41

)

close parenthesis, prawy nawias okrągły

42

*

asterix, gwiazdka

43

+

plus, plus

44

,

comma, przecinek

45

-

minus, łącznik, minus, dywiz

46

.

full stop, kropka

47

/

oblique stroke, slash, kreska ułamkowa (ukośnik)

48 - 58

Cyfry

58

:

colon, dwukropek

59

;

semicolon, średnik

60

<

less than, mniejsze od (lewy nawias kątowy)

61

=

equals, znak równości

62

>

greater than, większe od (prawy nawias kątowy)

63

?

question mark, znak zapytania

64

@

at (commercial at), (różne żargonowe określenia, np. "małpa")

65 - 90

wielkie litery łacińskie

91

[

open square bracket, lewy nawias kwadratowy

92

/

backslash, kreska ułamkowa odwrócona

93

]

close square bracket, prawy nawias kwadratowy

94

^

caret, znak akcentu cyrkumfleksowego

95

_

underscore, podkreślenie (wykorzystywany jako "twarda spacja")

96

`

backquote, znak akcentu słabego.

97-122

małe litery łacińskie (mają kody o 32 większe od kodów wielkich liter)

123

{

open curly bracket, lewy nawias klamrowy

124

|

vertical bar, kreska pionowa

125

}

close curly bracket, prawy nawias klamrowy

126

~

tilde, tylda

[5]

5.Sposoby przedstawiania liczb dwójkowych - dane numeryczne.

5.1. Liczby stałoprzecinkowe.

0x08 graphic
Liczba stałoprzecinkowa jest to liczba zapisana w postaci:

n - bitowa część całkowita m - bitowa część ułamkowa

umowne (stałe) położenie przecinka

0x08 graphic
Wartość takiej liczby wynika z definicji liczby w dwójkowym systemie liczbowym. Regułą zapisu jest stała pozycja przecinka

[5]

5.2. Liczby stałoprzecinkowe ze znakiem.

Do tej pory rozważane były tylko liczby dwójkowe dodatnie. Teraz zajmiemy się problemem znaku liczb dwójkowych stałoprzecinkowych. Liczby binarne muszą reprezentować zarówno liczby dodatnie jak i ujemne, liczby całkowite jak i ułamki oraz liczby mające część całkowitą i ułamkową. Istnieje kilka sposobów przedstawiania (zapisu) liczb dwójkowych ze znakiem.

[5]

5.2.1. Zapis w postaci moduł - znak.

W zapisie tym na najbardziej znaczącej pozycji umieszczony jest bit znaku S. Gdy S = 0, to liczba jest dodatnia; gdy S = 1, to ujemna. Liczba mieszana (n + m. Bitów bez bitu znaku) w zapisie moduł-znak ma postać:

0x08 graphic

0x08 graphic
Wartość dziesiętna takiej liczby wynosi:

PRZYKŁAD:

+127 = 011111111 S = 0 (liczba dodatnia)

-127 = 111111111 S = 1 (liczba ujemna)

[5]

5.2.2. Zapis w postaci uzupełnień do 1 (U1).

W zapisie tym najbardziej znaczący bit jest także bitem znaku (0 - liczba dodatnia i 1 - liczba ujemna), ale w zależności od jego wartości dalsze bity zapisu mają różne znaczenie. Jeśli bit znaku jest 0(liczba dodatnia), to dalsze bity są reprezentacją liczby dodatniej w kodzie NKB. Natomiast gdy bit znaku jest 1(liczba ujemna), to dalsze bity reprezentują moduł liczby ujemnej, w taki sposób, że zanegowane ich wartości odpowiadają modułowi tej liczby w kodzie NKB. Zakres liczb tego zapisu jest taki sam jak dla zapisu znak-moduł, a liczba zero ma także dwie reprezentacje.

PRZYKŁAD:

+127 = 011111111 S = 0 (liczba dodatnia)

-127 = 100000000 S = 1 (liczba ujemna)

[5]

5.2.3. Zapis w postaci uzupełnień do 2 (U2).

Najczęściej spotykanym w komputerach sposobem zapisu liczb jest tzw. zapis uzupełnień do 2 (w skrócie U2).

0x08 graphic
Liczby całkowite w zapisie U2 (n bitów bez znaku) mają postać:

0x08 graphic
Wartość dziesiętna (całkowita) takiej liczby wynosi:

0x08 graphic
Liczby ułamkowe w zapisie U2 (m bitów bez znaku) mają postać:

Wartość dziesiętna (ułamkowa) takiej liczby wynosi:

0x08 graphic

Powyższe rozważania nie są słuszne dla liczb mieszanych !!!

Można wykazać, że uzupełnienie do 2 danej liczby reprezentuje liczbę do niej przeciwną co do znaku, tzn. (x)u = -x

Praktyczna reguła wyznaczania uzupełnienia do 2 polega na zamianie wszystkich bitów tej liczby na przeciwne (negacja bitów) i dodanie 1.

PRZYKŁAD:

+118 = 01110110 U2: 01110110

10001001

+ 00000001

10001010 = -118

+0,125 = 0,001 U2: 0,001

1,110

+ 0,001

1,111 = -0,125

[5]

5.2.4. Zapis w postaci przesuniętej.

Niech ilość bitów liczby A wyrażonej w kodzie przesuniętym wynosi n.

0x08 graphic
Wartość dziesiętna liczby A wynosi:

PRZYKŁAD:

n = 4; p = 23 = 8

A =15 = 1111 w = A - p = 15 - 8 = 7

A = 0 = 0000 w = A - p = 0 - 8 = -8

A = 8 = 1000 w = A - p = 8 - 8 = 0

UWAGA! Są systemy, których przesunięcie p wynosi: p = 2n-1- 1

[5]

5.3. Ogólny format zapisu liczb stałoprzecinkowych.

Dane numeryczne (liczby) są przechowywane w komórkach pamięci lub rejestrach o ograniczonej długości. Istnieje zatem potrzeba określenia sposobu przechowywania liczb w pamięci (chodzi o ilość komórek pamięci i ich przeznaczenie - w którym miejscu przechowywane są poszczególne części liczby, tj. całkowita i ułamkowa oraz znak).

[5]

5.4. Format liczby mieszanej.

0x08 graphic

0x08 graphic
S

b0x01 graphic

b0x01 graphic

...

b0x01 graphic

b0x01 graphic

...

b0x01 graphic

0x08 graphic
0x08 graphic

5.5. Format liczby całkowitej.

0x08 graphic
0x08 graphic
S

b0x01 graphic

b0x01 graphic

.........................b0x01 graphic

0x08 graphic

0x08 graphic

5.6. Format liczby ułamkowej.

0x08 graphic
0x08 graphic
S

b0x01 graphic

b0x01 graphic

.........................b0x01 graphic

0x08 graphic

0x08 graphic

1

26

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

,

gdzie: bi należy do zbioru {0, 1}, cyfry 0, 1 nazywamy bitami

+

0x01 graphic

+

0x01 graphic

PRZYKŁAD:

1001,11012 = 1 . 23 + 0 . 22 + 0 . 21 + 1 . 20 + 1 . 2-1 + 1 . 2-2 + 1 . 2-3 +

+ 1 . 2-4 = 9,8125 10

Konwersji dziesiętno-dwójkowej można dokonać na drodze

wielokrotnego dzielenia przez 2 całkowitej części oraz mnożenia

przez 2 ułamkowej części liczby dziesiętnej:

9,8125 10 = 1001,11012

9 : 2 = 4 r 1 - LSB 0,8125 . 2 = 1,6250 = 0,6250 nad. 1 - MSB

4 : 2 = 2 r 0 0,6250 . 2 = 1,2500 = 0,2500 nad. 1

2 : 2 = 1 r 0 0,2500 . 2 = 0,5000 = 0,5000 nad. 0

1 : 2 = 0 r 1 - MSB 0,5000 . 2 = 1,0000 = 0,0000 nad. 1 - LSB

2.3. Szesnastkowy system liczbowy.

W systemie szesnastkowym p = 16. Szesnastkowa liczba mieszana,

składająca się z n-cyfrowej części całkowitej i m-cyfrowej części

ułamkowej ma postać:

0x01 graphic

0x01 graphic

,

gdzie: bi należy do zbioru {0, 1}, cyfry 0, 1 nazywamy bitami

+

0x01 graphic

+

0x01 graphic

PRZYKŁAD

F3A,C816 = 15 . 162 + 3 . 161 + 10 . 160 + 12 . 16-1 + 8 . 16-2 =

= 4898,78125 10

Liczba przedstawiona w systemie dwójkowym może być bezpośrednio

przetworzona na liczbę szesnastkową (hexa) i odwrotnie.

W tym celu należy liczbę dwójkową podzielić na grupy czterobitowe

poczynając od przecinka w lewo i w prawo oraz zapisać otrzymane

tetrady ekwiwalentami szesnastkowymi (analogicznie zamieniamy liczby

szesnastkowe na dwójkowe).

PRZYKŁAD

11010101000,11110101112 = 0110 1010 1000 , 111 0101 1100 =

= 6A8,F5C

Do zamiany liczb dwójkowych na szesnastkowe i odwrotnie przydatna jest następująca tablica.

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

Moduł-

-znak

,

Przecinek niewidoczny - domyślny

Moduł - znak, U2

,

Przecinek niewidoczny - domyślny

Moduł - znak, U2

,

Przecinek niewidoczny - domyślny



Wyszukiwarka