HARDVERKÖZELI PROGRAMOZÁS1



Hasonló dokumentumok
Bevezetés a számítástechnikába

Számítógépek felépítése, alapfogalmak

1. Az utasítás beolvasása a processzorba

A Számítógépek felépítése, mőködési módjai

Digitális technika VIMIAA01

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

Számítógép Architektúrák

Gábor Dénes Főiskola Győr. Mikroszámítógépek. Előadás vázlat. 2004/2005 tanév 4. szemeszter. Készítette: Markó Imre 2006

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

Assembly utasítások listája

A MiniRISC processzor

A számítógép alapfelépítése

ASSEMBLY PROGRAMOZÁS TANTÁRGYHOZ SZÜKSÉGES ELŐISMERETEK ISMÉTLÉSE

Közlekedés gépjárművek elektronikája, diagnosztikája. Mikroprocesszoros technika. Memóriák, címek, alapáramkörök. A programozás alapjai

Egyszerű RISC CPU tervezése

A mikroszámítógép felépítése.

1. ábra: Perifériára való írás idődiagramja

Digitális rendszerek. Utasításarchitektúra szintje

Mikroprocesszor CPU. C Central Központi. P Processing Számító. U Unit Egység

Digitális technika II., 2009/2010 tavasz 1. vizsga A csoport

Stack Vezérlés szerkezet Adat 2.

Assembly. Iványi Péter

Az integrált áramkörök kimenetének kialakítása

[cimke:] [feltétel] utasítás paraméterek [; megjegyzés]

Assembly Rekurzív függvények, EXE, C programok. Iványi Péter

A regiszterek az assembly programozás változói. A processzor az egyes mőveleteket kizárólag regiszterek közremőködésével tudja végrehajtani.

Számítógép Architektúrák I-II-III.

Széchenyi István Szakképző Iskola

Architektúra, megszakítási rendszerek

GÁBOR DÉNES FŐISKOLA PREZENTÁCIÓ. Vezetőtanár: Ágoston György 2002/ szemeszter. 222 lap

Számítógép Architektúrák (MIKNB113A)

Számítógépek felépítése, alapfogalmak

Számítógép architektúrák I. Várady Géza

ELŐADÁS SZÁMÍTÓGÉP MŰKÖDÉSE FIZIKA ÉS INFORMATIKA

A 32 bites x86-os architektúra regiszterei

Mérési útmutató. A/D konverteres mérés. // Első lépésként tanulmányozzuk a digitális jelfeldolgozás előnyeit és határait.

Adatelérés és memóriakezelés

Memóriák - tárak. Memória. Kapacitás Ár. Sebesség. Háttértár. (felejtő) (nem felejtő)

2. Digitális hálózatok...60

Számítógépek. 2.a) Ismertesse a kombinációs hálózatok alapelemeit és a funkcionálisan teljes rendszer

Assembly Utasítások, programok. Iványi Péter

Információs Technológia

Bevezetés a C++ programozásba

A Számítógépek hardver elemei

Assembly Címzési módok. Iványi Péter

Balaton Marcell Balázs. Assembly jegyzet. Az Assembly egy alacsony szintű nyelv, mely a gépi kódú programozás egyszerűsítésére született.

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Digitális technika II. (vimia111) 5. gyakorlat: Tervezés adatstruktúra-vezérlés szétválasztással, vezérlőegység generációk

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

3. Gyakorlat Ismerkedés a Java nyelvvel

Méréstechnika. 3. Mérőműszerek csoportosítása, Elektromechanikus műszerek általános felépítése, jellemzőik.

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Mi az assembly? Gyakorlatias assembly bevezető. Sokféle assembly van... Mit fogunk mi használni? A NASM fordítóprogramja. Assembly programok fordítása

Hardverközeli programozás oktatása a DIY Calculator segítségével Teaching hardware programming with DIY Calculator

Az INTEL D-2920 analóg mikroprocesszor alkalmazása

FPGA áramkörök alkalmazásainak vizsgálata

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

Megszakítások és kivételek

Máté: Assembly programozás

Intel x86 utasításkészlet

Bevezetés az informatikába

Számítógépes alapismeretek

Intel x86 utasításkészlet + disassembler működése

Máté: Számítógép architektúrák

2.3. A C nyelv utasításai

Bevitel-Kivitel. Eddig a számítógép agyáról volt szó. Szükség van eszközökre. Processzusok, memória, stb

DSP architektúrák dspic30f család

Programozás 3. Dr. Iványi Péter

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

Az MSP430 energiatakarékos használata

Digitális technika II. (vimia111) 5. gyakorlat: Mikroprocesszoros tervezés, egyszerű feladatok HW és SW megvalósítása gépi szintű programozással

Elôszó a magyar kiadáshoz A Kiadó Elôszó

Szakmai program 2015

Mikrokontrollerek. Tihanyi Attila május 8

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Országzászlók (2015. május 27., Sz14)

INFORMATIKAI ALAPISMERETEK

A számok kiírása is alapvetően karakterek kiírásán alapul, azonban figyelembe kell venni, hogy a számjegyeket, mint karaktereket kell kiírni.

Az 5-2. ábra két folyamatos jel (A és B) azonos gyakoriságú mintavételezését mutatja ábra

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

Programozható logikai vezérlõk

Számítógép architektúra kidolgozott tételsor

Számítógépes alapismeretek

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

C programnyelv 1. Kedves Kollegina, Kolléga!

Archi2 Gyak. (Processzorok Utasításszintű Kezelése) 2014 ősz

A PC története. Informatika alapjai-9 Személyi számítógép (PC) 1/12. (Personal computer - From Wikipedia, the free encyclopedia)

találhatók. A memória-szervezési modell mondja meg azt, hogy miként

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

A TMS320C50 és TMS320C24x assembly programozására példák

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

Történeti áttekintés

Aritmetikai utasítások

1. Kombinációs hálózatok mérési gyakorlatai

Bevezetés az informatikába

SZÁMÍTÓGÉPARCHITEKTÚRÁK

0 0 1 Dekódolás. Az órajel hatására a beolvasott utasítás kód tárolódik az IC regiszterben, valamint a PC értéke növekszik.

Assembly Programozás Rodek Lajos Diós Gábor

Átírás:

HARDVERKÖZELI PROGRAMOZÁS1 Dr. Varga Imre Debreceni Egyetem Informatikai Rendszerek és Hálózatok Tanszék 2015.05.11

Követelmények Gyakorlat (aláírás) Óralátogatás (maximum hiányzás: 3) C programozási beugró (1 javítási lehetőség) 2 gyakorlati ZH Mindegyik legalább 50% A 2 ZH átlaga legalább 60% 1 javítási lehetőség (teljes féléves anyag) Elmélet (kollokvium) Írásbeli vizsga (gyakorlati aláírás esetén) Jegy: 75% elméleti vizsga + 25% gyakorlati eredmény Hardverközeli programozás 1 2

Mérnökinformatikus képzés absztakció, logikai szint Döntéstámogató rendszerek Mesterséges intelligencia alapjai Bevezetés a LabView programozásba Magas szintű programozási nyelvek 1-2 Hardverközeli programozás 1-2 Digitális technika Elektronika 1-2 Fizika 1-2 Hardverközeli programozás 1 3

Tematika Számábrázolás, adattípus implementáció Digitális elektronika alapjai CPU felépítése és működése Assembly programozás Magas szint leképezése alacsonyra Modern processzorok A programozás operációsrendszerhez kapcsolódó aspektusai Konkrét processzor architektúrák Utasításkészletük, programozásuk Hardverközeli programozás 1 4

A tárgy célja Összeköttetés teremtése Az absztrakt és az alapozó ismeretek között A program és az elektronika között Hardver ismeretek átadása Magas szintű programozás mélyebb megértése Hatékonyabb programozás Az assembly programozás bemutatása Szemléletformálás Átfogó kép kialakítása a számítógép rendszerekről Hardverközeli programozás 1 5

Számábrázolás, adattípusok Fixpontos számábrázolás Lebegőpontos számábrázolás A C nyelv típusainak reprezentációja

Mi az outputja a programnak? Hardverközeli programozás 1 7

Adategységek Bit: két állapot (0, 1) Nibble(fél byte): 4 bit Byte: 8 bit Félszó: 16 bit Szó: (többnyire) 32 bit Dupla szó: 64 bit Adatszervezés 18.446.744.073.709.551.616 4.294.967.296 65.536 256 16 2 Hardverközeli programozás 1 8

Megadás Adattípus Reprezentáció Tartomány Műveletek A C nyelv aritmetikai (egyszerű) típusai [unsigned signed] char [unsigned signed] [short long long long*] int float [long*] double *ISO C99 Hardverközeli programozás 1 9

