4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24



Podobne dokumenty
PROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

2 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.02 Rok akad. 2011/ / 24

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

PROGRAMOWANIE NISKOPOZIOMOWE. Systemy liczbowe. Pamięć PN.01. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

Ćwiczenie nr 6. Programowanie mieszane

2.1. W architekturze MIPS, na liście instrukcji widzimy dwie instrukcje dotyczące funkcji: .text main: la $a0, string1 # drukuj pierwszy łańcuch

3 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.06 Rok akad. 2011/ / 22

PROGRAMOWANIE NISKOPOZIOMOWE

PROGRAMOWANIE NISKOPOZIOMOWE

Architektura komputerów

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

JAK DZIAŁAJĄ FUNKCJE PODZIAŁ PAMIĘCI

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Assembler w C++ Syntaksa AT&T oraz Intela

Język programowania: Lista instrukcji (IL Instruction List)

Metody Realizacji Języków Programowania

Programowanie niskopoziomowe

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Wstęp do informatyki. Architektura co to jest? Architektura Model komputera. Od układów logicznych do CPU. Automat skończony. Maszyny Turinga (1936)

Praktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu.

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

Organizacja typowego mikroprocesora

Metody Realizacji Języków Programowania

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.01 Rok akad. 2011/ / 27

Struktura i działanie jednostki centralnej

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np.

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Architektura komputerów

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Cel wykładu. Przedstawienie działania exploitów u podstaw na przykładzie stack overflow.

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Architektura komputerów. Asembler procesorów rodziny x86

Procesor ma architekturę rejestrową L/S. Wskaż rozkazy spoza listy tego procesora. bgt Rx, Ry, offset nand Rx, Ry, A add Rx, #1, Rz store Rx, [Rz]

Systemy operacyjne. Wprowadzenie. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Programowanie współbieżne Wykład 2. Iwona Kochańska

Techniki mikroprocesorowe i systemy wbudowane

Programowanie niskopoziomowe

14. Elementy systemu wykonawczego

DYNAMICZNE PRZYDZIELANIE PAMIECI

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Języki i metodyka programowania

Logiczny model komputera i działanie procesora. Część 1.

UTK Można stwierdzić, że wszystkie działania i operacje zachodzące w systemie są sterowane bądź inicjowane przez mikroprocesor.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Podstawy techniki mikroprocesorowej. Dr inż. Grzegorz Kosobudzki p.311a A-5. Tel

Podstawy programowania komputerów

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Języki i metodyka programowania. Wskaźniki i tablice.

Język programowania: Lista instrukcji (IL Instruction List) Wykład w ramach przedmiotu: Sterowniki programowalne Opracował dr inż. Jarosław Tarnawski

Parę słów o przepełnieniu bufora.

Języki i paradygmaty programowania. I. Wprowadzenie

Architektura komputerów. Komputer Procesor Mikroprocesor koncepcja Johna von Neumanna

Programowanie obiektowo zorientowane. Mirosław Głowacki Wykład w języku C++

Rozszerzalne kody operacji (przykład)

Podstawy programowania obiektowego

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Ćwiczenie 3. Konwersja liczb binarnych

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Argumenty wywołania programu, operacje na plikach

ZASADY PROGRAMOWANIA KOMPUTERÓW

Programowanie w asemblerze Aspekty bezpieczeństwa

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Podstawy programowania

Projektowanie. Projektowanie mikroprocesorów

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Wstęp do programowania

dr inż. Konrad Sobolewski Politechnika Warszawska Informatyka 1

Przepełnienie bufora i łańcuchy formatujace

Jerzy Nawrocki, Wprowadzenie do informatyki

Wykład 8: klasy cz. 4

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Mikroprocesor Operacje wejścia / wyjścia

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Programowanie w języku C++ Podstawowe paradygmaty programowania

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Podstawy Programowania. Wykład 1

Jerzy Nawrocki, Wprowadzenie do informatyki

Historia modeli programowania

Tablice, funkcje - wprowadzenie

Wykład 14. Środowisko przetwarzania

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Wstęp do programowania

Java EE produkcja oprogramowania

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Ćwiczenie nr 4. Zasady kodowania podprogramów

Podstawy Programowania Obiektowego

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Podstawy programowania w języku C

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Przydział pamięci. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Transkrypt:

