Podstawy Informatyki alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi
Plan wykładu 1 Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy 2 Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie 3 Program wielosegmentowy - przykład Program wielosegmentowy - asemblacja Program wielosegmentowy - konsolidacja 4
Założenia Plan wykładu Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Składnia instrukcji programu: [< etykieta >:] < kod > [< argument >] Opcjonalna etykieta to nazwa zakończona dwukropkiem Kod jest wymagany, może to być kod rozkazu: DOD, ODE, POB, ŁAD, SOB, SOM, STP lub dyrektywa (pseudorozkaz): KON koniec generacji kodu, RPA - rezerwacja pamięci, RST - rezerwacja pamięci dla stałej Opcjonalnym argumentem może być etykieta lub liczba dziesiętna
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład programu samomodyfikującego się Tekst źródłowy programu ET: SOM KONIEC POB ET DOD ST1 ŁAD ET SOB ET KONIEC: STP ST1: RST 1 A: RST 5 RST 67 RST -1 KON
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład programu samomodyfikującego się Tekst źródłowy programu 0 ET: 1 SOM KONIEC 2 POB ET 3 DOD ST1 4 ŁAD ET 5 SOB ET 6 KONIEC: STP 7 ST1: RST 1 8 A: RST 5 9 RST 67 10 RST -1 KON Tablica T1 Rozkaz Kod DOD 001 ODE 010 ŁAD 011 POB 100 SOB 101 SOM 110 STP 111
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład programu samomodyfikującego się Tekst źródłowy programu 0 ET: 1 SOM KONIEC 2 POB ET 3 DOD ST1 4 ŁAD ET 5 SOB ET 6 KONIEC: STP 7 ST1: RST 1 8 A: RST 5 9 RST 67 10 RST -1 KON Tablica T1 Rozkaz Kod DOD 001 ODE 010 ŁAD 011 POB 100 SOB 101 SOM 110 STP 111 Tablica T2 Etykieta Adres ET 00000 KONIEC 00110 ST1 00111 A 01000
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład programu samomodyfikującego się Tekst źródłowy programu 0 ET: 1 SOM KONIEC 2 POB ET 3 DOD ST1 4 ŁAD ET 5 SOB ET 6 KONIEC: STP 7 ST1: RST 1 8 A: RST 5 9 RST 67 10 RST -1 KON Kod maszynowy 100 01000 110 00110 100 00000 001 00111 011 00000 101 00000 111 00000 000 00001 000 00101 010 00011 111 11111 Tablica T1 Rozkaz Kod DOD 001 ODE 010 ŁAD 011 POB 100 SOB 101 SOM 110 STP 111 Tablica T2 Etykieta Adres ET 00000 KONIEC 00110 ST1 00111 A 01000
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład programu samomodyfikującego się Tekst źródłowy programu 0 ET: 1 SOM KONIEC 2 POB ET 3 DOD ST1 4 ŁAD ET 5 SOB ET 6 KONIEC: STP 7 ST1: RST 1 8 A: RST 5 9 RST 67 10 RST -1 KON Kod maszynowy 100 01001 110 00110 100 00000 001 00111 011 00000 101 00000 111 00000 000 00001 000 00101 010 00011 111 11111 Tablica T1 Rozkaz Kod DOD 001 ODE 010 ŁAD 011 POB 100 SOB 101 SOM 110 STP 111 Tablica T2 Etykieta Adres ET 00000 KONIEC 00110 ST1 00111 A 01000
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład programu samomodyfikującego się Tekst źródłowy programu 0 ET: 1 SOM KONIEC 2 POB ET 3 DOD ST1 4 ŁAD ET 5 SOB ET 6 KONIEC: STP 7 ST1: RST 1 8 A: RST 5 9 RST 67 10 RST -1 KON Kod maszynowy 100 01010 110 00110 100 00000 001 00111 011 00000 101 00000 111 00000 000 00001 000 00101 010 00011 111 11111 Tablica T1 Rozkaz Kod DOD 001 ODE 010 ŁAD 011 POB 100 SOB 101 SOM 110 STP 111 Tablica T2 Etykieta Adres ET 00000 KONIEC 00110 ST1 00111 A 01000
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład - sumowanie elementów tablicy PETLA: ET: KONIEC: POB N ODE ST1 SOM KONIEC ŁAD L POB TAB DOD S ŁAD S POB ET DOD ST1 ŁAD ET POB L SOB PETLA STP ST1: RST 1 S: RST 0 N: RST 5 TAB: RST 7 RST 13 RST 21 RST 19 RST 3 L: RPA KON
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład - sumowanie elementów tablicy 0 POB N 1 PETLA: ODE ST1 2 SOM KONIEC 3 ŁAD L 4 ET: POB 16 5 DOD S 6 ŁAD S 7 POB ET 8 DOD ST1 9 ŁAD ET 10 POB L 11 SOB PETLA 12 KONIEC: STP 13 ST1: RST 1 14 S: RST 0 15 N: RST 5 16 TAB: RST 7 17 RST 13 18 RST 21 19 RST 19 20 RST 3 21 L: RPA KON Podgląd zmiennych: S = 0 L =?
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład - sumowanie elementów tablicy 0 POB N 1 PETLA: ODE ST1 2 SOM KONIEC 3 ŁAD L 4 ET: POB 17 5 DOD S 6 ŁAD S 7 POB ET 8 DOD ST1 9 ŁAD ET 10 POB L 11 SOB PETLA 12 KONIEC: STP 13 ST1: RST 1 14 S: RST 0 15 N: RST 5 16 TAB: RST 7 17 RST 13 18 RST 21 19 RST 19 20 RST 3 21 L: RPA KON Podgląd zmiennych: S = 7 L = 4
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład - sumowanie elementów tablicy 0 POB N 1 PETLA: ODE ST1 2 SOM KONIEC 3 ŁAD L 4 ET: POB 18 5 DOD S 6 ŁAD S 7 POB ET 8 DOD ST1 9 ŁAD ET 10 POB L 11 SOB PETLA 12 KONIEC: STP 13 ST1: RST 1 14 S: RST 0 15 N: RST 5 16 TAB: RST 7 17 RST 13 18 RST 21 19 RST 19 20 RST 3 21 L: RPA KON Podgląd zmiennych: S = 20 L = 3
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład - sumowanie elementów tablicy 0 POB N 1 PETLA: ODE ST1 2 SOM KONIEC 3 ŁAD L 4 ET: POB 19 5 DOD S 6 ŁAD S 7 POB ET 8 DOD ST1 9 ŁAD ET 10 POB L 11 SOB PETLA 12 KONIEC: STP 13 ST1: RST 1 14 S: RST 0 15 N: RST 5 16 TAB: RST 7 17 RST 13 18 RST 21 19 RST 19 20 RST 3 21 L: RPA KON Podgląd zmiennych: S = 41 L = 2
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład - sumowanie elementów tablicy 0 POB N 1 PETLA: ODE ST1 2 SOM KONIEC 3 ŁAD L 4 ET: POB 20 5 DOD S 6 ŁAD S 7 POB ET 8 DOD ST1 9 ŁAD ET 10 POB L 11 SOB PETLA 12 KONIEC: STP 13 ST1: RST 1 14 S: RST 0 15 N: RST 5 16 TAB: RST 7 17 RST 13 18 RST 21 19 RST 19 20 RST 3 21 L: RPA KON Podgląd zmiennych: S = 60 L = 1
Przykład programu samomodyfikującego się Przykład - sumowanie elementów tablicy Przykład - sumowanie elementów tablicy 0 POB N 1 PETLA: ODE ST1 2 SOM KONIEC 3 ŁAD L 4 ET: POB 21 5 DOD S 6 ŁAD S 7 POB ET 8 DOD ST1 9 ŁAD ET 10 POB L 11 SOB PETLA 12 KONIEC: STP 13 ST1: RST 1 14 S: RST 0 15 N: RST 5 16 TAB: RST 7 17 RST 13 18 RST 21 19 RST 19 20 RST 3 21 L: RPA KON Podgląd zmiennych: S = 63 L = 0
Makroasembler - założenia Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Makroasembler umożliwia tworzenie własnych instrukcji przez programistę Makroinstrukcje zastępując powtarzające się fragmenty kodu jedną nazwą zwiększają czytelność programu Składnia makroinstrukcji: MAKRO <nazwa> <lista parametrów fromalnych> [ NAZWA LOKALNA <lista nazw lokalnych> ] <rozkazy tworzące makroinstrukcję> KONM
Przykład zastosowania makroinstrukcji Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie MAKRO INC P POB P... DOD ST1... ŁAD P... KONM...... DOD ST1 INC A ŁAD A...... POB B DOD ST1 INC B ŁAD B
Przykład programu z makroinstrukcją Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Zadanie: Policzyć sumę wartości bezwzględnych dwóch komórek pamięci X i Y, a wynik zapisać w komórce pamięci Z. Makroinstrukcja MAKRO ABS Liczba NAZWA LOKALNA Ujemna, Koniec POB Liczba SOM Ujemna SOB Koniec Ujemna: Koniec: KONM ODE Liczba ODE Liczba
Przykład programu z makroinstrukcją Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Zadanie: Policzyć sumę wartości bezwzględnych dwóch komórek pamięci X i Y, a wynik zapisać w komórce pamięci Z. Makroinstrukcja MAKRO ABS Liczba NAZWA LOKALNA Ujemna, Koniec POB Liczba SOM Ujemna SOB Koniec Ujemna: Koniec: KONM ODE Liczba ODE Liczba
Realizacja programu z makroinstrukcją Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Program ABS X ŁAD Z ABS Y DOD Z ŁAD Z STP X: RST -2 Y: RST 3 Z: RPA KON Rozwinięcie programu w PaO POB X SOM Ujemna1 SOB Koniec1 Ujemna1: ODE X ODE X Koniec1: ŁAD Z POB Y SOM Ujemna2 SOB Koniec2 Ujemna2: ODE Y ODE Y Koniec2: DOD Z ŁAD Z STP
Realizacja programu z makroinstrukcją Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Program ABS X ŁAD Z ABS Y DOD Z ŁAD Z STP X: RST -2 Y: RST 3 Z: RPA KON Rozwinięcie programu w PaO POB X SOM Ujemna1 SOB Koniec1 Ujemna1: ODE X ODE X Koniec1: ŁAD Z POB Y SOM Ujemna2 SOB Koniec2 Ujemna2: ODE Y ODE Y Koniec2: DOD Z ŁAD Z STP
Realizacja programu z makroinstrukcją Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Program ABS X ŁAD Z ABS Y DOD Z ŁAD Z STP X: RST -2 Y: RST 3 Z: RPA KON Rozwinięcie programu w PaO POB X SOM Ujemna1 SOB Koniec1 Ujemna1: ODE X ODE X Koniec1: ŁAD Z POB Y SOM Ujemna2 SOB Koniec2 Ujemna2: ODE Y ODE Y Koniec2: DOD Z ŁAD Z STP
Podprogram - założenia Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Podprogramy pozwalają na modularne pisanie programów wymagają specjalnych rozkazów Przekazywanie parametrów między programem a podprogramem dokonuje się poprzez: rejestry procesora wskazany obszar pamięci (zawartość rejestru) stos
Dodatkowe rozkazy Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Skok do podprogramu SDP Ad (WS) 1 WS, (L) (WS), (Ad) L, A Powrót z podprogramu PWR ((WS)) L, A, (WS) + 1 WS Zapis zawartości akumulatora na stos DNS (WS) 1 WS, (Ak) (WS) Odczyt zawartości ze stosu do akumulatora PZS ((WS)) Ak, (WS) + 1 WS
Przykład użycia podprogramu Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Zadanie: Policzyć sumę wartości bezwzględnych dwóch komórek pamięci X i Y, a wynik zapisać w komórce pamięci Z. Rozwiązanie1 - przekazywanie parametrów przez Akumulator: POB X SDP Abs ŁAD Z POB Y SDP Abs DOD Z ŁAD Z STP X: RST -2 Y: RST 3 Z: RPA Abs: Ujemna: TMP: SOM Ujemna PWR ŁAD TMP ODE TMP ODE TMP PWR RPA KON
Przykład użycia podprogramu Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Rozwiązanie2 - przekazywanie parametru do podprogramu przez stos: POB X DNS SDP Abs ŁAD Z POB Y Abs: PZS ŁAD ADRES PZS ŁAD TMP SOM Ujemna DNS SDP Abs DOD Z ŁAD Z Powrot: DRES DNS POB TMP PWR STP Ujemna: ODE TMP X: RST -2 ODE TMP Y: RST 3 ŁAD TMP Z: RPA SOB Powrot TMP: RPA ADRES: RPA KON
Makroasembler - założenia Przykład programu z makroinstrukcją Podprogramy - założenia Przykład użycia podprogramu Makrodefinicje i podprogramy - podsumowanie Makrodefinicje i podprogramy - podsumowanie Użycie makrodefinicji lub podprogramów: zwiększa czytelność programu, usprawnia proces programowania, ułatwia pielęgnację kodu, pozwala na modularne pisanie programów, umożliwia wykorzystanie tego samego kodu w wielu programach. Użycie makroinstrukcji każdorazowo wstawia zdefiniowaną zawartość, symbole lokalne są dostępne tylko wewnątrz makrodefinicji, w programie końcowym tworzone są dla nich unikalne nazwy. Użycie podprogramów zwykle skraca kod ale wydłuża czas jego realizacji.
- założenia Program wielosegmentowy - przykład Program wielosegmentowy - asemblacja Program wielosegmentowy - konsolidacja Podział programu na oddzielne moduły (segmenty) o określonych zadaniach funkcjonalnych tak, aby umożliwić pracę grupową. Każdy moduł jest tworzony i tłumaczony (kompilowany) oddzielnie. Definiuje się więc: punkty wejścia - etykiety, do których będą odwołania z innych segmentów, nazwy zewnętrzne - adresy symboliczne, których etykiety (deklaracje) występują w innym segmencie. Do utworzenia kodu końcowego konieczny jest program łączący (linker).
Przykład zastosowania segmentacji Program wielosegmentowy - przykład Program wielosegmentowy - asemblacja Program wielosegmentowy - konsolidacja Segment 1 WNZ: ET... SOB ET... Segment 2 WPW: WNZ: ET: ET P... DOD P ŁAD TMP... Segment 3 WPW: P... P: RST 2... WPW - wykaz punktów wejścia WNZ - wykaz nazw zewnętrznych
Program wielosegmentowy Program wielosegmentowy - przykład Program wielosegmentowy - asemblacja Program wielosegmentowy - konsolidacja Sumę wartości bezwzględnych X i Y zapisać w komórce Z. Główny.asm WNZ Abs POB X SDP Abs ŁAD Z POB Y SDP Abs DOD Z ŁAD Z STP X: RST -2 Y: RST 3 Z: RPA Funkcje.asm WPW Abs Abs: SOM Ujemna PWR Ujemna: ŁAD TMP ODE TMP ODE TMP PWR TMP: RPA
Program wielosegmentowy - przykład Program wielosegmentowy - asemblacja Program wielosegmentowy - konsolidacja Program wielosegmentowy - asemblacja Główny.asm Główny.obj Nazwy zewnętrzne są wypełniane zerami, ale jest dołączona informacja, gdzie wstawić brakujące adresy. Funkcje.asm Funkcje.obj Dołączona jest informacja o punktach wejścia i ich adresach względnych.
Program wielosegmentowy - przykład Program wielosegmentowy - asemblacja Program wielosegmentowy - konsolidacja Program wielosegmentowy - asemblacja Główny.obj WNZ: Abs 1 4 0: POB 8 1: SDP 0 2: ŁAD 10 3: POB 9 4: SDP 0 5: DOD 10 6: ŁAD 10 7: STP 8: RST -2 9: RST 3 10: RPA Funkcje.obj WPW: Abs 0 0: SOM 2 1: PWR 2: ŁAD 6 3: ODE 6 4: ODE 6 5: PWR 6: RPA
Program wielosegmentowy - przykład Program wielosegmentowy - asemblacja Program wielosegmentowy - konsolidacja Program wielosegmentowy - konsolidacja Główny.obj, Funkcje.obj Główny.exe Uzupełnia się brakujące adresy, moduły są relokowane w pamięci
Program wielosegmentowy - przykład Program wielosegmentowy - asemblacja Program wielosegmentowy - konsolidacja Program wielosegmentowy - konsolidacja Główny.obj WNZ: Abs 1 4 0: POB 8 1: SDP 0 2: ŁAD 10 3: POB 9 4: SDP 0 5: DOD 10 6: ŁAD 10 7: STP 8: RST -2 9: RST 3 10: RPA Funkcje.obj WPW: Abs 0 0: SOM 2 1: PWR 2: ŁAD 6 3: ODE 6 4: ODE 6 5: PWR 6: RPA Program zostaje dołączony od komórki 11, więc wszystkie adresy są przesunięte o 11. Główny.exe 0: POB 8 1: SDP 11 2: ŁAD 10 3: POB 9 4: SDP 11 5: DOD 10 6: ŁAD 10 7: STP 8: RST -2 9: RST 3 10: RPA 11: SOM 13 12: PWR 13: ŁAD 17 14: ODE 17 15: ODE 17 16: PWR 17: RPA
Translacja to tłumaczenie z jednego języka na inny. Translator - program tłumaczący kod programu na kod asemblera lub kod maszynowy. Typy translatorów: interpreter - translator programu powodujący natychmiastowe wykonanie każdej przetłumaczonej sekwencji rozkazów, kompilator - translator przeznaczony do przekształcania programów źródłowych w program wynikowy, zakłada się tu istnienie dwóch procesów: kompilacji i wykonania.
Interpreter vs Kompilator Zalety: łatwo się uruchamia wygodny do usuwania błędów Wady: dłuższy czas wykonywania (wiele instrukcji tłumaczonych jest powtórnie) raz przetłumaczony program może być wielokrotnie wykonywany (na różnych danych, czasami różnych platformach) trudniejszy do wykrywania błędów danych (podczas tłumaczenia wykrywa się tylko błędy składniowe) czasami trudniej się uruchamia
Etapy kompilacji Plan wykładu 1 Analiza programu źródłowego: leksykalna (sprawdzanie symboli), syntaktyczna (sprawdzanie konstrukcji). 2 Synteza kodu wynikowego: generacja kodu, optymalizacja kodu, gospodarka pamięcią.
- założenia Instrukcja podstawienia jest poprawna Wyrażenie arytmetyczne zapisane jest w notacji nawiasowej Znana jest Tablica priorytetów: operator priorytet nazwa symboliczna ˆ 1 POT, / 2 MNO, DZI +, 3 DOD, ODE Wykorzystywany jest stos i zmienne pomocnicze: i wskaźnik szczytu stosu S i zawartość i-tej komórki stosu j numer zmiennej pomocniczej T j adres symboliczny zmiennej pomocniczej
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 2 1 0 i = 1 j = 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 2 1 0 X i = 0 j = 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 2 1 = 0 X i = 1 j = 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 2 ( 1 = 0 X i = 2 j = 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 A 2 ( 1 = 0 X i = 3 j = 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 A 2 ( 1 = 0 X i = 4 j = 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 A 2 ( 1 = 0 X i = 5 j = 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 B 4 3 A 2 ( 1 = 0 X i = 5 j = 1 ŁAD T 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 T 1 2 ( 1 = 0 X i = 3 j = 2 ŁAD T 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 + 3 T 1 2 ( 1 = 0 X i = 4 j = 2 ŁAD T 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 C 4 + 3 T 1 2 ( 1 = 0 X i = 5 j = 2 ŁAD T 1
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 C 4 + 3 T 1 2 ( 1 = 0 X i = 5 j = 2 ŁAD T 1 POB T 1 DOD C ŁAD T 2
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 T 2 2 ( 1 = 0 X i = 3 j = 3 ŁAD T 1 POB T 1 DOD C ŁAD T 2
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 2 T 2 1 = 0 X i = 2 j = 3 ŁAD T 1 POB T 1 DOD C ŁAD T 2
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 2 T 2 1 = 0 X i = 3 j = 3 ŁAD T 1 POB T 1 DOD C ŁAD T 2
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 ( 3 2 T 2 1 = 0 X i = 4 j = 3 ŁAD T 1 POB T 1 DOD C ŁAD T 2
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 A 4 ( 3 2 T 2 1 = 0 X i = 5 j = 3 ŁAD T 1 POB T 1 DOD C ŁAD T 2
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 A 4 ( 3 2 T 2 1 = 0 X i = 6 j = 3 ŁAD T 1 POB T 1 DOD C ŁAD T 2
Przykład Plan wykładu X=(A B+C) (A B) 7 B 6 5 A 4 ( 3 2 T 2 1 = 0 X i = 7 j = 3 ŁAD T 1 POB T 1 DOD C ŁAD T 2
Przykład Plan wykładu X=(A B+C) (A B) 7 B 6 5 A 4 ( 3 2 T 2 1 = 0 X i = 7 j = 3 ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 T 3 4 ( 3 2 T 2 1 = 0 X i = 5 j = 4 ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 T 3 3 2 T 2 1 = 0 X i = 4 j = 4 ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 T 3 3 2 T 2 1 = 0 X i = 4 j = 4 ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD T 4
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 2 T 4 1 = 0 X i = 2 j = 5 ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD T 4
Przykład Plan wykładu X=(A B+C) (A B) 7 6 5 4 3 2 T 4 1 = 0 X i = 2 j = 5 ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD T 4 POB T 4 ŁAD X
przebiega w 3 etapach: 1 Eliminacja sekwencji ŁAD T j POB T j 2 Wykorzystanie przemienności operacji, czyli ŁAD T j zamiana POB X na <op.przem.> X <op.przem.> T j 3 Wykorzystanie wspólnych podwyrażeń - wynik zapisany w zmiennej pomocniczej używany jest w dalszej części kodu
Przykład optymalizacji kodu X = ( A - B + C ) * ( A - B ) ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD T 4 POB T 4 ŁAD X
Przykład optymalizacji kodu X = ( A - B + C ) * ( A - B ) ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD T 4 POB T 4 ŁAD X 1. etap DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD X
Przykład optymalizacji kodu X = ( A - B + C ) * ( A - B ) ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD T 4 POB T 4 ŁAD X 1. etap DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD X 2. etap DOD C ŁAD T 2 MNO T 2 ŁAD X
Przykład optymalizacji kodu X = ( A - B + C ) * ( A - B ) ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD T 4 POB T 4 ŁAD X 1. etap DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD X 2. etap DOD C ŁAD T 2 MNO T 2 ŁAD X 3. etap ŁAD T 1 DOD C ŁAD T 2 POB T 1 MNO T 2 ŁAD X
Przykład optymalizacji kodu X = ( A - B + C ) * ( A - B ) ŁAD T 1 POB T 1 DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD T 4 POB T 4 ŁAD X 1. etap DOD C ŁAD T 2 ŁAD T 3 POB T 2 MNO T 3 ŁAD X 2. etap DOD C ŁAD T 2 MNO T 2 ŁAD X 3. etap ŁAD T 1 DOD C ŁAD T 2 POB T 1 MNO T 2 ŁAD X ŁAD T 1 DOD C MNO T 1 ŁAD X