Fixpontos számábrázolás Egész értékek reprezentálása Előjel nélküli eset ábrázolandó szám kettes számrendszerben adott számú biten Példa (1 byte esetén) 41 10 101001 2 0 0 1 0 1 0 0 1 N biten ábrázolható legkisebb szám: 0 Legnagyobb szám: 2 N -1 Hardverközeli programozás 1 10

Előjeles eset Fixpontos számábrázolás Nem negatív érték esetén: előjel nélküli logika Negatív érték esetén: kettes komplemens Bitek invertálása(egyes komplemens) A kapott érték növelése 1-gyel Példa (1 byte esetén) -41 10-101001 2 N biten ábrázolható legkisebb szám: -(2 N-1 ) Legnagyobb szám: 2 N-1-1 1 1 0 1 0 1 1 1 meghatározza az előjelet Hardverközeli programozás 1 11

Aritmetikai túlcsordulás Két féle hibalehetőség Előjel nélkül: több bit lenne szükséges (carry) 01011010 90 +11110001 +241 101001011 331 >255 Előjeles: nem várt előjelváltás (overflow) 01011010 90 +01110001 +113 11001011-53 203 Hardverközeli programozás 1 12

Kiterjesztés Néha szükség van egy adatot a korábbinál több biten ábrázolni úgy, hogy az értéke ne változzon Nulla kiterjesztés Rövid előjel nélküli értékből hosszú előjelnélküli 8 bit: 01101001 16 bit: 0000000001101001 8 bit: 11010010 16 bit: 0000000011010010 Előjel tartó kiterjesztés Rövid előjeles értékből hosszú előjeles 8 bit: 01101001 16 bit: 0000000001101001 8 bit: 11010010 16 bit: 1111111111010010 Hardverközeli programozás 1 13

BCD ábrázolás Binárisan kódolt decimális Minden számjegy 4 biten ábrázolva Vannak kihasználatlan bitkombinációk Pakolatlan BCD 1 számjegy -1 byte: 0000 vagy (0011 * ) bevezető 1395 00000001 00000011 00001001 00000101 Pakolt BCD 2 számjegy 1 byte: nibblealapú 1395 00010011 10010101 *ASCII miatt Hardverközeli programozás 1 14

Ábrázolás Egész típus Fixpontos számábrázolás Előjeles vagy előjel nélküli BCD Bájtsorrend Little-endian: LSB elől (gazdagép bájtsorrend) Big-endian: MSB elől (hálózati bájtsorrend) Megadás különböző módokon Pl. C nyelven: 30=30u=30l=036=0x1E=0b11110 * *ISO C99 Hardverközeli programozás 1 15

Értékei karakter kódok Karakter típus Fixpontos számábrázolás C: ASCII (1 byte, előjeles/előjel nélküli, egészként használható) Java: Unicode (2byte, előjel nélküli) ASCII ISO-8859-1 (Latin 1) Unicode ASCII kódtábla 0x00-0x1F: vezérlő karakter 0x30-0x39: számjegy 0x41-0x5A: angol nagy betű 0x61-0x7A: angol kis betű Hardverközeli programozás 1 16

Felsorolásos típus Alacsony szinten int-ként reprezentált C nyelven a két kód assembly szinten azonos Hardverközeli programozás 1 17

A Cegész típusai típus méret tartomány [signed] char -128 127 unsigned char 1 byte 0 255 [signed] short -32.768 32.767 unsigned short 2 byte 0 65.536 [signed] int -2.147.483.648 2.147.483.647 unsigned int 4 byte 0 4.294.967.296 [signed] long 8 byte -9.223.372.036.854.775.808 9.223.372.036.854.775.807 unsigned long (4 byte) 0 18.446.744.073.709.551.615 [signed] long long -9.223.372.036.854.775.808 9.223.372.036.854.775.807 unsigned long long 8 byte 0 18.446.744.073.709.551.615 Hardverközeli programozás 1 18

Lebegő pontos számábrázolás Valós számok ábrázolása Alapja a normalizálás: 123,45 = 1,2345 10 2 Minden (2 számrendszerbeli) szám felírható így: (-1) S M A K ahol a mantissza (M) 1.H alakú, azaz 1 2 M < 10 2 karakterisztika (K) pozitív és negatív is lehet Nem tároljuk: alap (A=2), rejtett bit, K előjele E=K+B adott számú biten nem negatív (B: nulla pont) Tárolandó: S, H, E Hardverközeli programozás 1 19

Lebegő pontos szabvány IEEE 754/1985 szabvány (ISO/IEC/IEEE 60559:2011) Előjel Pozitív: 0; Negatív: 1 Formátumok Egyszeres pontosság Dupla pontosság Kiterjesztett pontosság méret S hossz E hossz H hossz 32 bit 1 bit 8 bit 23 bit 127 64 bit 1 bit 11 bit 52 bit 1023 80 bit 1 bit 15 bit 63(+1) bit 16383 Hardverközeli programozás 1 20 B

Lebegő pontos számábrázolás Példa: -13.8125 egyszeres pontossággal -13.8125 10 = -1101.1101 2 = -1 1 1.1011101 2 3 Előjel: S =1 Karakterisztika: K = 3 10 = 11 2 Mantissza: M = 1.1011101 Hasznos bitek: H = 10111010000000000000000 Eltolt karakterisztika: E = 3 10 +127 10 = 10000010 2 1 1 0 0 0 0 0 1 0 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 S E H Hardverközeli programozás 1 21

Kerekítési hiba Ok: hasznos bitek tárolás véges számú biten Túl sok hasznos bit esetén kerekítés szükséges Ha az utolsó tárolható hasznos bit után 0 áll, akkor a további biteket levágjuk Különben felfelé kerekítünk Kerekítési hiba: nem pontos ábrázolás Példa: 0.3 ábrázolása egyszeres pontossággal hasznos bitek: 00110011001100110011001100110 tárolt bitek: 00110011001100110011010 0.3 0.300000011920929 Hardverközeli programozás 1 22

Speciális lebegőpontos értékek +0 és -0 előjel bit 0 (+) vagy 1 (-), minden más bit 0 Pl.: 0.0/-1.0, -1.0*0.0 ±végtelen (Inf) karakterisztika csupa 1, mantissza csupa 0 Pl.: 1.0/0.0, inf+1.0 nem szám (NaN) karakterisztika csupa 1, mantissza nem csupa 0 Pl.: 0.0/0.0, inf-inf, NaN+1.0 denormalizált szám (subnormal) karakterisztika csupa 0, mantissza nem csupa 0 Hardverközeli programozás 1 23

A Cnyelv valós típusai Valós típusú konstansok formátuma 0.751 +.75100.751f 75.1e-2 0.751L 0.0751E+1 Valós típusok paraméterei méret minimum maximum pontosság float 4 byte 1.18 10-38 3.40 10 +38 7 számjegy double 8 byte 2.23 10-308 1.80 10 +308 15 számjegy long double* 10 byte 3.36 10-4932 1.19 10 +4932 19 számjegy Hardverközeli programozás 1 24

Mutató típus Indirekt hivatkozásra szolgálnak Tartományának elemei tárcímek A mutató típusú változónak is van saját címe A Cnyelvben Előjel nélküli egész reprezentáció (32 vagy 64 bit) NULL: csupa nulla bit Értéke adatcím és kódcím (!) is lehet Aritmetikai műveletek is végezhetőek velük Hardverközeli programozás 1 25

Rekord típus Különböző típusú területek együtt Mindegyik mező a saját reprezentációjával Nem biztos, hogy folytonos memóriaterületen A.a A.b A.c A.d sizeof(a)==16 B.d B.a B.c B.b sizeof(b)==24 nem használt byte Hardverközeli programozás 1 26

Tömb típus Azonos típusú elemek folytonosan tárolva Minden elem az adott reprezentációval A tömb neve C nyelven: az első elemre mutató nevesített konstans Egyes nyelveken: az összes elemre hivatkozás Egydimenziós tömb i. elemének a címe (A i ) 1 ahol E egy adatelem mérete és A 1 a tömb kezdőcíme Hardverközeli programozás 1 27

Több dimenziós tömbök Sorfolytonos tárolás,,,,,,,,,,,,, Az i. sor j. elemének címe (A i,j ) egy NxM-es mátrixban,, 1 j 1 E ahol E egy adatelem mérete és A 1,1 a mátrix első elemének címe Hardverközeli programozás 1 28

