ISA szimulátor objektum-orientált modell (C++)

Hasonló dokumentumok
Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Pénzügyi algoritmusok

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Felhasználó által definiált adattípus

Programozási nyelvek Java

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

1. Alapok. Programozás II

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

3. Osztályok II. Programozás II

Programozás II gyakorlat. 6. Polimorfizmus

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Programozás II gyakorlat. 8. Operátor túlterhelés

Kivételkezelés a C++ nyelvben Bevezetés

Globális operátor overloading

4. Öröklődés. Programozás II

Bevezetés a programozásba Előadás: A const

Programozás II. 2. Dr. Iványi Péter

Programozás C és C++ -ban

Osztály és objektum fogalma

500. CC Megoldó Alfréd CC 500.

500. AA Megoldó Alfréd AA 500.

C++ programozási nyelv Konstruktorok-destruktorok

Programozás II. 4. Dr. Iványi Péter

128. AA Megoldó Alfréd AA 128.

117. AA Megoldó Alfréd AA 117.

.AA Megoldó Alfréd AA.

Programozási nyelvek Java

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Programozás C++ -ban

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Osztályok. 4. gyakorlat

és az instanceof operátor

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Java és web programozás

#include <iostream> using namespace std; // struct macska is lehetne class macska { public: int kor; int suly; }; void main() { macska cirmi;

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Programozási nyelvek Java

Fejlett programozási nyelvek C++ Iterátorok

Származtatási mechanizmus a C++ nyelvben

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

OOP: Java 8.Gy: Abstract osztályok, interfészek

1000.AA Megoldo Alfréd 1000.A

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Kivételek, kivételkezelés a C++ nyelvben

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

JAVA PROGRAMOZÁS 2.ELŐADÁS

ELTE SAP Excellence Center Oktatóanyag 1

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Programozás C++ -ban 2007/4

1.AA MEGOLDÓ BERCI AA 1.

C++ programok fordítása

Tartalom C áttekintés C++ áttekintés Objektumok közötti kommunikáció. Budapesti Műszaki és Gazdaságtudományi Egyetem. C / C++ áttekintés

Pénzügyi algoritmusok

Elemi Alkalmazások Fejlesztése II.

Bevezetés a Python programozási nyelvbe

Már megismert fogalmak áttekintése

C++ Standard Template Library (STL)

500. DD Megoldó Alfréd DD 500.

Programozási nyelvek Java

Bevezetés a programozásba előadás: Öröklődés

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Programfejlesztési Modellek

Virtuális függvények (late binding)

7. fejezet: Mutatók és tömbök

Mintavételes szabályozás mikrovezérlő segítségével

Programozási alapismeretek 4.

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Programozás alapjai II. (2. ea) C++

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

Programozás alapjai II. (4. ea) C++

Programozás C++ -ban

Programozás II. ATM példa Dr. Iványi Péter

Programozási technológia

Cekla. Készítette Doxygen Tue Sep :13:44

C++ programozási nyelv

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Objektumelvű programozás

Objektumok inicializálása

Konkurens TCP Szerver

Modellező eszközök, kódgenerálás

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