Wymagania proceduralnych języków wysokiego poziomu ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH modele programowe procesorów ASK MP.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 Wymagania proceduralnych języków wysokiego poziomu 2 Pamięć i procesor 3 I II podzbiór x86 4 Literatura c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 1 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24 Wymagania proceduralnych języków wysokiego poziomu Wymagania proceduralnych języków wysokiego poziomu lata 60. XX w.: Algol Fortran lata 80. XX w.: rozwój języków proceduralnych: Pascal, C obecnie: języki obiektowe: C++, C#, Java, Eiffel,... struktura komputera zaprojektowana, by łatwo i wydajnie wykonywać programy tłumaczone z języka wysokiego pozimu na język natywny procesora int x, y; // zmienne globalne char * p; int myadd(int a, int b){ int r; // zmienna lokalna r = a + b; return r;} void cleanup(void){ free(p);} // dealokacja zmiennej dynamicznej int main (void){ p = malloc(1000); x = myadd(20,3); cleanup();} // alokacja // dealokacja c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 3 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 4 / 24

Pamięć i procesor Pamięć i procesor 1 Wymagania proceduralnych języków wysokiego poziomu 2 Pamięć i procesor 3 I II podzbiór x86 4 Literatura - sekcje Kod programu (TEXT) Dane statyczne stałe zmienne zainicjalizowane zmienne niezainicjalizowane (BSS) Dane dynamiczne automatyczne argumenty wywołania procedur zmienne lokalne procedur umieszczane na stosie Dane dynamiczne kontrolowane jawnie tworzone i usuwane umieszczane na stercie Kod współdzielony Dane współdzielone c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 5 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 6 / 24 PC Pamięć i procesor 1 Wymagania proceduralnych języków wysokiego poziomu rejestr przechowujący adres instrukcji, która ma być (jako następna) pobrana z pamięci celem wykonania nextpc adres w obrębie sekcji kodu programu inkrementowany po pobraniu i zdekodowaniu instrukcji w ramach wykonywania instrukcji skoku ładowany nową wartością adresu docelowego skoku niezbędny w maszynie von Neumanna 2 Pamięć i procesor 3 I II podzbiór x86 4 Literatura c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 7 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 8 / 24

wywołanie procedury za pomocą instrukcji skoku ze śladem zapamiętuje wartość nextpc (na stosie) do PC wpisuje adres procedury powrót z procedury za pomocą instrukcji return zdejmuje ze stosu adres powrotny do PC wpisuje adres powrotny stos przechowuje argumenty wywołań adres powrotny zmienne lokalne inne informacje przechowywane w trakcie wykonywania procedury rejestry PC licznik rozkazów A akumulator stos (abstrakcyjny) dostęp do danych za pośrednictwem nazw lub wartości model wysoce nierealistyczny! c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 9 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 10 / 24 Lista instrukcji procesora I Kompilacja dla procesora I load data A = data store data data = A do pamięci add data A += data push data data na stos pop data zdjęcie ze stosu call addr push PC, PC = addr skok ze śladem return pop PC powrót po śladzie create data alokacja miejsca na stosie destroy data usuwanie ze stosu konwencja języka C argumenty funkcji w kolejności odwrotnej argument na stos za pomocą instrukcji PUSH po zapamiętaniu argumentów funkcji na stosie wywołanie funkcji za pomocą CALL adres powrotny na stosie (adres instrukcji występującej jako następna za CALL) ostatnią instrukcją funkcji musi być RETURN c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 11 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 12 / 24

Rezultat kompilacji wywołania funkcji Kompilacja funkcji ; x = myadd(20,3); push 3 push 20 call myadd destroy destroy store x alokacja zmiennych lokalnych dostęp do danych przez nazwy (taki model!) wartość funkcji zwracana przez rejestr A przed zakończeniem podprogramu deallokacja zmiennych lokalnych powrót za pomocą RETURN c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 13 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 14 / 24 I Rezultat kompilacji funkcji I ; prolog ; int r; create r ; ciało ; r = a + b; load a add b store r ; return r; load r ; epilog destroy r return c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 15 / 24 model procesora I wzbogacony o implementację stosu w pamięci dodatkowy rejestr wskaźnika stosu: SP (ang. stack pointer) SP zawiera adres danej ostatnio umieszczonej w pamięci stos pełny schodzący (ang. full descending) rośnie w kierunku malejących adresów operacje na stosie jawnie zdefiniowane w postaci odrębnych instrukcji interpretowanych przez procesor PUSH umieszcza dane na stosie wstępnie dekrementując SP POP zdejmuje dane ze stosu a następnie inkrementuje SP dostęp do parametrów i zmiennych poprzez nazwy koncepcja trudna do implementacji! c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 16 / 24