Karakterek sorozata Sztringtípus Elemei a megfelelő belső reprezentációban (pl. C: 1byte, ASCII; Java: 2 byte, Unicode) Hossza Fix hosszúságú Változó hosszúságú A sztring elején hossz tárolás (pl. Pascal) A sztring végén speciális lezárójel(pl. C) Kombinált (pl. Delphi) Hardverközeli programozás 1 29

A C nyelv tömbje Tömb index 0-tól (db-1)-ig Csak egydimenziós tömb van, viszont van tömbök tömbje Sztring: karaktertömb Lezáró karakter \0 (ASCII kód: 0) A tömb neve az első elemre mutató nevesített konstans (mutatóorientáltság erős) egyenértékű utasítások Hardverközeli programozás 1 30

Digitális elektronikai alapok Félvezető Dióda, tranzisztor Logikai kapu Flip-flop Multiplexer, címdekódoló Összeadó áramkör

Félvezetők Rossz vezető, rossz szigetelő Ok: szilárdtestek sávszerkezete 4 vegyérték elektron (Si, Ge) Kvantumfizika Bohr-féle atommodell szilárdtestben atomban elektron energia elektron energia elektron energia elektron energia vezetési sáv tiltott sáv vegyérték sáv vezető félvezető szigetelő Hardverközeli programozás 1 32

Szennyezett félvezető n-szennyező(elektron) 5 vegyérték elektron (As, Sb) p-szennyező( lyuk ) 3 vegyérték elektron (Ga, In) Új energiaszint a tiltott sávban elektron energia Si Si Si Si As Si Si Si Si - + - + - + Si Si Si Si Ga Si Si Si Si + - + - + - n-típus p-típus Hardverközeli programozás 1 33

p-n átmenet Félvezető egykristály eltérően szennyezett részei között található Szabad töltéshordozók átáramlanak a másik rétegbe, rekombinálódhatnak. n - - - + + + + + - + + - + + - + - - - - + - - + - + - + - - - + + + + + - + + - + + - + - - + - - + - - + - - + + - + - + - + - p kiürített réteg töltéssűrűség + - elektrosztatikus potenciál potenciálgát Hardverközeli programozás 1 34

Dióda Záró irányú előfeszítés + - - - - + + + + + - + + - + + + - - - - + + - - - + - + - + - + - - - - + + + + - + - + + - + + + - - - + + + + - - - + - - + - - - - - + + + Nyitó irányú előfeszítés - + - - - - - + + + + + + - + + - + + - + - - - - + - - + - - + + + - + - - - - - + + + + + + - + + - + + - + - - + - - + - - + - - + + - + + - + - + - + - Dióda: egyenirányításra képes Jele: Speciális: LED Hardverközeli programozás 1 35

Tranzisztor 2 darab p-n átmenet ( összefordított diódák ) Kapcsoló, erősítő p n n p Bipoláris tranzisztor E B C Unipoláris tranzisztor D G S p n p p n p C S B E G n-csatornás JFET D Hardverközeli programozás 1 36

A logikai NAND kapu 2 bemenetű logikai kapu ( nem és ) Jele: Felépítése, működése: V cc A B TTL NAND kapu GND Q A B Q 0 0 1 0 1 1 1 0 1 1 1 0 Hardverközeli programozás 1 37

További logikai kapuk Felépíthetőek NAND kapukból NOT AND OR XOR A Q A B Q A B Q A B Q 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 Hardverközeli programozás 1 38

Flip-flopok Szekvenciális digitális elektronikai áramkör 1 bit információ tárolására képes Alkalmazás: regiszter, számláló, frekvenciaosztó D CLK Q _ Q CLK adat kimenet adat bemenet D flip-flop 4 bites regiszter Hardverközeli programozás 1 39

Kombinációs hálózat Multiplexer N jelből 1-et kiválaszt a vezérlőjelek alapján K darab vezérlőjel 2 K darab bemenő jelet tud azonosítani S 0 S 1 Z 0 0 A 0 1 B 1 0 C 1 1 D D C B A S 0 S 1 4:1 multiplexer Hardverközeli programozás 1 40 Z

Kombinációs hálózat Címdekódoló A címbemenetre adott jel alapján kiválasztja a kimenő jelek egyikét N bites címbemenetre adott érték a 2 N darab kimeneti vonal közül 1-et aktivál A 0 A 1 D 0 D 1 D 2 D 3 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 1 1 0 0 0 A 0 A 1 D 0 D 1 D 2 D 3 2 bites címdekódoló Hardverközeli programozás 1 41

Összeadó áramkör Félösszeadó: 2 bit összeadására képes A B A B C S 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 Teljes összeadó: 3 bit összeadására képes (2 félösszeadó) A B C i C o S 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 C out Hardverközeli programozás 1 42 C S A B S C in

Ripple-carryösszeadó Több bites adatok összeadására képes Láncba fűzött teljes összeadók A 3 B 3 A 2 B 2 A 1 B 1 A 0 B 0 + + + + C 0 S 3 S 2 S 3 S 2 A 3 A 2 A 1 A 0 B 3 B 2 B 1 B 0 teljes összeadó c + + + + S 3 S 2 S 1 S 0 primitív 4 bites ALU kezdemény Hardverközeli programozás 1 43

A processzorok felépítése Számítógép architektúra CPU Regiszterek Fetch-execute ciklus RISC / CISC processzorok

Számítógép rétegmodell 0. szint: digitális logikai áramkörök (logikai kapu, flip-flop) 1. szint: mikro-architektúra (konkrét ALU, buszok) 2. szint: utasításkészlet architektúra (ISA) 3. szint: operációs rendszer (ütemezés, tárkezelés) 4. szint: programozási nyelvek (alkalmazások) Hardverközeli programozás 1 45

Neumann architektúra Princeton architektúra (Neumann János) Neumann elvek (1945): Elektronikus működés Kettes számrendszer használata Tárolt program elve Adat és program tárolás ugyanott/ugyanúgy Soros programvégrehajtás Univerzális felhasználhatóság Hardverközeli programozás 1 46

Harvard architektúra Külön adat és program memória Eltérő felépítés, címtartomány, típus is lehet Párhuzamos adat és utasítás elérés miatt nagyobb teljesítmény Főként mikrokontrollerekben használt Első alkalmazás: Mark I (1944) Módosított Harvard architektúra Külön adat/utasítás gyorsítótár, közös memória Modern CPU-k esetén elterjedt Hardverközeli programozás 1 47

A számítógép alapvető felépítése Processzor Memória Input-Output interfész Buszrendszer Perifériák Perifériák Processzor Memória I/O interfész Buszrendszer Hardverközeli programozás 1 48

Buszrendszer Busz (sín): vezetékek egy csoportja, amelyeken digitális jelet lehet továbbítani Buszrendszer logikai részei Címbusz: a címek bitsorozatának átvitelét biztosítja Adatbusz: adatok átviteléért felelős Vezérlő busz: részegységek működésének összehangolását segítő vezérlő jelek továbbítása címbusz adatbusz vezérlő busz Processzor Memória I/O interfész Hardverközeli programozás 1 49

Processzor Központi feldolgozó egység (CPU) A számítógép agya Vezérlés, utasítás végrehajtás Részei: Vezérlő egység (CU) Aritmetikai és logikai egység (ALU) Végrehajtó egység (EU) Címző egység (AU) és Busz illesztő egység (BIU) Regiszterek Belső gyorsítótár Hardverközeli programozás 1 50

Regiszterek Kis méretű (flip-flop-szerű) tároló áramkör Mérete általában az adatbusz szélességével egyenlő Általában 8-512 bit Gyors hozzáférésű (elérési idő < 1ns) Darabszámát a processzor határozza meg (10-100) Gyakran regisztertömböket alkot Néha átnevezhetőek 3 kategória: Rendszer-, általános célú-és speciális célú regiszter Hardverközeli programozás 1 51

Regiszterek Programszámláló regiszter (PC vagy IP) A következő utasítás memóriacímét tartalmazza Az utasítás végrehajtása során (általában) átáll a következő utasítás címére, azaz az aktuális utasítás méretével növekszik Szekvenciális végrehajtás eszköze Értékét egyes utasítások is állíthatják (vezérlés átadás) Vezérlőegységhez (CU) kapcsolódik Hardverközeli programozás 1 52

Utasítás regiszter (IR) Regiszterek A memóriából beolvasott utasítás műveleti kódját tartalmazza A vezérlőegységhez kapcsolódik A CU ez alapján dönti el milyen műveletet kell végeztetni milyen adaton kell dolgozni (és az hol van) A programozó által nem hozzáférhető Hardverközeli programozás 1 53

