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