I Lista instrukcji procesora II procedury load data A = data store data data = A do pamięci add data A += data push data *--SP = data data na stos pop data data = *SP++ zdjęcie ze stosu call addr *--SP = PC, PC = addr skok ze śladem return PC = *SP++ powrót po śladzie create data SP -= sizeof(data) alokacja miejsca na stosie destroy data SP += sizeof(data) usuwanie ze stosu Translacja przykładowego programu identyczna jak w modelu I rozwiązanie problemu dostępu do zmiennych na stosie procedura posługuje się niewielkim fragmentem stosu po przekazaniu sterowania do procedury na stosie znajduje się rekord aktywacji procedury: parametry wywołania ślad powrotu procedura może tworzyć swoje zmienne lokalne umieszczając je na stosie ramka stosu (ang. stack frame) rekord aktywacji procedury zmienne lokalne inne wartości odkładane na stosie w trakcie realizacji procedury c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 17 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 18 / 24 Wskaźnik ramki stosu II podzbiór x86 II podzbiór x86 dodatkowy rejestr procesora FP (ang. frame pointer) wskazuje ramkę bieżącej procedury zawartość FP stała w trakcie wykonywania procedury wywołana procedura musi ustalić zawartość FP zachować poprzednią zawartość FP na stosie wpisać do FP adres aktualnej ramki stosu FP = SP przed instrukcją RETURN procedura odtwarza uprzednią wartość FP w trakcie wykonywania procedury dane umieszczone w ramce stosu są adresowane względem FP akumulator / rejestr wartości: EAX rejestr wskaźnika stosu: ESP wskaźnik ramki: EBP licznik instrukcji: EIP instrukcje (w większości) dwuargumentowe pierwszy argument: docelowy następne: źródłowe dostępne adresowanie rejestrowe pośrednie z przemieszczeniem adres danej jest sumą zawartości rejestru i stałej ze znakiem np. [EBP+4] zawartość komórki pamięci c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 19 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 20 / 24

Lista instrukcji procesora III II podzbiór x86 Rezultat kompilacji wywołania funkcji II podzbiór x86 mov d,s d = s przesłanie danych mov EAX,d EAX = d mov d,eax d = EAX add EAX,d EAX += d push d *--ESP = d d na stos pop d d = *ESP++ zdjęcie ze stosu call addr *--ESP = EIP, EIP = addr skok ze śladem ret EIP = *ESP++ powrót po śladzie sub ESP,size ESP -= size alokacja miejsca na stosie add ESP,size ESP += size usuwanie ze stosu ; x = myadd(20,3); push 3 push 20 call myadd add esp, 8 mov [x], eax c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 21 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 22 / 24 Rezultat kompilacji funkcji II podzbiór x86 Literatura Literatura ; prolog push ebp mov ebp, esp ; int r; sub esp,4 ; ciało ; r = a + b; mov eax, [ebp+8]; add eax, [ebp+12]; mov [ebp-4], eax; ; return r; mov eax, [ebp-4] ; epilog mov esp, ebp pop ebp ret EAX = a EAX += b r = EAX A. S. Tanenbaum, Strukturalna organizacja systemów komputerowych, Helion, 2006. J. Biernat, Architektura komputerów, OWPW, 2005. R. Hyde, Profesjonalne programowanie, Helion, 2005. R. Hyde, Asembler. Sztuka programowania, Helion, 2004. G. Mazur, Programowanie niskopoziomowe, http://wazniak.mimuw.edu.pl. P.A. Carter, PC Assembly Language, http://www.drpaulcarter.com/pcasm/. D.W. Lewis, Między asemblerem a językiem C. Podstawy oprogramowania wbudowanego, RM, 2004. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 23 / 24 c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 24 / 24