Regiszterek Akkumulátor (ACC, W, AX) Általános munka regiszter az ALU-ban Aritmetikai és logikai műveletek operandusait tartalmazza legtöbbször Általában az ilyen műveletek eredménye is itt tárolódik Újabb processzorokban több hasonló regiszter ugyanerre a célra (kevesebb memória művelet) Általában egész típusú adatokat tartalmaznak Hardverközeli programozás 1 54

Regiszterek Állapot regiszter (SR, FLAGS) Processzor állapottal, művelet eredményével kapcsolatos jelző/vezérlő biteket tartalmaz Feltételes vezérlésátadásnál (is) nagyon fontos Átvitel (CF) Nibble átvitel (AF) Túlcsordulás (OF) Előjel (SF) Megszakítási maszk (IF) Nulla (ZF) Paritás (PF) Hardverközeli programozás 1 55

Regiszterek Verem mutató regiszter (SP) A hardveres rendszerverem használatához A verem tetejének memóriacímét tartalmazza Általában a verem előrefelé nő Általában SP a legutóbb betett elemet címzi (Intel) Speciális célú regiszter A push és pop művelet automatikusan változtatja az SP értékét Hardverközeli programozás 1 56

Regiszterek Címzéssel kapcsolatos speciális regiszterek Operandusok címének meghatározásánál egy alap címhez képesti relatív cím (eltolás) megadásához használható Az AU-hoz kapcsolódnak Tömbök, sztringekés lokális változók esetén hasznos Például: BP, X, SI, DI, CS, DS, SS, ES Hardverközeli programozás 1 57

Regiszterek Memória cím regiszter (MAR) Összeköti a külső és belső címbuszt Azt a címet tartalmazza, amelyhez legközelebb hozzá kell férni (írásra vagy olvasásra) A címző egység hajtja meg Címbusz szélességű Hardverközeli programozás 1 58

Regiszterek Memória adat regiszter (MDR) Összeköti a külső és belső adatbuszt Azt az adatot tartalmazza amelyet legközelebb ki kell írni a memóriába vagy amely legutóbb be lett olvasva a memóriából Kétirányú regiszter Adatbusz szélességű Hardverközeli programozás 1 59

Aritmetikai és logikai egység Számítási műveleteket végez Tartalmaz: fixpontos összeadót, komplemens képzőt, léptető regisztereket, bitenkénti logikai művelet végző, stb. áramköröket A operandus B operandus utasítás ALU állapot eredmény Hardverközeli programozás 1 60

Vezérlő egység Az IR-benlévő érték alapján irányítja, szabályozza a többi egység (pl. ALU) működését Fontos regiszterei: IR, PC, SR A vezérlés történhet Huzalozott logikával (közvetlenül) Minden utasításhoz létrehozott bonyolult digitális elektronika segítségével Mikroprogramozott(közvetett) módon Minden műveleti kód elindít egy apró (ROM-ban tárolt) mikroprogramot Hardverközeli programozás 1 61

Címző egység Addressing Unit (AU), Address Generation Unit (AGU) Az utasítások sokféle címzési mód segítségével határozhatják meg hol található az operandus Az AU az operandus címét állítja elő és helyezi el az MAR-ban Az utasításban található címet képezi le fizikai memóriacímre Tárolóvédelmi hibák felismerése Kapcsolat: BIU Hardverközeli programozás 1 62

Órajel Periodikus négyszög hullám Órajel generátor (oszcillátor) állítja elő Szinkronizálja az egységek működését Arányos a CPU által disszipált hővel Periódusidő nagyobb, mint a jelterjedési idő 1 MHz 3 GHz Gyakran változtatható (turbo, powersave) Egyéb sebesség jellemzők: MIPS, FLOPS Hardverközeli programozás 1 63

CISC processzor Komplex utasításkészletű számítógép Sok, összetett utasítás Sokféle címzési mód Változó hosszúságú utasítások Utasítás több gépi ciklust igényel Mikroprogramotott Kevés regiszter Utasítások elérhetik közvetlenül a RAM-ot Hardverközeli programozás 1 64

RISC processzor Csökkentett utasításkészletű számítógép Kevés, egyszerű utasítás Kevés címzési mód Állandó hosszúságú utasítások Utasítás egy gépi ciklust igényel Huzalozott vagy mikroprogramotott Sok regiszter Csak a Load/Storeutasítás éri el a RAM-ot Hardverközeli programozás 1 65

Fetch-Executeciklus 1. Utasítás beolvasása A PC-ben található érték megmondja, hol található a memóriában a következő utasítás. Ezt be kell olvasni az IR-be. 2. Dekódolás A beolvasott műveleti kódot értelmezni kell. Milyen művelet? Milyen adatokon? Eredmény hová kerül? Utasításkészlet architektúra (ISA) definiálja Lehet huzalozott vagy mikroprogramozott Hardverközeli programozás 1 66

Fetch-Executeciklus 3. Operandus beolvasása Az operandus címének meghatározása és onnan beolvasása a megfelelő regiszterbe 4. Művelet végrehajtása például az ALU által, az eredmény egy átmenti regiszterbe kerül 5. Eredmény tárolás regiszterbe vagy memóriacímre 6. Következő utasítás címének meghatározása Hardverközeli programozás 1 67

DIY Calculator esetén Olvasási ciklus C. Maxfield, A. Brown: The Official DIY Calculator Data Book Hardverközeli programozás 1 68

DIY Calculator esetén Írási ciklus C. Maxfield, A. Brown: The Official DIY Calculator Data Book Hardverközeli programozás 1 69

Assembly programozás Assembly nyelv Utasítás készlet Címzési módok Fordítás-szerkesztés-betöltés Gépi kód

Assembly programozás Alacsony absztrakciós szint Programozói szabadság Feladatra optimalizálható kód Nagyobb program teljesítmény Hardverismeret szükség Nehezebben átlátható kód PC, mikrokontroller Magasszintű programnyelvek Assembly programozás Gépi kód Hardverközeli programozás 1 71

Utasítás szerkezet 4 címes utasítás Műveleti kód 3 címes utasítás Műveleti kód 1. Operandus cím 1. Operandus cím 2. Operandus cím 2. Operandus cím Eredmény cím Eredmény cím Következő utasítás cím 2 címes utasítás Műveleti kód 1. Operandus cím 2. Operandus + eredmény cím 1 címes utasítás Műveleti kód 1. Operandus cím Hardverközeli programozás 1 72

Program és utasítás felépítés Forrás fájl utasítás_1 utasítás_2 utasítás_3 utasítás_4 utasítás_5 Címke Művelet Operandus(ok) Megjegyzés.L1: mov ax, 0 #zerotoax Címke Azonosító, általában kettősponttal zárul Művelet Az elvégzendő művelet mnemonic-ja Operandus(ok) Adat(ok) vagy adat(ok)ra hivatkozás(ok) Megjegyzés Sor végéig a fordító figyelmen kívül hagyja Hardverközeli programozás 1 73

Utasításkészlet architektúra ISA (Instruction Set Architecture) A számítógép programozáshoz kötődő részletei Bitszélesség (buszok és regiszterek) Regiszter készlet Gépi utasítások Címzési módok Memória architektúra Megszakítás kezelés Hardverközeli programozás 1 74

Utasítás típusok Adatmozgató utasítások (Egész) aritmetikai utasítások Bitenkénti logikai utasítások Bitléptető utasítások Vezérlésátadó utasítások Sztringkezelő utasítások BCD és valós aritmetikai utasítások Fordítási direktívák Egyéb utasítások Hardverközeli programozás 1 75

Utasítás típusok Adatmozgató utasítások Regiszter-regiszter (mov, xchg) Regiszter-memória (mov) Regiszter-I/O port (in, out) Regiszter-verem (push, pop) Kiterjesztés (bitszélesség fontos) (cbw, cwd) Státusz bit állítás (sti, cli) Hardverközeli programozás 1 76

Utasítás típusok Aritmetikai utasítások Összeadás (átvitel nélkül/átvitellel) (add, adc) Kivonás (átvitel nélkül/átvitellel) (sub, sbb) Inkrementálás, dekrementálás(inc, dec) Kettes komplemens(neg) Előjeltelen/előjeles szorzás (mul, imul) Előjeltelen/előjeles osztás (div, idiv) Összehasonlítás (cmp) Hardverközeli programozás 1 77

Utasítás típusok Bitenkénti logikai utasítások ÉS művelet (and) VAGY művelet (or) KIZÁRÓ VAGY művelet (xor) Egyes komplemens(not) Bit tesztelés (test) Hardverközeli programozás 1 78

