Podstawy Informatyki Języki programowania alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi
Plan wykładu 1 Wprowadzenie Języki programowania 2 Przykład Wczytywanie programu do pamięci Podsumowanie 3 Przykład 1 Przykład 2 4 Pierwszy przebieg asemblacji Drugi przebieg asemblacji
Wprowadzenie Wprowadzenie Języki programowania Joseph Marie Jacquard (1752 1834) francuski tkacz i wynalazca. W 1805 roku zaprojektował krosno tkackie wykorzystujące karty dziurkowane, na których zapisywany był wzór tkaniny do wytworzenia.
Karty dziurkowane Wprowadzenie Języki programowania W 1887r. Herman Hollerith (1860 1929) opatentował własny format karty dziurkowanej użytej podczas spisu ludności USA w 1890 roku. W 1924 r. został prezesem IBM, która wprowadziła najpopularniejszy standard karty: 80 kolumn z pojedynczym znakiem i prostokątne otwory.
Wprowadzenie Języki programowania Zapis algorytmu tak, aby był on zrozumiały dla komputera Języki programowania można dzielić na: zorientowane maszynowo kod maszynowy, rozkazy i adresy argumentów podawane są binarnie języki asemblera, rozkazy i adresy argumentów podawane są w postaci symbolicznej zorientowane problemowo instrukcje symboliczne często są złożone z wielu rozkazów maszynowych
Wprowadzenie Języki programowania Wybrane języki programowania wysokiego poziomu FORTRAN (FORmula TRANslator), 1955, John Code LISP (LISt Processor), 1958, John McCarthy COBOL (COmmon Business Oriented Language), 1959, Grace Hopper (Short Range Committee) ALGOL (ALGOrithmic Language) w wersji 58,60 i 68 BASIC (Beginner s All-purpose Symbolic Instruction Code), 1964, John G. Kemeny, Thomas E. Kurtz Pascal 1970, Niklaus Wirth C 1972, Dennis Ritchie C++ 1980, Bjarne Stroustrup Java 1995, James Gosling (Sun Microsystems) PHP 1995, Rasmus Lerdorf C# 2000, Microsoft
Przykład Wczytywanie programu do pamięci Podsumowanie Program składa się z ciągu rozkazów oraz danych Format rozkazu: 3-bity Kodu rozkazu, 5-bity Adresu argumentu Realizacja programu rozpoczyna się od rozkazu zapisanego w komórce pamięci o adresie 0 Ustalona jest lista rozkazów Kod Treść 001 (Ak) + ((Ad)) Ak 010 (Ak) ((Ad)) Ak 011 (Ak) (Ad) 100 ((Ad)) Ak 101 (Ad) L 110 (Ad) L gdy Z = 1 111 zatrzymanie zegara
Przykład Przykład Wczytywanie programu do pamięci Podsumowanie Zadanie: Dodać do siebie zawartość dwóch kolejnych komórek pamięci (4 i 5), sumę zapisać do komórki następnej (6). Rozwiązanie: Kod Treść 001 (Ak) + ((Ad)) Ak 010 (Ak) ((Ad)) Ak 011 (Ak) (Ad) 100 ((Ad)) Ak 101 (Ad) L 110 (Ad) L gdy Z = 1 111 zatrzymanie zegara (4) Ak 100 0100 (Ak) + (5) Ak 001 0101 (Ak) 6 011 0110 stop 111 0000 pierwszy argument 000 0011 drugi argument 000 0101 wynik 000 0000
Przykład Przykład Wczytywanie programu do pamięci Podsumowanie Zadanie: Dodać do siebie zawartość dwóch kolejnych komórek pamięci (4 i 5), sumę zapisać do komórki następnej (6). Rozwiązanie: Kod Treść 001 (Ak) + ((Ad)) Ak 010 (Ak) ((Ad)) Ak 011 (Ak) (Ad) 100 ((Ad)) Ak 101 (Ad) L 110 (Ad) L gdy Z = 1 111 zatrzymanie zegara (4) Ak 100 0100 (Ak) + (5) Ak 001 0101 (Ak) 6 011 0110 stop 111 0000 pierwszy argument 000 0011 drugi argument 000 0101 wynik 000 0000
Przykład Przykład Wczytywanie programu do pamięci Podsumowanie Zadanie: Dodać do siebie zawartość dwóch kolejnych komórek pamięci (4 i 5), sumę zapisać do komórki następnej (6). Rozwiązanie: Kod Treść 001 (Ak) + ((Ad)) Ak 010 (Ak) ((Ad)) Ak 011 (Ak) (Ad) 100 ((Ad)) Ak 101 (Ad) L 110 (Ad) L gdy Z = 1 111 zatrzymanie zegara (4) Ak 100 0100 (Ak) + (5) Ak 001 0101 (Ak) 6 011 0110 stop 111 0000 pierwszy argument 000 0011 drugi argument 000 0101 wynik 000 0000
Bootstrap Przykład Wczytywanie programu do pamięci Podsumowanie Program pobiera dane z taśmy perforowanej Wymaga jednej komórki pamięci, gdzie przechowywana jest informacja o aktualnym adresie odczytywanego rozkazu z czytnika Koniec programu na taśmie sygnalizuje brak dziurek, czyli 0 Algorytm działania Bootstrap 1 Czytaj rząd taśmy do Ak 2 Jeśli (Ak) = 0, to KONIEC 3 (Ak) (KP) 4 (KP) + 1 (KP), skocz do 1.
Bootstrap Przykład Wczytywanie programu do pamięci Podsumowanie Program pobiera dane z taśmy perforowanej Wymaga jednej komórki pamięci, gdzie przechowywana jest informacja o aktualnym adresie odczytywanego rozkazu z czytnika Koniec programu na taśmie sygnalizuje brak dziurek, czyli 0 Algorytm działania Bootstrap 1 Czytaj rząd taśmy do Ak 2 Jeśli (Ak) = 0, to KONIEC 3 (Ak) (KP) 4 (KP) + 1 (KP), skocz do 1.
Loader Plan wykładu Przykład Wczytywanie programu do pamięci Podsumowanie Potrafi modyfikować program w czasie jego odczytu Posiada zabezpieczenie przed błędami odczytu Każdy rozkaz wraz z adresem argumentu zawiera informację czy adres ten ma być zmodyfikowany względem początku programu Postać bloku danych dla Loadera: 1 Początek bloku 2 Długość bloku 3 Adres pierwszej komórki 4 Treść programu w postaci binarnej 5 Suma kontrolna 6 Koniec bloku
Loader Plan wykładu Przykład Wczytywanie programu do pamięci Podsumowanie Potrafi modyfikować program w czasie jego odczytu Posiada zabezpieczenie przed błędami odczytu Każdy rozkaz wraz z adresem argumentu zawiera informację czy adres ten ma być zmodyfikowany względem początku programu Postać bloku danych dla Loadera: 1 Początek bloku 2 Długość bloku 3 Adres pierwszej komórki 4 Treść programu w postaci binarnej 5 Suma kontrolna 6 Koniec bloku
Podsumowanie Przykład Wczytywanie programu do pamięci Podsumowanie Zalety kodu maszynowego: Program nie wymaga tłumaczenia Może być zrealizowany bezpośrednio po wprowadzeniu do pamięci Małe wymagania na pamięć Wady kodu maszynowego: Konieczność operowania na kodach binarnych rozkazów Konieczność wyliczania adresów komórek Bardzo trudna modyfikacja programu Rozwiązanie dedykowane konkretnemu procesorowi
Podsumowanie Przykład Wczytywanie programu do pamięci Podsumowanie Zalety kodu maszynowego: Program nie wymaga tłumaczenia Może być zrealizowany bezpośrednio po wprowadzeniu do pamięci Małe wymagania na pamięć Wady kodu maszynowego: Konieczność operowania na kodach binarnych rozkazów Konieczność wyliczania adresów komórek Bardzo trudna modyfikacja programu Rozwiązanie dedykowane konkretnemu procesorowi
Przykład 1 Przykład 2 Język asemblera ma zastąpić: kody binarne łatwymi do zapamiętania mnemonikami rozkazów adresy absolutne adresami symbolicznymi, czyli etykietami 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 Niedopuszczalne jest wystąpienie w treści programu identycznych nazw etykiet Adres symboliczny argumentu musi mieć odpowiednik w etykiecie
Przykład 1 Przykład 2 Język asemblera ma zastąpić: kody binarne łatwymi do zapamiętania mnemonikami rozkazów adresy absolutne adresami symbolicznymi, czyli etykietami 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 Niedopuszczalne jest wystąpienie w treści programu identycznych nazw etykiet Adres symboliczny argumentu musi mieć odpowiednik w etykiecie
Przykład 1 Przykład 2 Język asemblera ma zastąpić: kody binarne łatwymi do zapamiętania mnemonikami rozkazów adresy absolutne adresami symbolicznymi, czyli etykietami 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 Niedopuszczalne jest wystąpienie w treści programu identycznych nazw etykiet Adres symboliczny argumentu musi mieć odpowiednik w etykiecie
Przykład 1 Przykład 1 Przykład 2 Zadanie: Dodać do siebie zawartość dwóch kolejnych komórek pamięci (4 i 5), sumę zapisać do komórki następnej (6). Rozwiązanie: (4) Ak 100 0100 POB Arg1 (Ak) + (5) Ak 001 0101 DOD Arg2 (Ak) 6 011 0110 ŁAD S stop 111 0000 STP pierwszy argument 000 0011 Arg1: RST 3 drugi argument 000 0101 Arg2: RST 5 wynik 000 0000 S: RPA KON
Przykład 1 Przykład 1 Przykład 2 Zadanie: Dodać do siebie zawartość dwóch kolejnych komórek pamięci (4 i 5), sumę zapisać do komórki następnej (6). Rozwiązanie: (4) Ak 100 0100 POB Arg1 (Ak) + (5) Ak 001 0101 DOD Arg2 (Ak) 6 011 0110 ŁAD S stop 111 0000 STP pierwszy argument 000 0011 Arg1: RST 3 drugi argument 000 0101 Arg2: RST 5 wynik 000 0000 S: RPA KON
Przykład 1 Przykład 1 Przykład 2 Zadanie: Dodać do siebie zawartość dwóch kolejnych komórek pamięci (4 i 5), sumę zapisać do komórki następnej (6). Rozwiązanie: (4) Ak 100 0100 POB Arg1 (Ak) + (5) Ak 001 0101 DOD Arg2 (Ak) 6 011 0110 ŁAD S stop 111 0000 STP pierwszy argument 000 0011 Arg1: RST 3 drugi argument 000 0101 Arg2: RST 5 wynik 000 0000 S: RPA KON
Przykład 2 Przykład 1 Przykład 2 Zadanie: Wyznaczyć resztę z dzielenia zawartości komórki pamięci A przez zawartość komórki pamięci B. Wynik zapisać do komórki C. Rozwiązanie:
Przykład 2 Przykład 1 Przykład 2 Zadanie: Wyznaczyć resztę z dzielenia zawartości komórki pamięci A przez zawartość komórki pamięci B. Wynik zapisać do komórki C. Rozwiązanie:
Przykład 2 Przykład 1 Przykład 2 Zadanie: Wyznaczyć resztę z dzielenia zawartości komórki pamięci A przez zawartość komórki pamięci B. Wynik zapisać do komórki C. Rozwiązanie: POB A PETLA: ODE B SOM UJEMNA SOB PETLA UJEMNA: DOD B ŁAD C STP A: RST 35 B: RST 7 C: RPA KON
Pierwszy przebieg asemblacji Drugi przebieg asemblacji Asembler - program tłumaczący język symboliczny na kod maszynowy Program asemblera realizuje tłumaczenie w dwóch etapach: 1 Utworzenie tablicy etykiet i przyporządkowanie im adresów fizycznych 2 Mnemoniki rozkazów i etykiety zostają zastąpione kodami binarnymi Każdy etap (przebieg, przejście) wymaga czytania programu źródłowego od początku do końca Do tłumaczenia potrzebne są dwie tablice: 1 Tablica T1 (stała) zawiera kody binarne odpowiadające mnemonikom rozkazów 2 Tablica T2 (tworzona w pierwszym etapie asemblacji) zawiera kody binarne odpowiadające adresom fizycznym etykiet
Pierwszy przebieg asemblacji Drugi przebieg asemblacji Pierwszy przebieg asemblacji - Algorytm
Przykład 2 - Utworzenie tablicy T2 Pierwszy przebieg asemblacji Drugi przebieg asemblacji 0 POB A 1 PETLA: ODE B 2 SOM UJEMNA 3 SOB PETLA 4 UJEMNA: DOD B 5 ŁAD C 6 STP 7 A: RST 35 8 B: RST 7 9 C: RPA 10 KON Tablica T2 etykieta adres fizyczny PETLA 00001 UJEMNA 00100 A 00111 B 01000 C 01001
Przykład 2 - Utworzenie tablicy T2 Pierwszy przebieg asemblacji Drugi przebieg asemblacji 0 POB A 1 PETLA: ODE B 2 SOM UJEMNA 3 SOB PETLA 4 UJEMNA: DOD B 5 ŁAD C 6 STP 7 A: RST 35 8 B: RST 7 9 C: RPA 10 KON Tablica T2 etykieta adres fizyczny PETLA 00001 UJEMNA 00100 A 00111 B 01000 C 01001
Pierwszy przebieg asemblacji Drugi przebieg asemblacji Drugi przebieg asemblacji - Algorytm
Pierwszy przebieg asemblacji Drugi przebieg asemblacji Przykład 2 - Generacja kodu wynikowego Tekst źródłowy programu POB A PETLA: ODE B SOM UJEMNA SOB PETLA UJEMNA: DOD B ŁAD C STP A: RST 35 B: RST 7 C: RPA KON Kod maszynowy 100 00111 010 01000 110 00100 101 00001 001 01000 011 01001 111 00000 001 00011 000 00111 000 00000 Tablica T1 Rozkaz Kod DOD 001 ODE 010 ŁAD 011 POB 100 SOB 101 SOM 110 STP 111 Tablica T2 Etykieta Adres PETLA 00001 UJEMNA 00100 A 00111 B 01000 C 01001
Pierwszy przebieg asemblacji Drugi przebieg asemblacji Przykład 2 - Generacja kodu wynikowego Tekst źródłowy programu POB A PETLA: ODE B SOM UJEMNA SOB PETLA UJEMNA: DOD B ŁAD C STP A: RST 35 B: RST 7 C: RPA KON Kod maszynowy 100 00111 010 01000 110 00100 101 00001 001 01000 011 01001 111 00000 001 00011 000 00111 000 00000 Tablica T1 Rozkaz Kod DOD 001 ODE 010 ŁAD 011 POB 100 SOB 101 SOM 110 STP 111 Tablica T2 Etykieta Adres PETLA 00001 UJEMNA 00100 A 00111 B 01000 C 01001
Pierwszy przebieg asemblacji Drugi przebieg asemblacji Przykład 2 - Generacja kodu wynikowego Tekst źródłowy programu POB A PETLA: ODE B SOM UJEMNA SOB PETLA UJEMNA: DOD B ŁAD C STP A: RST 35 B: RST 7 C: RPA KON Kod maszynowy 100 00111 1 010 01000 1 110 00100 1 101 00001 1 001 01000 1 011 01001 1 111 00000 0 001 00011 0 000 00111 0 000 00000 0 informacja dla Loadera Tablica T1 Rozkaz Kod DOD 001 ODE 010 ŁAD 011 POB 100 SOB 101 SOM 110 STP 111 Tablica T2 Etykieta Adres PETLA 00001 UJEMNA 00100 A 00111 B 01000 C 01001
Pierwszy przebieg asemblacji Drugi przebieg asemblacji Przykład 2 - Generacja kodu wynikowego Tekst źródłowy programu POB A PETLA: ODE B SOM UJEMNA SOB PETLA A: RST 35 B: RST 7 C: RPA UJEMNA: DOD B ŁAD C STP KON Kod maszynowy 100 00111 010 01000 110 00100 101 00001 001 00011 000 00111 000 00000 001 01000 011 01001 111 00000 Tablica T1 Rozkaz Kod DOD 001 ODE 010 ŁAD 011 POB 100 SOB 101 SOM 110 STP 111 Tablica T2 Etykieta Adres PETLA 00001 UJEMNA 00100 A 00111 B 01000 C 01001