Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
PROGRAMOWANIE STRUKTURALNE
Wprowadzenie do programowania w TP. część 4
2
Opracowanie bibliotek programów.
Temat: Opracowanie bibliotek programów.
3
Biblioteki do każdego programu możną dołączyć:
standardowe (crt, graph), własne biblioteki (funkcji i procedur). Bibliotekę dołączamy stosując słowo kluczowe USES
4
UNIT tekst; INTERFACE user crt; procedure WriteXY(x,y:byte; s:string); IMPLEMENTATION begin GotoXY(x,y); write(s); end; end.
5
Użycie biblioteki użytkownika
program dolacz_biblioteke; uses crt,tekst; begin WriteXY(5,5,'Witaj'); readln; end.
6
Dyrektywy kompilatora.
Temat: Dyrektywy kompilatora.
7
Dyrektywy kompilatora
Ponieważ dyrektywy kompilatora, nie są częścią języka programowania, muszą być zapisywane w kodzie źródłowym w taki sposób, aby translator mógł odróżnić i wyodrębnić dyrektywę, Typowym rozwiązaniem jest zapis dyrektyw kompilatora w formie komentarza o własnej składni. Zespół zdefiniowanych dyrektyw stanowi również pewien język.
8
Przykłady pierwszy writeln('Sprawdzimy twoj kompilator.');
{$IFDEF WINDOWS} writeln('Pracujesz pod WINDOWS'); {$ELSE} writeln('Pracujesz pod DOS'); {$ENDIF}
9
Przykład drugi writeln('Podaj liczbe:'); {$I-} readln(liczba); {$I+}
if ioresult=0 then writeln('Twoja liczba to:',liczba) else writeln('Bad! To nie bya liczba!');
10
Zbiór innych dyrektyw {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,R-,S+,V+,X-}
{$M 16384,0,655360}
11
Obsługa urządzeń peryferyjnych.
Temat: Obsługa urządzeń peryferyjnych.
12
Przerwania Przerwanie to procedura obsługi jakiegoś zdarzenia:
sprzętowego, np.: ruchu myszą, wciśnięcia klawisza, zegara, programowego: sprawdzenia czy klawisz został naciśnięty, włączenia jakiegoś trybu graficznego, drukowanie, odczyt/zapis z dysku itp. Przerwań jest 256, ich adresy są umieszczone w pamięci pod adresem 0:0 w tablicy o rozmiarze 1024 bajtów (1 kB).
13
Przerwania Przerwanie Opis 00h Błąd dzielenia przez zero 10h
ustawianie rozdzielczości i trybu 13h obsługa HDD: bezpośredni odczyt, zapis i formatowanie sektorów dysku 19h reset systemu 1Ah czas systemowy - pobieranie i ustawianie 33h obsługa myszy: pokazywanie/ukrywanie, pobieranie zdarzeń, położenia itp. … itd..
14
Temat: Rejestry procesora.
15
Wstęp do rejestrów procesora
Praca procesora polega na pobieraniu z pamięci rozkazów wraz z danymi i wykonywaniu ich. Dane i rozkazy niczym między sobą się nie różnią. Liczba może być traktowana jako kod rozkazu lub wartość innego. W celu szybszego operowania danymi każdy procesor został wyposażony w kilka rejestrów, czyli bajtów pamięci (najszybszej).
16
Procesor 8086 Ponieważ wszystkie procesory 8086 i w górę są ze sobą kompatybilne (przynajmniej powinny), będziemy zajmować się w głównej mierze 8086. Procesor 8086 (i nowsze, jednak te posiadają jeszcze inne rejestry) posiada 14 rejestrów 16- bitowych.
17
Rejestry ogólnego przeznaczenia
AX (ang. Accumulator) Rejestr ten jest wykorzystywany głównie do operacji arytmetycznych i logicznych. Można go traktować jako rejestr 16-bitowy bądź jako dwa rejestry 8-bitowe: AH i AL. AH jest to bardziej znacząca część rejestru , AL mniej znacząca część. BX (ang. Base Registers) Rejestr bazowy, głównie wykorzystywany przy adresowaniu pamięci. Rejestr ten również dzieli się na dwa rejestry 8-bitowe: BH i BL. CX (ang. Counter Registers) Rejestr ten jest bardzo często wykorzystywany jako licznik. Dzieli się na dwa rejestry CH i CL. DX (ang. Data Register) Rejestr danych, wykorzystywany przy operacjach mnożenia i dzielenia, a także do wysyłania i odbierania danych z portów. Dzieli się na DH i DL.
18
Rejestry ogólnego przeznaczenia
SI (ang. Source Index) Rejestr indeksujący pamięć oraz wskazujący obszar z którego przesyła się dane. Zazwyczaj występuje w połączeniu z DS tworząc adres logiczny DS:SI DI (ang. Destination Index) Rejestr indeksujący pamięć oraz wskazujący obszar, do którego przesyłamy dane. Występuje z ES, tworząc adres logiczny ES:DI SP (ang. Stack Pointer) Wskaźnik stosu. BP (ang. Base Pointer) Rejestr używany do adresowania pamięci.
19
Rejestr IP (Instruction Pointer)
Jest jeszcze jeden rejestr, ale jest on nie osiągalny bezpośrednio przez programistę. Zawiera on adres aktualnie wykonywanej instrukcji i może być modyfikowany przez rozkazy sterujące pracą programu.
20
Rejestry segmentowe CS (ang. Code Segment)
Rejestr zawierający segment aktualnie wykonywanego rozkazu. Razem z IP tworzy pełny adres logiczny CS:IP kolejnej instrukcji do wykonania. DS (ang. Data Segment) Rejestr zawierający segment z danymi. ES (ang. Extra Segment) Rejestr zawierający segment np. przy operacjach przesyłania łańcuchów. SS (ang. Stack Segment) Rejestr zawierający segment stosu.
21
Rejestr znaczników Do tego rejestru również nie można odwoływać się bezpośrednio. Do tego celu używa się specjalnych instrukcji. Dla programisty rejestr ten to 9 pojedynczych bitów informujących o stanie procesora, np. by porównać dwie wartości (wykonać polecenie Pascal'owe IF) używa się instrukcji CMP. Część z tych znaczników można ustawiać, a część tylko odczytywać.
22
Temat: Wbudowany asembler.
23
Główne komendy MOV (kopiuj) ADD (dodawanie) SUB (odejmowanie)
MUL (mnożenie) DIV (dzielenie bez znaku) INC (inkrementacja) DEC (dekrementacja)
24
Główne komendy CMP (porównanie) JE (wykonaj skok, jeżeli równe)
POP (zdejmij ze stosu) PUSH (odłóż na stos) CALL (wywołanie funkcji/podprogramu) RET (powrót) LOOP (pętla)
25
Przykład (LPT) program asembler_LPT; uses crt,dos; begin asm
mov dx, $3BC (adres LPT) mov ax, 0 (lub inna wartość) mov dx, ax (kopiuj) end; end.
26
Lokalizacja i usuwanie usterek w programie za pomocą debuggera.
Temat: Lokalizacja i usuwanie usterek w programie za pomocą debuggera.
27
Czym jest debugowanie? Kiedy piszemy program i działa on niepoprawnie (nawet jeśli uważamy, że wszystko zakodowane jest tak, jak powinno być) musimy prześledzić kod, aby dowiedzieć się, gdzie jest przyczyna błędu. Jednym ze sposobów jest wykorzystanie np. procedury writeln , aby śledzić zmienne. Innym znacznie lepszym i profesjonalnym sposobem jest użycie debugera Turbo Pascal.
28
Debuger Aby uruchomić program w trybie debugera naciskamy F7. Każde naciśnięcie klawisza F7 powoduje wykonanie kolejnej linii programu. Podobnie F8, jednak nie wchodzi do procedur i funkcji. Jeśli naciśniemy Alt+F5 można podejrzeć okno programu i/lub powrócić do debugera. Aby kontrolować wartość zmiennej należy w zakładce Debug wybrać opcję Add Watch i podać nazwę zmiennej.
29
Poprawność i złożoność obliczeniowa algorytmów.
Temat: Poprawność i złożoność obliczeniowa algorytmów.
30
Najważniejszymi aspektami algorytmu są jego:
Podstawowym elementem przy rozwiązywaniu zadanego problemu jest dobór algorytmu i struktury danych. Najważniejszymi aspektami algorytmu są jego: poprawność złożoność: czasowa i pamięciowa.
31
Poprawność – własność stopu.
Jednym z podstawowych elementów poprawności algorytmu jest własność stopu: dla poprawnych danych wejściowych algorytm zatrzymuje się w skończonym czasie. Pytanie może odnosić się albo do konkretnych danych wejściowych, albo do wszystkich możliwych danych. Jeśli program zatrzymuje się dla wszystkich danych, to mówimy, że ma własność stopu.
32
Złożoność czasowa W przypadku złożoności czasowej, z reguły wyróżnimy pewną operację dominującą, a czas będziemy traktować jako liczbę wykonanych operacji dominujących. W przypadku sortowania, operacją dominującą jest przeważnie porównanie dwóch elementów, a w przypadku przeglądania drzewa - jedno przejście w drzewie między wierzchołkami. W przypadku algorytmów tekstowych operacją dominującą jest porównanie dwóch symboli.
33
Złożoność pamięciowa Podobnie jak złożoność czasowa jest miarą czasu działania algorytmu, tak złożoność pamięciowa jest miarą ilości wykorzystanej pamięci. Jako tę ilość najczęściej przyjmuje się użytą pamięć. Możliwe jest również obliczanie rozmiaru potrzebnej pamięci fizycznej wyrażonej w bitach lub bajtach.
34
Optymalizacja działania programów.
Temat: Optymalizacja działania programów.
35
Optymalizacja - przykłady
Operacje matematyczne: dobieraj optymalne typy zmiennych; zamiast dzielenia przez 2 lub potęgę dwójki stosu j przesunięcie bitów, np. y:=x div 2 zamień na y:=x shr 1; zamiast dodawać lub odejmować jeden stosu inkrementację lub dekrementację, np. i:=i+1 zamień inc(i),
36
Optymalizacja - przykłady
Operacje logiczne: nie porównuj typu boolean, np. zamiast if z=true … pisz samo if z … na początku warunku zawsze używaj wyrażeń, które wykonują się szybciej, jak w przykładzie: if (a=0)and(a*x+b>0) then … próbuj zamieniać warunki logiczne na działania matematyczne: if (x=1) then x:=2 else x:=1; zamień na x:=3–x;
37
Optymalizacja - przykłady
Optymalizacja kodu: stosuj procedury i funkcje, jednak staraj się unikać wielokrotnego wykonywania tej samej funkcji lepiej zapamiętaj wartość; w pętli unikaj niepotrzebnych obliczeń, zrób co konieczne przed pętlą, pamiętaj w pętli wykona się to wiele razy; jeśli jakieś wyliczenia miałyby wykonać się dwukrotnie, wylicz je raz i zapamiętaj wartość.
38
Ważne Jeśli chcesz, aby twoje algorytmy działały naprawdę szybko, stosuj powyższe zasady oraz myśl . Przede wszystkim dbaj o swój kod w momencie gdy go piszesz. Wiedz, że napisany program będziesz poprawiał, tylko wtedy, gdy będzie to konieczne.
39
Dokumentacja techniczna programu.
Temat: Dokumentacja techniczna programu.
40
Niezbędne elementy dokumentacji
opis plików programu – każdy plik powinien zawierać informacje o autorze, dacie modyfikacji i nazwie, opis zmiennych – każda zmienna powinna zawierać komentarz na jej temat, opis funkcji i procedur, każda funkcja i procedura powinny zawierać opis jej działania, dokładny opis parametrów i wartości przekazywanej, ponadto powinny być omówione np. formaty plików itp.
41
KONIEC
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.