Utasítás típusok Bitléptető utasítások Logikai/előjeltelen balra léptetés (shl) Logikai/előjeltelen jobbra léptetés (shr) Aritmetikai/előjeles balra léptetés (sal=shl) Aritmetikai/előjeles jobbra léptetés (sar) Jobbra/balra forgatás (ror, rol) Jobbra/balra forgatás carry-n keresztül (rcr, rcl) Hardverközeli programozás 1 79

Utasítás típusok Vezérlésátadó utasítások Feltétel nélküli ugrás (jmp) Feltételes ugrás (ja, jae, jb, jbe, je, jne, jc, jo, ) Ciklusszervező (loop, loopz, loopnz, ) Hívó utasítás (call) Szubrutinból visszatérés (ret) Szoftveres megszakítás kérés (int) Megszakítás-kezelőből visszatérés (iret) Hardverközeli programozás 1 80

Utasítás típusok Stringkezelő(byte-sorozat kezelő) utasítások Sztring mozgató (movs, movsb, movsw) Sztring összehasonlító (cmps) Keresés sztringben(scas) Egyéb utasítások Koprocesszor vezérlő (wait, esc) Rendszervezérlő (hlt) Üres utasítás (nop) Hardverközeli programozás 1 81

Utasítás típusok Fordítási direktívák: gépi kód nincs mögöttük, a fordítás menetét befolyásolják Forrásfájl lezárása (end) Szegmens definiálás (segment, ends) Egyszerűsített szegmensdefiníció (stack,.data) Helyfoglalás (db, dw, dd) Helyettesítő szimbólum létrehozás (equ) Hardverközeli programozás 1 82

Címzési módok Adat vagy utasítás hogyan érhető el. Rejtett (implicit, implied) Közvetlen adat megadás (immediate) Közvetlen cím (direct, absolute) Regiszteres cím (register direct) Közvetett cím (indirekt) Regiszter indirekt Indexelt cím Bázis relatív cím Hardverközeli programozás 1 83

Címzési módok Rejtett címzés Nincs igazi cím megadás Pl. ha nincs operandus 500 501 502 503 Op.kód1 Op-kód2 Hardverközeli programozás 1 84

Címzési módok Közvetlen adat megadás Műveleti kód után közvetlenül található adat Ez lesz az operandus 500 501 502 503 Op.kód Adat Hardverközeli programozás 1 85

Címzési módok Regiszteres címzés A műveleti kód hivatkozik egy regiszterre A regiszterben található az operandus értéke 500 501 502 503 Op.kód regiszter Adat Hardverközeli programozás 1 86

Címzési módok Közvetlen cím Műveleti kód után található egy memóriacím Itt helyezkedik el az operandus 500 730 501 Op.kód 731 Adat 502 731 732 503 733 Hardverközeli programozás 1 87

Címzési módok Közvetett cím A műveleti kód után található egy cím Ezen a címen található az operandus igazi címe 500 730 943 501 Op.kód 731 945 944 502 731 732 945 Adat 503 733 946 Hardverközeli programozás 1 88

Regiszter indirekt Címzési módok A műveleti kód hivatkozik egy regiszterre A regiszterben található címen helyezkedik el az operandus memóriacíme regiszter 500 731 730 501 Op.kód 731 Adat 502 732 503 733 Hardverközeli programozás 1 89

Indexelt Címzési módok A műveleti kód után található egy cím, ehhez hozzáadva az index regiszterben található értéket megkapjuk az operandus memóriacímét index reg. 500 31 730 501 Op.kód 731 Adat 502 700 732 503 733 Hardverközeli programozás 1 90

Bázis relatív Címzési módok A műveleti kód után található egy eltolási érték, ehhez hozzáadva a bázis regiszterben található kezdőcímet megkapjuk az operandus címét bázis reg. 500 720 730 501 Op.kód 731 Adat 502 11 732 503 733 Hardverközeli programozás 1 91

Gépi kód Az egyetlen nyelv, amit a processzor megért Bináris formátum Processzoronként változó lehet Példa: assembly: SUB EAX, EBX # eax = eax-ebx gépi kód: 0x29 0xD8 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 0 OpKód d s MOD REG R/M SUB művelet Regiszter a forrás 32 bites regiszter Regiszteres címzés Forrás: EBX Cél: EAX Hardverközeli programozás 1 92

Editor Programozás Szövegszerkesztőben forráskód létrehozása Forrás kód: háttértárolón tárolt szöveges file Esetleg nyelv érzékeny eszközrendszer Fordító (compiler, assembler) Előfeldolgozás, lexikai/szintaktikai/szemantikai elemzés, optimalizálás, kódgenerálás Eredmény: tárgykód (ojbectfile) Nem interpreter! Hardverközeli programozás 1 93

Programozás Kapcsolatszerkesztő (linker) A tárgykódban nem igazi címek, csak hivatkozások vannak (több fájl, könyvtári függv.) Linker feloldja a hivatkozásokat: futtatható fájl Betöltő (loader) Az op. rendszer része: létrehozza a folyamatot RAM-batölti a gépi kódot Inicializál: regiszterek, verem Átadja a vezérlést Hardverközeli programozás 1 94

Magasszintűprogramozás leképezése assembly-re 1. Programozás alapjai Kifejezéskiértékelés Elágaztatás Ciklusszervezés

Gondolatébresztő kérdések Melyik értékadás fut le rövidebb idő alatt? int a, b=2, c=3, d=4, e=1, f=2; a=(b+c)*(d-e)%f; a=(2+3)*(4-1)%2; a=5; Mi az alábbi kifejezés értéke? (!3+8==2*4)+-1 Mi az alábbi kifejezés típusa? 5/(short)2==.5+ 2 Hardverközeli programozás 1 96

Gondolatébresztő kérdések Ki/mikor/hogyan végzi a kifejezés kiértékelést? Van címe a konstansnak? Van-e különbség a #define és a const között? Kétirányú elágaztatásnak minősül-e az if (a==0) b=0; utasítás? Hányszor fut le az alábbi ciklus magja? for(a<1,b=1;c++;d=1) e=1; Hardverközeli programozás 1 97

A forráskód alkotórészei Karakterkészlet Lexikális egység Szintaktikai egység Utasítás Programegység Fordítási egység Program Komplexitás nő Hardverközeli programozás 1 98

Konstans (literál) Közvetlen adat megadás (immediate) Kódba épített adat 8, 16, 32, 64 bit szélességű Fix vagy lebegőpontos ábrázolás Magas szinten: 123, 1.25f, a Alacsony szinten: 0x0000007b, 0x3fa00000, 0x61 Hardverközeli programozás 1 99

Nevesített konstans Komponensei: név, típus, érték #define abc 123 Előfordító kicseréli a nevet az értékre Kódba épített adat Assembly szinten egyszerű konstans const int abc=123; A fordító nem engedi a változtatást Assembly szinten egyszerű változó Hardverközeli programozás 1 100

Változó Komponensei: név, attribútum, cím, érték Hatáskör: statikus, dinamikus Deklaráció: explicit, implicit, automatikus Élettartam: statikus, dinamikus, programozó által vezérelt Értékadás: kezdőértékadás(automatikus, explicit), értékadó utasítás, paraméterátadás, input utasítás Hardverközeli programozás 1 101

Alacsony szinten Változó Adott méretű lefoglalt memóriaterület Ha van cím komponens mindig van érték is Érték: bitsorozat (tetszőleges értelmezéssel) Értékadás: memóriacímre adat mozgatás Statikus változó adat szegmensben Dinamikus változó verem szegmensben Programozó által vezérelt a heap-ben Mutató: előjel nélküli egész változó C-ben Hardverközeli programozás 1 102

Kifejezés Komponensei: típus, érték Formálisan: operátor, operandus és zárójel Operátor: uniáris, bináris, ternáris Alak: infix (2+3)*4 perfix * + 234 postfix(rpn) 23 + 4 * Infix alak esetén nem egyértelmű kiértékelés: precendencia és kötésirány kell Típusegyenértékűség vagy típuskényszerítés Hardverközeli programozás 1 103

Kifejezés kiértékelés A kifejezés értékének, típusának meghatározása Konstans kifejezést a fordító értékel ki Nem konstans infix kifejezést a fordító postfix alakra hozza (figyelembe véve a zárójeleket, precedenciátés a kötésirányt) és az alapján állítja elő a gépi kódot imul ebx, ecx eax+ ebx* ecx& edx add eax, ebx and eax, edx Hardverközeli programozás 1 104

