Rejestry procesora ROM, RAM In/Out CPU
Transkrypt
Rejestry procesora ROM, RAM In/Out CPU
tƐƚħƉĚŽ/ŶĨŽƌŵĂƚLJŬŝ WƌŽŐƌĂŵŽǁĂŶŝĞŬŽŵƉƵƚĞƌſǁW Cezary Bolek [email protected] Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki WƌŽŐƌĂŵŬŽŵƉƵƚĞƌĂ Komputer jest maszyną wykonującą polecenia odczytywane z pamięci operacyjnej (instrukcje procesora – kod programu) Instrukcje procesora dotyczą prostych operacji na rejestrach wewnętrznych oraz odczycie i zapisie komórek pamięci. Interakcja maszyny z uŜytkownikiem odbywa się poprzez urządzenia we/wy, które zamieniają sygnały wysyłane przez człowieka i zamieniają je na postać cyfrową i odwrotnie. CPU ROM, RAM Rejestry procesora In/Out Wstęp do Informatyki ALU [email protected] 1 :ħnjLJŬŵĂƐnjLJŶŽǁLJ Instrukcja procesora (kod programu) w pamięci zapisane są w postaci liczb dwójkowych. Zapis programu za pomocą liczb, które mogą być bezpośrednio wykonywane przez maszyną nazywa się językiem maszynowym. Pamięć operacyjna ROM + RAM np. 01001000 00001000 11001010 00001011 11111110 48h 08h CAh 0Bh FEh ..., 48, 08, CA, 0B, FE, ... Pisanie programów w języku maszynowym przez człowieka jest bardzo Ŝmudne, ale było stosowane do programowania komputerów I i II generacji. Wstęp do Informatyki [email protected] :ħnjLJŬĂƐĞŵďůĞƌĂ KaŜdej instrukcji procesora (która moŜe zajmować jeden lub więcej bajtów) moŜna przypisać skrót literowy (mnemonik), a kaŜdemu rejestrowi nazwę. Zapis programu za pomocą mnemoników nazywa się językiem asemblera, który jest znacznie łatwiejszy do opanowania przez człowieka. np. 48h 08h CAh 0Bh FEh ... MOV BL,8 ADD BL,B INC BL ... MOV BL,8 ADD BL,B INC BL Program zapisany w języku asemblera nie moŜe być wykonywany bezpośrednio przez komputer i wymaga tłumaczenia na kod maszynowy za pomocą programu zwanego asemblerem. PoniewaŜ istnieje ścisły związek pomiędzy mnemonikami a instrukcjami maszynowymi, proces tłumaczenia (asemblacja) jest stosunkowo prosty. Proces odwrotny nazywa się deasemblacją (za pomocą disasemblera). ... MOV BL,8 ADD BL,B INC BL ... Wstęp do Informatyki Asembler ..., 48, 08, CA, 0B, FE, ... [email protected] 2 :ħnjLJŬŝǁLJƐŽŬŝĞŐŽƉŽnjŝŽŵƵ Program zapisany w języku wysokiego poziomu charakteryzuje: • Abstrakcja danych – programista operuje na „zmiennych” bez konieczności organizacji wykorzystania rejestrów procesora i lokalizacji liczb w pamięci • ZłoŜone struktury danych – proste jest deklarowanie i korzystanie ze złoŜonych struktur liczb jak np. tablice (macierze), stosy, kolejki, drzewa, etc. • Zaawansowane konstrukcje sterujące – określenie kolejności wykonywania programu realizuje się z pomocą intuicyjnych konstrukcji warunkowych typu IF-THEN-ELSE, FOR, DO-WHILE, etc. • Dowolność układu zapisu programu – programista moŜe zapisywać program w postaci najbardziej dla niego czytelnej i zgodnej z upodobaniami. ... for (i=1; i<10, i++) { n=10+x*2 }; ... ... for (i=1; i<10, i++) { n=10+x*2 }; ... Wstęp do Informatyki ... for (i=1; i<10, i++) { n=10+x*2 }; ... [email protected] <ŽŵƉŝůĂĐũĂƉƌŽŐƌĂŵſǁ Programy napisane w językach wysokiego poziomu muszą być tłumaczone na język maszynowy za mocą programu zwanego kompilatorem, a proces tłumaczenia nazywa się kompilacją. ... for (i=1; i<10, i++) { n=10+x*2 }; ... Kompilator ..., 48, 08, CA, 0B, FE, ... ... MOV BL,8 ADD BL,B INC BL ... Kompilacja programów jest zadaniem bardzo złoŜonym, ze względu na mnogość moŜliwości realizacji zadania w języku asemblera. Kompilatory są jednymi z najbardziej zaawansowanych i złoŜonych programów dla komputerów osobistych. X = X + Y*Z Wstęp do Informatyki MOV MOV MOV MUL ADD MOV AL,X BL,Y CL,Z CL,BL AL,CL X,AL lub MOV MOV MUL MOV ADD MOV AL,Y BL,Z AL,BL BL,X AL,BL X,AL lub MOV MUL ADD MOV AL,Z AL,Y CL,X X,AL [email protected] 3 <ŽŵƉŝůĂƚŽƌLJŽƉƚLJŵĂůŝnjƵũČĐĞ Kompilator optymalizujący (optimizing compiler) – kompilator, który generuje kod maszynowy optymalny pod pewnym względem, np.szybkości działania lub rozmiaru kodu, korygując program, tak aby nie wpływało to na wyniki jego działania. Optymalizacja programu moŜliwa jest równieŜ poprzez optymalne wykorzystanie zasobów procesora (specyficzne instrukcje, tryby adresowania, wykorzystanie rejestrów wewnętrznych, etc.) FOR I:=1 TO 10 DO BEGIN FOR J:=1 TO 10 DO BEGIN A=I / 100; B:=A + J / 100; WRITE(B); END END FOR I:=1 TO 10 DO BEGIN A=I / 100; FOR J:=1 TO 10 DO BEGIN B:=A + J / 100; WRITE(B) END END oryginalny fragment programu przyspieszenie poprzez eliminację niepotrzebnych obliczeń zmiennej A Wstęp do Informatyki [email protected] <ŽŵƉŝůĂƚŽƌLJƐŬƌŽƑŶĞ Kompilator skrośny (cross-compiler) – kompilator, który generuje kod maszynowy na inny procesor, niŜ ten na którym jest uruchomiony. Kompilatory skrośne uŜywa się do tworzenia oprogramowania dla systemów komputerowych, w których jest to niemoŜliwe ze względu na rozmiary, zastosowanie czy wygodę pracy: telefony komórkowe palmtopy, notesy elektroniczne, gry elektroniczne, etc. sprzęt Audio-Video komputery wbudowane (sterowniki maszyn, ...) np. JavaME (micro edition) – kompilator programów w języku Java na telefony komórkowe (java.sun.com) Wstęp do Informatyki [email protected] 4 ĞďƵŐŐŝŶŐ Debugging oznacza proces wykrywania błędów w skompilowanych programach w trakcie ich nadzorowanego uruchamiania. Nadzorowane uruchamianie programów polega na wykonywaniu poszczególnych linii programu (praca krokowa) i sprawdzaniu wartości zmiennych w dowolnym momencie wykonywania. Program do nadzorowanego uruchamiania nazywa się Debugger’em Wstęp do Informatyki [email protected] ŝďůŝŽƚĞŬŝ Biblioteka jest to zebrana razem grupa podprogramów realizujących określone zadania np. funkcje matematyczne. Podprogramy biblioteczne, skompilowane do kodu maszynowego, dołączane są do programu uŜytkownika podczas jego kompilacji. Proces łączenia plików bibliotecznych ze skompilowanym programem uŜytkownika nazywa się konsolidacją (linking). Podprogramy biblioteczne Program w języku wysokiego poziomu korzystający z funkcji bibliotecznych Wstęp do Informatyki Kompilator Konsolidator ... x=b*c a=sin(x) ... instr1 instr2 CALL SIN instr4 instr5 STOP Biblioteka funkcji matemat. instr1 instr2 instr3 powrót Wykonywalny program w języku maszynowym Kompletny skonsolidowany program [email protected] 5 WƌnjĞŶŽƑŶŽƑđ ŽƉƌŽŐƌĂŵŽǁĂŶŝĂ Oprogramowanie przenośne (portable) to takie, które moŜna skompilować i uruchomić pod róŜnymi systemami operacyjnymi, a jego działanie pozostaje niezmienione (np. Acrobat Reader, Netscape, ...) Programy w językach wysokiego poziomu są zwykle przenośne, o ile nie koncentrują się na zaawansowanym wykorzystaniu urządzeń we/wy. Problem przenośności oprogramowania sprowadza się zwykle do istnienia przenośnych bibliotek dla języków wysokiego poziomu. np. www.fox-toolkit.org wieloplatformowa biblioteka graficzna dla języka C++ Wstęp do Informatyki [email protected] <ŽŵƉŝůĂĐũĂĂŝŶƚĞƌƉƌĞƚĂĐũĂ Wykonanie programu napisanego w języku wysokiego poziomu moŜe być realizowane na dwa sposoby: 1. kompilacja całego programu, a następnie jego uruchomienie 2. odczytywanie pojedynczych instrukcji języka, kompilacja w locie i natychmiastowe wykonywanie – tzw. interpretacja (przez interpreter) (nigdzie nie jest tworzony kod maszynowy całego programu) Języki programowania moŜna podzielić na dwie kategorie, w zaleŜności od sposobu wykonywania: 1. języki kompilowane: Fortran, C, C++, Pascal, Delphi, Java (częściowo) 2. języki interpretowane: Basic, Java (częściowo), języki skryptowe: Perl, Tcl Zalety kompilacji: duŜa szybkość wykonywania programów, moŜliwość wykonywania się programów bez wspomagania innego oprogramowania. Zalety interpretacji: szybkie testowanie i modyfikowanie programów (brak etapu kompilacji), moŜliwość testowanie niekompletnych programów, znaczna przenośność oprogramowania, istnienie programu tylko w wersji źródłowej. Wstęp do Informatyki [email protected] 6 :ħnjLJŬŝƉƌŽŐƌĂŵŽǁĂŶŝĂ Wstęp do Informatyki [email protected] W^> ũħnjLJŬĂŬĂĚĞŵŝĐŬŝ PASCAL: początek lat 70-tych, Niklaus Wirth język o duŜych walorach dydaktycznych, idealny do nauki programowania intuicyjne konstrukcje sterujące, ułatwiające programowanie strukturalne moŜliwość uŜywania róŜnorodnych struktur danych moŜliwości definiowania i zagnieŜdŜania procedur i funkcji jasne zasady zasięgu zmiennych moŜliwość deklarowania własnych typów danych bogaty zestaw procedur bibliotecznych współczesne języki dla środowisk graficznych oparte na składni języka Pascal: Delphi http://www.freepascal.org Wstęp do Informatyki [email protected] 7 W^>Ͳ ƐƚƌƵŬƚƵƌĂƉƌŽŐƌĂŵƵ Najprostsza postać programu w języku PASCAL: PROGRAM nazwa(input,output); CONST stala = wartosc; VAR zmienna : typ; ... FUNCTION nazwa(... ... PROCEDURE nazwa(... ... BEGIN instrukcja; ... instrukcja; END. nagłówek programu deklaracje zmiennych uŜywanych w programie definicje funkcji i procedur tekst programu, składający się z instrukcji oddzielonych znakami średnika Słowa kluczowe: słowa o specjalnym znaczeniu w języku programowania, które nie mogą być uŜywane w innych celach, np. jako nazwy zmiennych. Wstęp do Informatyki [email protected] W^>Ͳ ƚLJƉLJĚĂŶLJĐŚ Podstawowe typy danych w języku PASCAL: integer typ liczb całkowitych zakres (typowy): -32768 ... +32767 (liczby 16 bitowe w kodzie U2) real typ liczb rzeczywistych zakres (typowy): -1.2e-38 ... 3.4e+38 (liczby 32-bitowe IEEE754) boolean typ logiczny tylko dwie wartości: prawda – fałsz (true – false) char typ znakowy wartości są znakami dostępnymi w systemie komputerowym (8-bitów) np. VAR index: integer; pole : real; litera: char; koniec: boolean; Wstęp do Informatyki [email protected] 8 W^> ŬŽŶƐƚƌƵŬĐũĞƐƚĞƌƵũČĐĞ sekwencja BEGIN s1 s1; s2; ... sn; s2 END sn grupowanie za pomocą BEGIN-END pozwala traktować sekwencję instrukcji jako pojedynczą instrukcję i jest konieczne tam, gdzie w programie moŜe wystąpić tylko jedna instrukcja Wstęp do Informatyki [email protected] W^>Ͳ ŬŽŶƐƚƌƵŬĐũĞƐƚĞƌƵũČĐĞ selekcja IF c THEN s1 ELSE s2; c s1 s2 W konstrukcji IF-THEN-ELSE wykonana zostanie tylko jedna z dwóch instrukcji s1 lub s2, w zaleŜności od spełnienia warunku c. IF c THEN BEGIN c s1; s2 s1 s3 END ELSE s3; s2 Po słowach kluczowych THEN i ELSE moŜe wystąpić tylko jedna instrukcja, jeśli ma ich być więcej naleŜy zastosować grupowanie instrukcji BEGIN-END Wstęp do Informatyki [email protected] 9 W^> Ͳ ŬŽŶƐƚƌƵŬĐũĞƐƚĞƌƵũČĐĞ selekcja wielokrotna CASE c OF wartosc_1 : s1; wartosc_2 : s2; ... wartosc_n : sn; END c s1 s2 sn Konstrukcja CASE-OF-END umoŜliwia wykonanie tylko jednej z podanych instrukcji s1,s2,..,sn w zaleŜności od wartości jaką przyjmuje wyraŜenie c. Wstęp do Informatyki [email protected] W^>Ͳ ŬŽŶƐƚƌƵŬĐũĞƐƚĞƌƵũČĐĞ cykle s T WHILE c DO s; c N REPEAT s ... UNTIL c; s N c T Wstęp do Informatyki Instrukcja s jest wykonywana dopóki spełniony jest warunek c. Po słowie kluczowym DO moŜe wystąpić tylko jedna instrukcja, jeśli ma ich być więcej naleŜy zastosować grupowanie instrukcji BEGIN-END Instrukcja s jest wykonywana do momentu spełnienia warunku c. [email protected] 10 W^>Ͳ ŬŽŶƐƚƌƵŬĐũĞƐƚĞƌƵũČĐĞ cykl i ← Start FOR i=Start TO Stop DO s; i ← i+1 s T i ≤ Stop N Wstęp do Informatyki Cykl FOR-TO-DO słuŜy do konstruowania cykli o dokładnie określonej licznie wykonań. Po słowie kluczowym DO moŜe wystąpić tylko jedna instrukcja, jeśli ma ich być więcej naleŜy zastosować grupowanie instrukcji BEGIN-END [email protected] W^>ƉƌnjLJŬųĂĚ read, write, writeln – funkcje PROGRAM kolo(input,output); biblioteczne realizujące CONST odczyt z klawiatury i Pi = 3.1415926; drukowanie na monitorze. VAR pole : real; obwod: real; r: real; {promien} BEGIN write(‘Podaj promien kola r=‘); read(r); pole:= Pi*r*r; obwod:=2*Pi*r; writeln(‘Pole wynosi=‘,pole); writeln(‘Obwod wynosi=‘,obwod); END. Wstęp do Informatyki [email protected] 11 &ƵŶŬĐũĞŝƉƌŽĐĞĚƵƌLJ Funkcje i procedury umoŜliwiają modułową realizację programu. Funkcja to moduł programowy, który moŜe przyjmować wiele argumentów (danych wejściowych), ale zwraca tylko jedną wartość jako wynik swojego działania. Procedura to moduł programowy, który moŜe przyjmować wiele argumentów (danych wejściowych), ale nie zwraca Ŝadnego wyniku i moŜe być uŜywana jak normalna instrukcja języka. Wstęp do Informatyki [email protected] &ƵŶŬĐũĞͲ ƉĂƌĂŵĞƚƌLJ PROGRAM kolo(input,output); Parametry formalne są CONST nazwami zmiennych Pi = 3.1415926; uŜywanymi w deklaracji funkcji VAR Parametr formalny p : real; funkcji (a) r : real; Określenie typu zwracanego wyniku funkcji Definicja funkcji pole FUNCTION pole(a:real) : real; BEGIN pole:= Pi*a*a; Parametr aktualny END; funkcji (r) wywołanie funkcji pole Wstęp do Informatyki BEGIN write(‘Podaj promien kola r=‘); read(r); p:= pole(r); writeln(‘Pole wynosi=‘,p); END. Parametry aktualne są zmiennymi lub liczbami w chwili uŜycie funkcji. Są one podstawiane pod parametry formalne w czasie wykonywania. [email protected] 12 WƌŽĐĞĚƵƌLJͲ ƉĂƌĂŵĞƚƌLJ PROGRAM kolo(input,output); CONST Pi = 3.1415926; VAR r : real; Parametry formalne są nazwami zmiennych uŜywanymi w deklaracji procedury Definicja funkcji pole FUNCTION pole(a:real) : real; BEGIN Parametr formalny pole:= Pi*a*a; procedury (b) END; Definicja procedury drukuj PROCEDURE drukuj(b:real); BEGIN writeln(‘Pole wynosi=‘,b); END; wywołanie procedury drukuj BEGIN write(‘Podaj promien kola r=‘); read(r); drukuj( pole(r) ); END. Parametr aktualny procedury (jest nim wynik funkcji pole) Wstęp do Informatyki Procedura nie zwraca Ŝadnego wyniku Parametry aktualne są zmiennymi lub liczbami w chwili uŜycie procedury. Są one podstawiane pod parametry formalne w czasie wykonywania. [email protected] WƌnjĞŬĂnjLJǁĂŶŝĞƉĂƌĂŵĞƚƌſǁ Przekazywanie parametrów moŜliwe jest na dwa sposoby: przez wartość – procedura (funkcja) otrzymuje kopie zmiennych i nie moŜe zmienić wartości oryginalnej zmiennej przez zmienną (wskaźnik) – procedura (funkcja) otrzymuje oryginalną zmienną (wskazanie na zmienną) i moŜe zmienić wartości oryginalnej zmiennej (co oznacza się słowem kluczowym var przed parametrem formalnym) VAR x : real; VAR x : real; PROCEDURE F(x:real); BEGIN x:= 1; END PROCEDURE F(var z:real); BEGIN z:= 1; END x:= 0; F(x); write(x); → wydrukuje wartość 0 x:= 0; F(x); write(x); → wydrukuje wartość 1 Wstęp do Informatyki [email protected] 13