Bevezetés, a C++ osztályok. Pere László

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozás alapjai II. (3. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

C++ programozási nyelv Struktúrák a C++ nyelvben

Programozás II. 6.Öröklés Dr. Iványi Péter

500.AA Megoldo Arisztid 500.A

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Átírás:

Budapesti Műszaki és Gazdaságtudományi Egyetem ISA szimulátor objektum-orientált modell (C++) Horváth Péter Elektronikus Eszközök Tanszéke 2015. február 12. Horváth Péter ISA szimulátor objektum-orientált modell (C++) 1 / 9

Alapok Objektum-orientált programozás alapfogalmak elnevezés: a probléma megoldása objektumok (adatszerkezetek és a rajtuk/általuk végzett műveletek) definiálásával történik az objektumok adatszerkezeteinek és műveleteinek egysége nyelvi szinten támogatott nyelvi eszköztár: az objektum-orientált nyelvek elsődleges eszköze az osztály: egyazon tulajdonságokkal bíró objektumok absztrakt modellje osztály interfésze műveletek, amelyek az osztály egy példányán (objektum) elvégezhetők művelet: alprogram (lásd procedurális programozás) az osztály használója által közvetlenül hozzáférhető adatszerkezetek osztály implementációja: az interfészt alkotó alprogramok implementációja és az osztály használója által közvetlenül nem hozzáférhető adatszerkezetek Horváth Péter ISA szimulátor objektum-orientált modell (C++) 2 / 9

C++ nyelvi eszközök Osztály Az osztály olyan konstrukció, amely egyaránt magában foglalja a tervezési egységet leíró tulajdonságokat (tagváltozók) és a tervezési egységen vagy általa végezhető műveleteket (tagfüggvények). Az osztály belső konzisztenciájáról a publikus interfészt alkotó tagfüggvények gondoskodnak. Az osztály implementációja a felhasználó számára nem releváns. class circle { double r; public : void set_r ( double const r) { if ( r < 0 ) std :: cout << ERROR! << std :: endl ; else this ->r = r; double get_r () { return this ->r; double get_area () { return this ->r * this ->r * 3.14259; double get_perimeter () { return 6.28318 * this ->r; ; Horváth Péter ISA szimulátor objektum-orientált modell (C++) 3 / 9

C++ nyelvi eszközök Tagfüggvények implicit paramétere Minden tagfüggvénynek van egy implicit paramétere: a this pointer, amely mindig az osztály azon példányára mutat, amelyen a tagfüggvényt meghívtuk. Egy tagfüggvény nem hívható objektumtól függetlenül, mindig ismernünk kell a this pointert. A C modell esetén hasonló mechanizmust valósítottunk meg. Objektum-orientált nyelvek esetén automatikusan megvalósul. C++ modell C modell struct instruction the_instruction ; instr_init (& recent_instruction ); executor the_executor ( the_programmers_view, the_instruction_cache ); executor :: run_program (& the_executor ); the_executor. run_program (); Horváth Péter ISA szimulátor objektum-orientált modell (C++) 4 / 9

Az ISA szimulátor objektum-orientált modellje Az ISA szimulátor működése A bemutatott ISA szimulátor assembly forráskód alapján modellezi egy mikroprocesszorban végbemenő folyamatokat. Az egyes utasítások végrehajtása debugger-ben, vagy debug információk szabványos kimenetre írásával követhető nyomon. _div_routine i2rf 0 0 i2rf 1 1 i2rf 2-1 i2rf 3 4 i2rf 4 2 i2rf 5 3 m2rf 15 0 0 m2rf 14 0 1 add 14 14 0 bz _L8...... void run_program () { while ( true ) { the_instruction_cache. at( the_programmers_view. the_ip )-> execute (); # ifdef _DEBUG_ std :: cout << " instruction executed @" << the_programmers_view. the_ip << std :: endl ; # endif... Horváth Péter ISA szimulátor objektum-orientált modell (C++) 5 / 9

Implementációs részletek A modell ősosztályai asm_parser: Beolvassa az assembly forrásállományt és felépíti belőle az utasításokat tartalmazó vektort (instruction_cache). programmers_view: A mikroprocesszor belső erőforrásait és a külső erőforrásokra mutató leírókat (pointerek, referenciák) tartalmazza (programozói nézet). utasításmutató: the_ip regisztertömb: the_regfile zero flag: the_zero_flag az adatmemóriára mutató referencia: the_data_cache instruction: Az utasításkészlet 9 gépi utasításból áll, ezek mindegyike egy-egy külön osztály. Az instruction osztály a gépi utasítások ősosztálya. Adattagjai: címke (the_label) operációs kód (the_opcode) referencia a programozói nézetre (the_programmers_view) executor: Az utasítások felhozásáért és azok futtatásáért felelős osztály. Horváth Péter ISA szimulátor objektum-orientált modell (C++) 6 / 9

Implementációs részletek A szimulátor architektúrája osztálydiagram Horváth Péter ISA szimulátor objektum-orientált modell (C++) 7 / 9

Implementációs részletek Az utasítások Az utasítások hierarchiája tartalmazza az assembly forráskódból kinyert információt. Az utasítások hierarchiájának gyermekosztályai (a konkrét gépi utasítások) "saját magukat hajtják végre" (execute()). Az utasítások "látják"a processzor belső erőforrásait, hiszen ezeken dolgoznak (the_programmers_view). void execute () { the_programmers_view. the_regfile. at( the_destination_index ) = the_programmers_view. the_regfile. at( the_operand_1_index ) + the_programmers_view. the_regfile. at( the_operand_2_index ); if ( the_programmers_view. the_regfile. at( the_destination_index ) == 0) the_programmers_view. the_zero_flag = true ; else the_programmers_view. the_zero_flag = false ; ++( the_programmers_view. the_ip ); Horváth Péter ISA szimulátor objektum-orientált modell (C++) 8 / 9

Implementációs részletek Az executor osztály A gépi utasítások fent bemutatott viselkedéséből adódóan az executor osztálynak csak annyi a feladata, hogy az utasításokat felhozza a programtárból és meghívja az execute() függvényüket. A fetch végrehajtásához az executor oszálynak látnia kell magát az utasítás memóriát (the_instruction_cache) és az utasításmutatót (the_ip) tartalmazó programozói nézetet (the_programmers_view). void run_program () { while ( true ) { the_instruction_cache. at( the_programmers_view. the_ip )-> execute (); Horváth Péter ISA szimulátor objektum-orientált modell (C++) 9 / 9