Deklarációs utasítás Utasítások Nem áll mögötte gépi kód A fordítóprogramnak szól Végrehajtható utasítás Egy magas szintű utasításból több gépi kódú utasítást is előállíthat a fordító Csoportjai: üres, értékadó, ugró, elágaztató, ciklusszervező, hívó, egyéb Hardverközeli programozás 1 105

Elágaztató utasítás Kétirányú elágaztató utasítás C nyelven: if (kifejezés) utasítás1; [else utatsítás2;] Többirányú elágaztató utasítás C nyelven: switch(kifejezés){ case egész_konstans_kif_1: [utasítás1;] [case egész_konstans_kif_2: [utasítás2;]] [default: utasítás3;] } Hardverközeli programozás 1 106

A feltételes utasítás alacsony szinten if(feltétel) utasítás1; utasítás2; if(feltétel) utasítás1; else utasítás2; utasítás3; cmp eax, ebx jne.l0 mov ecx, 1.L0: add edx, 1 cmp eax, ebx jne.l2 mov ecx, 1 jmp.l3.l2: mov ecx, 2.L3: add edx, 1 Hardverközeli programozás 1 107

A switchutasítás alacsony szinten switch(kifejezés){ casekifejezes1: utasítás1; case kifejezes2: utasítás2; default: utasítás3;} utasítás4; cmp eax, 1 je.l3 cmp eax, 2 je.l4 jmp.l2.l3: mov ebx, 1.L4: mov ebx, 2.L2: mov ebx, 3 add edx, 1 Hardverközeli programozás 1 108

A breakhatása alacsony szinten switch(kifejezés){ case1: utasítás1; break; case2: utasítás2; break; default: utasítás3;} utasítás4; cmp eax, 1 je.l3 cmp eax, 2 je.l4 jmp.l2.l3: mov ebx, 1 jmp.l5.l4: mov ebx, 2 jmp.l5.l2: mov ebx, 3.L5: add edx, 1 Hardverközeli programozás 1 109

Ciklusszervező utasítások Felépítés: fej + mag + vég Működés szempontjából: üres, normál, végtelen Fajtái: Feltételes Kezdőfeltételes Végfeltételes Előírt lépésszámú Előltesztelő Hátultesztelő Felsorolásos Végtelen Hardverközeli programozás 1 110

A C nyelv ciklusai Kezdőfeltételes (nem 0 feltétel esetén ismétel) while (feltétel) utasítás; for ([kif1]; [kif2]; [kif3]) utasítás; Végfeltételes (nem 0 feltétel esetén ismétel) do utasítás; while (feltétel); Hardverközeli programozás 1 111

A whileés forciklus alacsony szinten utasítás0; while(feltétel) utasítás1; utasítás2; mov eax, 10 jmp.l2.l3: sub eax, 1.L2: cmp eax, 0 jne.l3 add ebx, 1 A for és a while ciklus assembly szinten egyenértékű. Hardverközeli programozás 1 112

A do-whileciklus alacsony szinten utasítás0; do utasítás1; while(feltétel); utasítás2; mov eax, 10.L3: sub eax, 1 cmp eax, 0 jne.l3 add ebx, 1 A do-while ciklus nem lehet üres ciklus. Hardverközeli programozás 1 113

Magasszintűprogramozás leképezése assembly-re 2. Eljárás, függvény Lokális változó Paraméterátadás

Gondolatébresztő kérdések Hol vannak az hívott eljárás utasítási? Mi a kezdő memória címük? Hova kell átadni a vezérlést? Melyik utasítással kell folytatni a végrehajtást ha végeztünk az eljárással? Mi a címe a következő utasításnak? Hova kell átadni a vezérlést? Hol tárolódik a visszatérési cím? Hol van eltárolva a hívási lánc? 115

Gondolatébresztő kérdések Hogyan kerülnek át a paraméterek az alprogramba? Hogyan kerül vissza a hívóhoz a visszatérési érték? Ismersz-e változó paraméterszámú függvényt? Hol van tárolva a lokális változó? A memória melyik részén helyezkedik el? Miért dinamikus az alap változó élettartama? Miben különbözik a static változótól? 116

Gondolatébresztő kérdések Melyik program a gyorsabb? Miért? #include<math.h> int main(){ int a,b=-23; a=abs(b); return 0;} #define abs(x) ((x)<0)?(-1*(x)):(x) int main(){ int a,b=-23; a=abs(b); return 0;} 117

Gondolatébresztő kérdések Mit ír az alábbi program a képernyőre? #include<stdio.h> int b=2; void one(int a){ a=a+1;} int main(){ one(b); printf( %d %d\n,a,b); return 0;} 118

Gondolatébresztő kérdések Hányszor fut le az eljárás? #include<stdio.h> void one(int a){ if(a>0) one(a-1); } int main(){ one(1000000); return 0; } 119

Gondolatébresztő kérdések Mit csinál a program? #include<stdio.h> void one(){ int T[10000000]; T[12345]=67; printf( %d,t[12345]); } int main(){ one(); return 0; } 120

Gondolatébresztő kérdések Mit ír az alábbi program a képernyőre? #include<stdio.h> void one(){ int a=-43;} void two(){ int b; printf( %d\n,b);} int main(){ one(); two(); return 0;} 121

Alprogram Az újra felhasználhatóság és a procedurális absztrakció eszköze Komponensei: Név Formális paraméterlista Törzs Környezet Fajtái: Eljárás Függvény 122

Eljárás Tevékenységet hajt végre Aktivizálás utasításszerűen lehet Befejezés a törzs végére érve vagy befejeztető utasítással Folytatás a hívás utáni utasítással void procedure(int a, char b){ printf( %d %c,a,b); } // C nyelven nincs eljárás procedure(3, A ); 123

Értéket határoz meg Aktivizálás kifejezésben Függvény Befejezés általában befejeztető utasítás révén visszatérési érték megadásával Folytatás a kifejezés kiértékelésnél int function(int a, char b){ return a+b; } x=2*function(3, A )+1; 124

LastInFirstOut tároló A verem Tetejének a memóriacímét a verem mutató regiszter (SP) tárolja Pushés Pop művelet A verem mérete korlátos Veremhez gyakran hozzá kell férni Általában gyorsítótárazott(cache) Adat kivétele nem fizikai törlés Külön memóriaszegmensben van 125

Eljárás hívás alacsony szinten PC SP 1 2 3 12 7 8 9 5 0 11 RAM: 4 10 6 hívó_utasítása_1 hívó_utasítása_2 eljárás_hívás hívó_utasítása_3 hívott_utasítása_1 hívott_utasítása_2 befejeztetés old_pc 126

Hívási lánc Az alprogramok hívhatnak újabb alprogramokat, azok továbbiakat, A visszatérési címek folyamatosan a verem tetejére kerülnek (A verem mérete nő.) A hívási lánc dinamikusan épül fel, bomlik le A lánc miden tagja aktív, de csak a legutóbbi működik Rekurzió: egy aktív alprogram meghívása 127

Lokális változók Az programegységben deklarált nevek (változók) a programegység lokális nevei (változói). C nyelvnél (alapesetben): Statikus hatáskörkezelés Dinamikus élettartam kezelés Nincs automatikus kezdőérték 128

Lokális változó alacsony szinten Az alprogramba lépéskor a verem tetején a visszatérési cím található A verembe mentjük a bázis regiszter értékét A veremmutató (SP) értékét átmásoljuk a bázis regiszterbe (BP) Átállítva a veremmutató értékét hagyunk helyet a lokális változók számára a veremben A verem nem csak FIFO módon kezelhető A lokális változók bázis relatív címzéssel elérhetőek 129

Lokális változó alacsony szinten void eljar(){ int a=1; int b=2; int c=3; * } * A RAM tartalma: 730 734??? esp=734 738 742 746 a=1 b=2 c=3 [ebp-12] [ebp-8] [ebp-4] 750 régi ebp ebp=750 754 ret. cím Hardverközeli programozás 1 130

Lokális változó alacsony szinten eljar: push ebp mov ebp, esp sub esp, 16 mov DWORD PTR [ebp-12], 1 mov DWORD PTR [ebp-8], 2 mov DWORD PTR [ebp-4], 3 mov esp, ebp pop ebp ret Hardverközeli programozás 1 131

Paraméter kiértékelés Formális- és aktuális paraméter összerendelés Sorrendi kötés Név szerinti kötés Számbeli egyeztetés Azonos paraméterszám Eltérő paraméterszám Típusegyeztetés Típusegyezés Típus konverzió 132

Paraméterátadás Érték szerinti Cím szerinti Eredmény szerinti Érték-eredmény szerinti Név szerinti Szöveg szerinti Az adatmozgás iránya fontos C nyelvben: csak érték szerinti paraméterátadás 133

Érték szerinti paraméterátadás Formális paraméternek van címkomponense a hívott területén. Aktuális paraméternek van érték komponense. Az aktuális paraméter értéke átkerül a hívott alprogram területén lefoglalt címkomponensre. Az információátadás egy irányú. Az alprogram a saját területén dolgozik. Ahívottalprogramnemtudjaholvanahívó. 134

Függvényhívás alacsony szinten 1. A hívó a verembe teszi az aktuális paramétereket fordított (!) sorrendben. (sorrendi kötés, számbeli egyeztetés) 2. A verembe bekerül a visszatérési cím (PC aktuális értéke). 3. PC megkapja a hívott alprogram kezdőcímét. 4. Szekvenciálisan lefutnak a hívott utasításai. Hívott alprogram felhasználja a veremben lévő paramétereket (bázis relatív, lokális változó). Meghatározódik a visszatérési érték. 135

Függvényhívás alacsony szinten 5. Verembe visszatérési érték betétele (a visszatérési cím alá). 6. Veremből visszatérési cím (hívást követő utasítás címe) kivétele. 7. Vezérlés visszaadása a megadott címre (lásd 5. pont). 8. Visszatérési érték kivétele a veremből. 9. Paraméterek kitakarítása a veremből. 10. Végrehajtás folytatása a következő utasítással. 136

Függvényhívás alacsony szinten Egyes esetekben a paraméterek meghatározott sorrendben regiszterekbe kerülnek, itt adódnak át. (El kell menteni a korábbi tartalmat) a visszatérési értéket az egyik regiszteren keresztül adjuk vissza A paraméterek kitakarítása a veremből lehet a hívó vagy a hívott feladata is Hardverközeli programozás 1 137

Példa C nyelven int fuggv(int c){ int a; a=c+1; * return a; } int main(int argc, char *argv[]){ int a, b; a=argc; b=fuggv(a); return b; } * A RAM tartalma: 726 730 734 738 742 746 750 754 758 762 766 770 fuggv: c fuggv: a régi ebp visszatér. cím param. main: a main: b ősi ebp esp=726 [ebp-8] [ebp-4] ebp=734 [ebp+4] [ebp+8] [ebp+12] [ebp+16] [ebp+20] Hardverközeli programozás 1 138

Példa assembly-ben#1 fuggv: push rbp mov rbp, rsp sub rsp, 8 mov eax, DWORD PTR [rbp+16] mov DWORD PTR [rbp-8], eax mov eax, DWORD PTR [rbp-8] add eax, 1 mov DWORD PTR [rbp-4], eax mov eax, DWORD PTR [rbp-4] mov DWORD PTR [rbp+16], eax mov rsp, rbp pop rbp ret Hardverközeli programozás 1 139

Példa assembly-ben#2 main: push rbp mov rbp, rsp sub rsp, 8 mov DWORD PTR [rbp-8], edi mov eax, DWORD PTR [rbp-8] push rax call fuggv pop rax mov DWORD PTR [rbp-4], eax mov eax, DWORD PTR [rbp-4] mov rsp, rbp pop rbp ret Hardverközeli programozás 1 140

Cím szerinti paraméterátadás Formális paraméternek nincs címkomponense a hívott területén. Aktuális paraméternek van cím komponense a hívó területén. Az aktuális paraméter címe átkerül a hívott alprogramhoz, aki itt dolgozik. Az információátadás két irányú. Az alprogram a hívó területén dolgozik. Gyorsabb, de veszélyesebb. 141

Megszakítási rendszer és input/output Megszakítás, kivétel Megszakításkezelés Input/output Buszrendszerek, perifériák

Szükségesség Az általános célú számítógépek fontos képessége, hogy kölcsön hat az I/O eszközökkel (billentyűzet, egér, hálózati interfész, monitor). Ezek ez eszközök azonnali választ várnak a processzortól, függetlenül attól mivel foglalkozik éppen. Váratlanul bekövetkező eseményekre a CPU-nak reagálnia kell. A megszakítás szolgál a CPU figyelmének felhívására. Hardverközeli programozás 1 143

Megszakítás Speciális jelzés a CPU számára Egy esemény bekövetkeztét jelzi Azonnal reagálni kell rá A normál végrehajtást meg kell szakítani Később tudni kell folytatni Forrás Hardver Processzor Szoftver Hardverközeli programozás 1 144

Megszakítás típusok Aszinkron Külső forrásból (például I/O eszköz) származik Független az aktuálisan végrehajtott utasítástól Szinkron (másként kivétel ) Processzor által érzékelt kivétel Hiba: kijavítható probléma, újra próbálkozás Csapda: pl. nyomkövetésnél Elvetés: jelentős, javíthatatlan (hardver) hiba Programozott kivétel (rendszerhívás) Hardverközeli programozás 1 145

Megszakítási vonal Fogalmak Egy (vagy több) CPU vezérlő busz vezeték Megszakítási kérelem (IRQ) A megszakítások egész számokkal (0-255) azonosíthatók Lehet prioritásuk Programozható megszakítás vezérlő (PIC, APIC) Azonosítja a megszakítás forrását, aktiválja a megszakítási vonalat, kezeli prioritásokat Hardverközeli programozás 1 146

Megszakítási rutin (ISR) Fogalmak Az a programrész, amely megszakítási kérelem esetén aktiválódik, kezeli a speciális helyzetet Hívás nélküli alprogramhoz hasonlít Kontextus Ahhoz, hogy folytatni tudjuk a normál végrehajtást a kivételkezelés után először el kell menteni, majd vissza kell állítani az eredeti környezetet, regisztertartalmakat Hardverközeli programozás 1 147

Maszkolás Fogalmak Egyes megszakítási kérelmek figyelése kikapcsolható Egyszerre, globálisan, processzorban Külön-külön, a PIC-ben lévő IMR segítségével Vannak nem maszkolható megszakítások (NMI) Nested interrupt( fészkelt megszakítás ) Megszakítási rutint megszakító újabb IRQ Megszakítás megszakítása Hardverközeli programozás 1 148

Megszakításkezelés Utasítás beolvasás Utasítás dekódolás Kontextus mentés Utasítás végrehajtás Eszköz azonosítás nem Megszakítás? Rutin (ISR) keresés igen igen NMI? nem Maszk tilt? igen nem Rutin (ISR) végrehajtás Kontextus visszaállítás Hardverközeli programozás 1 149

Megszakításkezelési technikák Vektoros megszakításkezelés Megszakítási vonal aktiválás A megszakítás kérő azonosítja magát Adatbuszon egyedi kódot/címet küld Lekérdezéses (polling) megszakításkezelés Megszakítási vonal aktiválás A CPU sorozatos lekérdezésekkel kideríti kinek van megszakítási igénye Hardverközeli programozás 1 150

Megszakításkezelési technikák Vektoros megszakításkezelés IRQ n ISR 1 címe ISRncíme vektor Lekérdezéses megszakításkezelés IRQ megszakítás lekérdező eljárás programkódja ISR 1 programkódja ISR 1 programkódja ISR n programkódja ISR n programkódja Hardverközeli programozás 1 151

Input/Output Kapcsolat a külvilággal Hardveres I/O interfészek Szoftver interfész (device driver) Perifériás eszközök Periféria 1 Periféria 2 buffer buffer Processzor Memória Külső buszok I/O interfészek Rendszer busz Hardverközeli programozás 1 152

Input/output interfészek Kapcsolat a CPU és a perifériák között Címezhető eszközök Memóriára leképezett I/O (MMIO) Portra leképezett I/O (PMIO) Különböző adatsebesség Különböző fizikai jelek Soros átvitel Párhuzamos átvitel Az eszközvezérlés nem a CPU feladata Hardverközeli programozás 1 153

Programozott I/O (PIO) I/O technikák Speciális I/O utasításokkal (in, out) A program írja le mikor kell a perifériához fordulni (függetlenül annak állapotától) Utasításonként csak egy szó átvitele az I/O buffer és a CPU regiszterei között I/O adat és címregiszterek a CPU-ban Sok CPU időt felemészt az eszközök állapotának sorozatos elkérdezése Hardverközeli programozás 1 154

Megszakítás vezérelt I/O I/O technikák A periféria megszakításokkal jelez a CPU-nak Ha van új input vagy Ha kész van az outputtal A CPU nem figyel folyamatosan Közben tud mással foglalkozni Az adatmozgás a CPU és az I/O modul között történik Hardverközeli programozás 1 155

I/O technikák Direkt memória hozzáférés (DMA) Külön vezérlő révén közvetlen RAM-I/O kapcsolat (RAM-RAM, RAM-I/O) A CPU kéri fel a DMA vezérlőt a műveletre Ha a DMA vezérlő kész van megszakítást kér CPU nem vesz részt az adatmozgatásban Blokkos átviteli mód I/O processzor (IOP) DMA kiterjesztése nagyobb önállósággal Hardverközeli programozás 1 156

Buszrendszerek Párhuzamos ISA PCI ATA (ATAPI, UATA, IDE) VESA Local Bus(VLB) SCSI AGP Soros I 2 C PCI Express Serial ATA USB Serial Attached SCSI FireWire Hardverközeli programozás 1 157

PCI busz Peripheral Component Interconnect Párhuzamos belső busz Sínszélesség: 32 vagy 54 bit Átviteli sebesség: 133-533 MB/s Fejlesztés: 1992-2002 Külön vezérlőáramkör szükséges Forrás: en.wikipedia.org/wiki/conventional_pci Hardverközeli programozás 1 158

PCIebusz Peripheral Component Interconnect Express Soros belső busz 1 link 1, 2, 4, 8, 16 vagy 32 sávból áll Átviteli sebesség: 4000-31500 MB/s Fejlesztés: 2003- Minden eszköznek külön link (nem osztoznak) Forrás: en.wikipedia.org/wiki/pci_express Hardverközeli programozás 1 159

(Parallel) ATA busz (Parallel) AT Attachment Párhuzamos belső busz Szinonimák : PATA, ATAPI, UATA, IDE, EIDE Átviteli sebesség: 3,3-166 MB/s Fejlesztés: 1986-2003 HDD, FDD, CD és DVD meghajtó csatlakoztatás Forrás: en.wikipedia.org/wiki/parallel_ata Hardverközeli programozás 1 160

SerialATA Soros belső busz Pont-pont kapcsolat SATA busz Átviteli sebesség: 150-2000 MB/s Fejlesztés: 2003- HDD, SSD, CD és DVD meghajtó csatlakoztatás Forrás: hu.wikipedia.org/wiki/serial_ata Hardverközeli programozás 1 161

Universal Serial Bus Soros külső busz USB busz Plug-and-Play, elosztható (hub) Átviteli sebesség: 0,18-1250 MB/s Fejlesztés: 1996- Csatlakozók: standard-a, standard-b, mini-a, mini-b, micro-a, micro-b Forrás: en.wikipedia.org/wiki/usb Hardverközeli programozás 1 162

Vezérlő hub-ok Az alaplap fontos chip-jei Northbridge(memóriavezérlő hub) Southbridge(I/O vezérlő hub) CPU AGP RAM Northbridge Southbridge BIOS PCI IDE USB LAN I/O Hardverközeli programozás 1 163

Device Driver Eszköztípusok Eszközmeghajtó Karakteres, blokkos, hálózati, egyéb A programok hardvertől független rendszerhívásokat alkalmaznak open, read, write, close, Az eszközmeghajtók töltik meg ezt konkrét hardver specifikus tartalommal Hardverközeli programozás 1 164

Perifériák Input Billentyűzet Egér Szkenner Kamera Tároló Háttértár (HDD, SSD) CD/DVD/Blu-ray USB tároló Memória kártya Output Monitor Nyomtató Projektor Audio rendszer Hálózat Ethernet kártya Wi-Fi kártya Hardverközeli programozás 1 165

Adattárolás Operatív memória Cache Háttértárak

Tárolók osztályzása Írhatóság szempontjából Csak olvasható, olvasható-írható Hierarchiabeli helye szerint Elsődleges, másodlagos, harmadlagos Tárolási közeg szerint Félvezető, mágneses, optikai Adatmegőrzés szerint Megmaradó, nem megmaradó Elérés szerint Soros elérésű, tetszőleges elérésű Hardverközeli programozás 1 167

Elsődleges memória A processzor és a futó programok által aktívan használt tároló Gyors elérésű Nem maradandó memória Méret erősen korlátos Ide tartoznak Regiszterek Gyorsítótárak Operatív memória Hardverközeli programozás 1 168

Másodlagos memória Háttértároló Az elsődleges memória kiterjesztése Nagy tároló kapacitás Kisebb elérési sebesség Maradandó tárolás Ide tartoznak HDD, SDD CD-, DVD-meghajtó Memóriakártya Hardverközeli programozás 1 169

Harmadlagos memória Többnyire eltávolítható adathordozókra épít Robotikuseszközök csatlakoztatják a kívánt tároló médiumot ( wurlitzer ) Ritka hozzáférés Óriási tároló kapacitás Cél hosszú távú archiválás Ide tartoznak Mágnesszalagos tárolók Optikai tárolók Hardverközeli programozás 1 170

Félvezető memóriák Read-Only Memory(ROM) Gyártás során kerül bele a tartalom, ami később nem változtatható Tartalmat sokáig megőrzi, tápfeszültség hiányában is Programable Read-Only Memory(PROM) Gyártás után üres. Speciális eszközzel egyszer beégethető a tartalom Az írás folyamata lassú (a RAM-hoz képest) Hardverközeli programozás 1 171

Félvezető memóriák Erasable Programable ROM (EPROM) Erős UV fénnyel (lassan) törölhető a tartalom Majd ismét újraírható Electrically Erasable Programable ROM (EEPROM) Elektronikusan, bájtonként törölhető tartalom Flash memória Speciális továbbfejlesztett EEPROM Blokkonként (gyorsabban) törölhető Hardverközeli programozás 1 172

Félvezető memóriák Random Access Memory(RAM) Véletlen elérés Elérési idő nem függ az elhelyezkedéstől Írható/olvasható tetszőleges számban Elveszti a tartalmát tápfeszültség hiányában Nagy írási/olvasási sebesség Static Random Access Memory(SRAM) Frissítés nélkül is megtartja a flip-flipokban a tartalmat a tápellátás megszűnéséig (pl. cache) Hardverközeli programozás 1 173

Félvezető memóriák Dynamic Random Access Memory(DRAM) Rendszeresen frissíteni kell, hogy a kondenzátor révén tárolt információ megmaradjon SRAM-nál lassabb (pl. operatív tár) Olyan gyorsan válaszol ahogy tud Syncronous Dynamic RAM (SDRAM) Órajellel szinkronizált válasz Gyorsabb az aszinkron DRAM-nál(pipeline működés) Hardverközeli programozás 1 174

Félvezető memóriák Double Data Rate(DDR) Gyorsított SDRAM Az órajel fel és leszálló élére is szinkronizál DDR2, DDR3, DDR4 Egyre nagyobb sebesség Egyre nagyobb adatsűrűség Egyre kisebb feszültség Nem kompatibilis DIMM (SDRAM, DDR, DDR2, DDR3, DDR3) Hardverközeli programozás 1 175

Gyorsítótár Egyes eszközök rendszeresen adatot cserélnek Az eszközök adatátviteli sebessége nagyon eltér A lassú eszköz miatt a gyors is lelassul Pl. a CPU kb. 10-szer gyorsabb a RAM-nál Megoldási ötlet Köztes tároló beiktatása (cache) Gyorsabb, mint a lassú eszköz (SRAM, közeli) Magas ára miatt teljesen nem helyettesíti a lassút Létjogosultság: lokalitási elvek Hardverközeli programozás 1 176

Térbeli lokalitás elve Gyorsítótár Ha egy program hivatkozik egy memóriacímre (adat vagy utasítás), akkor nagy valószínűséggel hamarosan hivatkozik a szomszédos címekre is Szekvenciális végrehajtás, tömbök Időbeli lokalitás elve Ha egy program hivatkozik egy memóriacímre, akkor nagy valószínűséggel hamarosan ismét hivatkozik rá Ciklusok Hardverközeli programozás 1 177

Gyorsítótár Leggyakrabban használt adatok tárolása Kisebb tárolókapacitás, gyorsabb elérés (SRAM), mint az operatív memória esetén Átlátszóak a felhasználó számára Asszociatív (CAM) memóriát tartalmaz CPU cache, GPU cache, Web cache, DNS cache CPU cache Többszintű: L1, L2, L3 cache On-chip vagy off-chip Hardverközeli programozás 1 178

Gyorsítótárfelépítése A tárolás egysége a Sor A Sor részei a Tag (toldalék) és a Blokk A Tag tartalmazza a Blokk főtárbeli címét és egyéb vezérlő információkat A Blokk a főtár egy részének a másolata CPU Cache Tag Blokk 128 DEF 131 MNO 129 GHI RAM ABC 127 DEF 128 GHI 129 JKL 130 MNO 131 Hardverközeli programozás 1 179