Szegmens regiszterek (16 bitesek)

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Szegmens regiszterek (16 bitesek)"

Átírás

1 Memóriatérkép BIOS (alaplapi) BIOS bővítések (csatolókártyán elhelyezkedő) F000 : FFFF C000 : 0000 B000 : FFFF A000 : : FFFF Felső memória 246 Kbyte (Videó RAM) képernyő megjelenítéséhez szükséges 1000 : : FFFF 0000 : : Kbyte (konvencionális (hagyományos) memória) /az első 10 szegmens/ egy szegmens maximális mérete 64 Kbyte Maximum F000 lehet a szegmenscím, mert: F000 * 16 = F FFFF = FFFFF ami már 20 bites cím Szegmens regiszterek (16 bitesek) CS(Code Segment) utasítások címzéséhez SS(Stack Segment) verem címzéséhez DS(Data Segment) (automatikus) adat terület címzéséhez ES(Extra Segment) másodlagos adat terület címzéséhez Vezérlő regiszterek (16 bitesek) IP(Instruction Pointer) az éppen végrehajtandó utasítás logikai címét tartalmazza a CS által mutatott szegmensben SP (Stack Pointer) a stack-be (verembe) utolsónak beírt elem logika címét tartalmazza az SS által mutatott szegmensben STATUS (SR vagy FLAGS) a processzor állapotát jelző regiszter BP(Base Pointer) a stack indexelt címzéséhez használatos SI(Source Index) a kiindulási (forrás) adat terület indexelt címzéséhez használatos

2 DI(Destination Index) a cél adat terület indexelt címzéséhez használatos Szegmens (6.8. ábra) A programozó számára látható logikai egység. Minden szegmens címtartománya 0-tól valamilyen maximumig terjed. A szegmens tényleges mérete ennél kisebb lehet. A program számára a címtartomány két dimenziós: (szegmens, offset). Általában egy szegmensben csak egyféle dolgok vannak: vagy kód vagy konstans vagy Különböző tárvédelmi lehetőségek: kód: csak végrehajtható, nem írható, nem olvasható, konstans: csak olvasható Szegmentált memóriacímzés: Operatív memória nélkül nem tudunk programokat futtatni egy Neumann-architektúrájú (tárolt programú) számítógépen - valamilyen módon tehát a memóriát el kell érnünk, hogy oda programokat töltsünk be. A memóriához való hozzáférés, mint tevékenység két fázisra osztható: 1; címzés: ekkor meghatározzuk, milyen memóriacímre (cellaként, rekeszként lehet elképzelni) vagyunk kíváncsiak 2; operáció: az adott címre beírunk vagy onnan kiolvasunk egy adatot. Ahhoz, hogy beírjunk egy értéket, tudnunk kell, mekkora helyet foglal a memóriában. Számértékekben kell gondolkodni, mást ugyanis a digitális gépek nem ismernek... A számokat az assembly nyelveken programozók szeretik hexadecimális formában ábrázolni - ez ugyanis kifejezőbb, mint a decimális forma, később látjuk is, miért lesz ez fontos. A hexadecimális számok mögé egy 'h' utótagot írok, vagyis a 12h egy hexa szám, értéke decimálisan tizennyolc. Vegyünk egy példát a memóriában való értékek tárolására. Tegyük fel, hogy három számot szeretnénk eltárolni. Az egyik szám értéke a [0,100] intervallumba tartozik, a második a [-200,+200] tartományba, a harmadik pedig a [ , ] tartományba. Az első intervallumot 7 biten tudjuk ábrázolni, mert 7 biten 128 féle adat fér el, ebbe belefér a [0,100] intervallum. Mi azonban csak kerek címekre, byte határokra írhatunk. Ezen intervallumon tárolt számérték tehát 8 bit helyet foglal a memóriában. Tegyük fel, hogy a hely memóriacíme "0000h". A számolás szerint a következő szám már a "0001h" memóriahelytől fér csak el. Vegyük a következő számot. Értéke a [-200,+200] tartományba eshet, vagyis 401 féle értéket vehet fel. A 401, mint szám tárolásához 9 bitre lesz szükség, mert 2^8 (ejtsd: 2 ad 8, vagyis kettő a nyolcadikon) 256, ez kicsi, 2^9 pedig 512, ez már nagyobb, mint 401. Tudunk 9 bitnyi helyet kicímezni? Nem, 8 bitenként tudunk címezni, vagy annak többszörösén. A "0001h"-s cím tehát már egy 16 bites számra fog mutatni. Ez kétszer 8 bit, vagyis 2 bájt, 0001h + 2 = 0003h, tehát ez lesz a következő szám címe. A harmadik szám értéke a [ , ] tartományba fog esni. Ez összesen lehetőség, ez a szám még 16 biten sem fér el: 2^16 = Ez kevés. Ennek kétszerese , ez 2^17, ez is kevés, ennek kétszerese kell, , vagyis 2^18. Ez elférhetne a 8 bit többszöröse szabály alapján 16+8=24 biten. A szám ugyan elfér, de a processzor csak háromféle számot tud kezelni: 8 bitest (byte), 16 bitest (short integer) és 32

3 bitest (integer). Ezek alapján már tudjuk, hogy egy 32 bites memóriahelyre lesz szükség. Ez 4 bájt, a következő szabad terület memóriacíme tehát 0003h + 4 = 0007h. Említettem, hogy valós módban mindössze 1MB memória érhető el. Tudni kell azonban azt is, hogy a processzor valós módjában a memóriacímzés 16 bites. Itt jön a bökkenő. 16 bittel csak 2^16, vagyis féle cím különböztethető meg. Ez sokkal kevesebb, mint egy megabájt. Erre vezették be a szegmenseket. A szegmensek egymás után 16 bájtonként következnek, mert = 64kB memóriaterület fedhető le, és 1MB osztva 64kB = 16. Vegyünk megint egy példát - három felvonásban. Az elsőben el szeretnénk érni a valós memória 18. bájtját, a másik esetben a 48. bájtot, a harmadikban pedig a es memóriacímet. Tudjuk, hogy a szegmensek 16 bájtonként következnek. A 18-as memóriacímhez tartozó szegmenscím meghatározása a következőképpen történhet: 18-at elosztjuk 16-tal és kapunk 1-et. Egy lesz a szegmenscím: az első szegmensben van a 18-as cím. Mi az osztás maradéka? Kettő, ez lesz az index. Szegmenscím=1, Index=2. Ezt hexadecimálisan szokták jelölni és kettősponttal elválasztva, vagyis "0001h:0002h". Második esetben a 48. bájt kell, osszuk el 48-at 16-tal, 3-at kapunk és nulla a maradék, vagyis a cím 0003h:0000h lesz. Harmadik esetben / 16 = 7.736, vagyis 1E38h, az osztás maradéka 13, vagyis az index 000Dh - tehát a cím 1E38h:000Dh. Most pedig jön a szépség - kicsit másképpen - csak tisztán matematikai alapon. Az index 16 bites, értéktartománya 65536, tehát egy szegmens mérete 64kB. Emiatt a 18. bájtot a 0. szegmens 18 bájtjaként is el lehet érni, a 48-as bájtot pedig a 0. szegmens 48. bájtjaként. Hogyan lehetne akkor a ik bájtot is így, másképpen elérni? Tudjuk, hogy 1 < ( / ) < 2, ez azt jelenti, hogy mivel /16 = 4096, vagyis 4096 féle lehetséges szegmenscím van egy 64kB-os szegmens (memóriablokk) területén, a 4096-edik szegmenscímtől már a következő 64kB is elérhető = , vagyis 4096 = 1000, = E38Dh, tehát a 1000h:E38Dh címen ugyanaz az adat van, mint a korábban kiszámolt 1E38h:000Dh címen. Javaslom a tisztelt olvasónak, fusson újra végig ezen a gondolatmeneten, mert ez a valós módú memóriacímzés módszere és alapvető fontosságú. Aztán nézze jól meg ezt a két párost (1000h:E38Dh) és (1E38h:000Dh), vajon miért is ugyanaz az értékük? Látható, hogy (1E00h:038Dh) és (1E30h:008Dh), de természetesen még (1E31h:007Dh) és (1E10h:028Dh) is ugyanarra a címre mutat. Aki ezt belátja, az érti a szegmentált memóriacímzést.

4 Regiszterek kezelése: Ismert, hogy a regiszterek a processzor futási környezetét alkotják. Hogyan tudjuk feltölteni a regisztereket értékekkel? Egy ilyen feltöltést (adat-)mozgatásnak hívunk, és a MOV utasítást használjuk rá. Először meg kell nevezni az adott regisztert és megmondani, hogy milyen értékkel akarjuk feltölteni. Említettem négy általános célú regisztert. Ezek a regiszterek az EAX, EBX, ECX és az EDX. A jelölés értelme a következő: hajdanában-danában az Intel regiszterek 16 bitesek voltak, de óta 32 bitesek, ez egy kiterjesztés (Extension), ezt jelzi az E betű a regiszterek előtt. Az általános célt a matematikában is használt X, mint változó jelöli. Nem teljesen igaz azonban, hogy mind a négy regiszter általános célú. Vegyük őket sorra. EAX: A valóban általános célú regiszter, a legtöbb műveletet ezzel szokás végezni. EBX: A bázisregiszter, ezt címzéseknél fogjuk használni. ECX: A ciklusregiszter, vagyis ciklusváltozóként használt regiszter. EDX: Data, vagyis adatátvitelre (pl. osztás maradéka) használt regiszter. A régi programokkal és címzésekkel való kompatibilitás miatt megtartották a 16 bites elnevezéseket is, vagyis a valóságban (a hardware-ben) ugyan nem létezik, de nyelvi elemként megmaradt az AX, BX, CX, DX regiszter is - és a későbbiekben ez igaz lesz az indexregiszterekre is. Nézzünk végre példákat. Első pédánkban az EAX regiszterbe 1237ABCEh értéket töltünk, majd ezt átmozgatjuk az EDX regiszterbe, végül ennek alsó 16 bitjét az ECX regiszterbe. ; amit pontosvessző jel után írunk, az megjegyzés mov eax, 1237ABCEh ; mozgasd EAX-be a 1237ABCEh hexa értéket mov edx, eax ; mozgasd EDX-be EAX értékét mov cx, dx ; mozgasd CX-be DX értékét A lényeg, hogy EnX és nx ugyanazt a regisztert jelöli, csak EnX esetében mind a 32 bitjét el tudjuk érni, nx esetében pedig csak az alsó 16 bitet (mert ugye a felső az Extension). Lehetőség van az alsó, 16 bites rész alsó és felső bájtjának elérésére is, ezt nl-nek (low, alacsony) és nh-nak (high, magas) jelölik. Például: EBX(32), BX(16), BL(8), BH(8). mov edx, h mov dl, 0E3h mov dh, 0D7h Remélem, belátható ezek után, hogy EDX értéke 1355D7E3h lesz. Vegyünk észre még valamit - ez már ugyan csupán a szintaktikára vonatkozik - ha a hexadecimális formájú szám betű karakterrel kezdődik, akkor előnullázzuk (például 0E3h). Nos, nézzünk egy kis címzést - immár a gyakorlatban. mov esi, Offset adatok ; "adatok" címke eltolási címe ESI-be mov al, ds:[esi] ; DS:ESI címen található érték AL regiszterbe mov bl, Byte Ptr [adatok] ; Byte jellegű adat BL regiszterbe add esi, 2 ; indexregiszer értékének növelése 2-vel ; ezáltal az indexmutató a memóriában 2 bájttal távolabbi címre fog mutatni mov ecx, ds:[esi] mov dx, Word Ptr [adatok + 4] add esi, 4 mov ebx, ds:[esi]

5 ; egyéb programrészlet adatok: db 01h db 02h db 03h db 04h dw 0AACCh dd 22AACC88h Használtunk végre egy szegmensregisztert és egy indexregisztert is. Hat szegmensregiszterrel rendelkezik az i80386-os processzor, ezek a következők: CS, DS, ES, FS, GS, SS (gépi kód szerinti sorrendben ES, CS, SS, DS, FS, GS). Kódszegmens (CS): az ezen regiszter által meghatározott szegmensben fut a felhasználói folyamat. Adatszegmens (DS): ez a folyamat alapértelmezett adatszegmensének címét tartalmazza. Rövid programoknál a kód és adatszegmens ugyanaz, hiszen felesleges lenne memóriát pazarolni. Az extraszegmens regiszter az ES, ugyanilyen célt szolgálnak az FS és GS regiszterek is, ezek általános céllal használható szegmensjelölők. A verem szegmens címét az SS (Stack Segment) regiszter tartalmazza, ide általában a programok paraméterei, hívási láncok címei, stb. kerülnek. Nézzük az indexregisztereket. Ezek meghatároznak egy memóriahelyet egy adott szegmenscímhez viszonyítva - ezt hívjuk "offset"-nek, vagyis relatív címnek. Utóbbi példaprogramunkban az ESI (Extended Source Index, vagyis forrásindex) regiszter tartalma az "adatok" címke memóriabeli címe volt az adott szegmensen belül. A címke egy elnevezett memóriacím. Az ESI regisztert input (Source Index: forrás index) címzésére használják. Az EDI (D, mint Destination, vagyis cél) regisztert output (kimenet) célokra. Az EBP a bázismutató (Base Pointer), ami általános célokra használható címzésnél. Az ESP a veremmutató (Stack Pointer), ez jelzi, hogy milyen (hány bájt) mélységig jutottunk a program vermében. A Stack Pointer értéke a program futása során csökken, nem nő, mert a verem verem és nem cső... Láthatjuk, hogy a szegmens regiszterekhez tartoznak indexregiszterek, a DS-hez az ESI, az ES, FS és GS-hez az EDI, az SS-hez az ESP és például az EBP... Természetesen a kódszegmenshez is tartozik mutató, ez az EIP, vagyis utasításszámláló (Instruction Pointer), ez jelöli ki a kódszegmensben azt a címkét, ahol a program végrehajtása tart, vagyis EIP mindig a következő utasítás címét tartalmazza. Térjünk vissza a példaprogram elemzéséhez. Először tehát elhelyezi ESI-ben az "adatok" címke memóriacímét, majd AL regiszterbe mozgatja a DS:ESI által kijelölt memóriaterületen található értéket, vagyis 1-et. Azt a műveletet, amikor egy memóriacímről értéket olvasunk ki, vagy oda értéket írunk be, indirekciónak hívjuk. A tömbzárójelek (array brackets: [ és ] jelek) közé írt azonosító jelzi, hogy mivel indexelünk. Ha ez egy regiszter, akkor egyértelmű, hogy a regiszter által jelöljük ki a relatív memóriacímet. Ilyen zárójelben az indexregisztereken kívül az EBX regiszter is szerepelhet még. Amennyiben a tömbzárójelek közé egy elnevezett címke (ezt hívják magaszintű nyelvekben "változó"-nak) azonosítóját írjuk, akkor jelezni kell, hogy milyen típusú adatra mutatunk (PTR - pointer - kulcsszó). A lehetséges típusok: BYTE - például AL, vagy CH esetén, amelyek 8 bites regiszterek WORD - 16 bites regiszetereknél, pl. AX, SI esetén DWORD - double word: duplaszó, vagyis 32 bites, pl. EBP regiszter esetén

6 Menjünk tovább a példában. Ha ESI értékéhez hozzáadunk kettőt ("add esi, 2"), akkor az "adatok" címke után 2 bájttal található memóiacímre fog mutatni ESI. Ott mi található? A db-vel jelölt helyek bájtos helyek, vagyis két bájttal arrébb a 3 érték található. Az ECX regiszter tartalma mi lészen? ECX tudjuk, 32 bites, vagyis ami az aktuális ESI címétől 32 bit, 4 bájt hosszon helyezkedik el, az egy számként bekerül ECX-be. Ez a szám az AACC0403h lesz. Hogy miért? A számok ábrázolása Intel processzoron LITTLE ENDIAN jellegű, vagyis legelöl van a legkisebb helyiérték. Legelöl áll 03, utána 04, majd pedig egy dw short int (16 bites egész) szám, ez bekerül a 32 bites regiszter tetejére, mert ez van leghátul: így épül fel ECX értéke AACC0403h-vá. A következő utasítással DX értéke is 0AACCh lesz, mivel a "mov dx, word ptr [adatok + 4]" az adatok címe után 4 bájttal található címről cseni el az adatot. Megint növeljük ESI értékét, most néggyel, majd az itt található értéket bemozgatjuk az EBX regiszterbe. Ezáltal az a 22AACC88h értékkel töltődik fel. Ugrás és hívás: Az ugrás olyan tevékenység, amellyel a processzor utasításszámlálóját nem a programban soron következő utasításra, hanem egy távolabbi pontra állítjuk. A hívás egy olyan ugrás, amely lehetőséget ad arra, hogy visszatérjünk a kiindulópontba. Nézzünk erre egy példát. egy: jmp negy ketto: mov ecx, 14h harom: ret negy: call ketto ot: mov eax, ecx A "jmp" (jump, ugrás) utasításnak megmondjuk, hogy milyen címet kell beállítani az EIP-be, vagyis az utasításszámlálóba. Ez a cím a "negy" címke címe. Ezáltal a vezérlés a "negy" címke után található utasításra adódik. Azok az utasítások, amelyek az "egy" és a "negy" címke közt találhatóak, nem kerültek végrehajtásra. A "negy" címke után egy call (hívás) utasítás szerepel, amelynek a "ketto" címke címét adjuk át. Ezáltal az EIP regiszter a "ketto" címke címére áll, de még valami más is történik. A verembe mentődik a következő utasítás címe, esetünkben ez az "ot" címke. Minden program részére fenn kell tartani egy veremterületet. Ez maximálisan egy szegmensnyi terület lehet és mint korábban is említettem, arra használható, hogy visszatérési értékeket, paramétereket, stb. helyezzünk el benne, vagyis olyan értékeket, melyeket menteni szeretnénk, hogy később felhasználjuk azokat. A vermet egy olyan zsákként képzelhetjük el, amibe néha bedobálunk kacatokat, amik jelenleg nem kellenek, majd később kiszedjük azokat. Van itt egy fontos szabály: amit utoljára raktunk a verembe, azt vehetjük ki legelőször. A vermet ezért LIFO-nak is hívják: "Last In, First Out". Két művelettel érhetjük el a vermet közvetlenül: "push" (tol) és "pop" (felbukkan). A "push" hatására egy értéket tolhatunk a verembe, ez a verem tetejére kerül, a többi pedig egy egységgel lejjebb. Az egység a processzor valós (REAL) módjában 16 bit. A "pop" utasítással a verem tetején található adat felbukkan, ezáltal a többi érték is egységnyivel feljebb kerül. Elmondhatjuk ezek alapján, hogy a "push" és "pop" utasítások az ESP értékét is változtatják - hiszen mint tudjuk, az ESP regiszter (veremmutató: Stack Pointer) mutatja meg, hol tartunk a veremben. Az ESP értéke jelzi, hogy a veremben lévő értékek látszólag felemelkedtek, vagy lejjebb csúsztak - ugyanis ezek az értékek - természetesen - fizikailag ugyanazon a helyen maradnak, nem másolódnak sehova, csak a verem teteje mozog - ezt a "magasságot" jelzi az ESP. Itt azonban még egy trükk is be lett vetve: a verem a memória fizikai kezelése szempontjából nézve felülről lefelé telítődik, vagyis ami fizikai memóriacím szerint veremterület teteje (ESP=0xFFFFFFFF), az a verem alja és ami a fizikai 0x1 cím, az a verem

7 legteteje. Ha a fizikai 0x1 cím alá, vagy a 0xFFFFFFFF cím fölé megyünk, akkor a verem túlcsordul, logikailag rendre felül-, illetve alulcsordul. Ha egy üres verembe "push" utasítással elhelyezünk egy 16 bites értéket (ez ugye 2 byte), akkor az ESP mutató értéke 0xFFFFFFFD lesz, vagyis kettővel kevesebb, mint ami a verem tetejét jelezné, ha pedig ezt a 16 bites értéket egy "pop" utasítással kiemeljük, akkor az ESP értéke 0xFFFFFFFF lesz. A veremszegmens címét a processzor SS regisztere tartalmazza. Láthatjuk, hogy az ESP egy 32 bites regiszter, vagyis a verem elvileg 2^32 byte (4.3 gigabyte) méretű lehet, valós módban azonban ebből csak a 16 bites SP rész használható. Az SS regiszter azonban mindig 16 bites, hiszen valós módban szegmenscím létezik, mivel 16 bájtonként haladunk 1MB-ig. A processzor védett módja teljesen másképp működik, ott deszkriptorok írnak le egy memóriacímet és mivel egy deszkriptor 8 bájtos, összesen / 8 = 8092 deszkriptor lehet. Térjünk vissza a példához. Tegyük fel, hogy a vezérlés átadódott a "ketto" címkére. Itt egy "mov ecx 0x14" utasítás található, vagyis legyen ECX regiszter értéke 0x14. A következő a "harom" címke, itt egy "ret" utasítás áll, ez a RETURN (visszatérés) rövidítése. Ezen utasítás hatására a processzor kiolvassa a verem tetején lévő számot, és azt, mint visszatérési címet betölti az EIP regiszterbe. A verem tetejére korábban a "call" utasítás helyezett el egy címet, az "ot" címke címét, vagyis most a vezérlés az "ot" címkére fog átadódni. Itt egy "mov eax ecx" utasítás található, ennek hatására most az EAX regiszter tartalma 0x14 lesz. Ha nem hívtuk volna meg a "ketto" címkét, akkor mi lett volna most EAX tartalma? A választ nem tudjuk megadni, ECX értéke ez esetben határozatlan - vagyis ismeretlen - pont annyi, mint amennyit valamelyik korábbi program beállított neki. Ciklusok: Akkor szoktunk ciklusokat szervezni, ha van egy tevékenységünk és az sokszor kell elvégezni. Beszélünk determinisztikus és nem determinisztikus ciklusokról. A determinisztikus ciklus esetében tudjuk, hogy egy adott tevékenységet hányszor kell elvégezni. Magas szintű nyelvekben ezt "for" ciklusnak hívják. Például egy memóriaterület első három bájtját fel kell tölteni 0xAA értékkel. Az Intel Assembly-ben ez úgy kényelmes, hogy megadjuk a feltöltendő memóriacím szegmenscímét és az azon belüli indexet, majd egy tároló utasítást ciklikusan végrehajtunk. mov al, 0AAh ; feltöltendő érték AL-be mov ecx, 0x3 ; ciklusszámláló értéke ECX-be mov edi, Offset terulet ; célterület címe a címregiszterbe cld ; irány flag törlése push cs pop es ; célterület szegmenscíme ES regiszterbe rep ; repeat stosb ; Strore String by Byte ; itt még lehetnek utasítások terulet: db 0 db 0 db 0 Néhány trükk látható: mivel ez egy rövid program, az ES (extra szegmens) regiszter értéke a CS regiszter értékét kapja, ugyanabban a szegmensben van a célterület, mint a programunk kódja. A regiszterértékek másolását most a vermen keresztül a Push-Pop utasításpárral oldottuk meg. A "rep" (REPEAT) ismétlő utasítással lehet egy műveletet ismételni, pontosan annyiszor, amennyit korábban az ECX regiszterben beállítottunk. A "stosb" utasítás ES:EDI címre beírja AL regiszter értékét és az irány (Direction) flag értékének

8 megfelelően növeli, vagy csökkenti EDI-t. Ha a Direction flag értéke igaz, akkor az irány fordított, vagyis EDI értékét csökkenti, ha hamis, akkor az irány normális, növekvő, az EDI értéke nő. Esetünkben az irány flag-et törölni, nullázni kell ("cld" utasítás: CLear Direction flag). A "stosb" utasítással és párjaival később még találkozni fogunk. Tudjuk, hogy a "rep" segítségével egy utasítást tudunk ciklikusan végezni. Hogy oldjuk akkor meg azt, hogy mégiscsak többet ismételjünk egyszerre, vagyis a ciklusmag egy utasításblokkból álljon? Megoldás lehet persze az is, hogy egy külső részben írunk egy sok utasításból álló rutint, s "ret"-tel (visszatérés) fejezzük be és ezt a rutint hívjuk egy utasítással, a "call"-lal ciklikusan. Ezt azonban már függvényhívásnak nevezik, és annak ciklikus formáját kultúrkörökben nem tartják teljesen etikusnak - ha csak nem direkt ez a cél... A megoldás a "loop" utasítás: ezt a ciklusmag végére kell tenni és annyiszor ugrunk el vele a ciklus elejére, amennyit az ECX regiszterben beállítottunk. mov al, 0AAh mov ecx, 3 mov edi, Offset terulet cld push cs pop es feltoltes: stosb loop feltoltes ; itt még lehetnek utasítások terulet: db 0 db 0 db 0 Következzenek hát a nem determinisztikus ciklusok. Ezeknek két fajtája van: az elöltesztelő (while) és a hátultesztelő (do while). Az elöltesztelő ciklusnál a ciklusfejben van egy teszt, ha ez egy feltételt igaznak talál, akkor végrehajtódik a ciklusmag és visszatérünk a ciklusfejhez. Ezért hívjuk ezt while (amíg) ciklusnak. A hátultesztelő ciklusnál először lefut a ciklusmag, majd a cikluslábban egy teszt eldönti, hogy szükséges-e a ciklusmagot újra végrehajtani. Ez más néven a do while (csináld, amíg) ciklus. Nos, íme, egy while ciklus: Ciklusfej: cmp al, 0 je vege ciklusmag: dec al jmp ciklusfej vege: Ha ezt C-nyelven írjuk le, az így néz ki: while( al!= 0x0 ) { --al; } Amíg "al" nem egyenlő 0x0, addig dekrementáld (eggyel csökkentsd) "al" értékét. Ha a program indulásakor "al" értéke nulla volt, akkor be sem lépünk a ciklusba. Ellentétben áll ezzel a következő, do while példa:

9 ciklusmag: dec al cikluslab: cmp al, 0 je vege jmp ciklusmag vege: vagyis do { --al; } while( al!= 0x0 ); Először dekrementáljuk "al" értékét, végül megnézzük, hogy nulla-e. Ha annyi, kilépünk, ha nem, akkor visszaugrunk a ciklusmagra. Feltételek: Mikor állítunk magunk elé feltételeket? Ha esik az eső, viszek esernyőt, ha nem, hát nem. Láthatóan ez egy feltétel, arra használjuk, hogy eldöntsük, mi az optimális viselkedésforma. cmp byte ptr [idojaras], ESO je kell mov eax, 0 jmp tovabb kell: mov eax, ESERNYO tovabb: Tegyük fel, hogy ez egy olyan program részlete, amelyben az "idojaras" címkénél tárolt érték a következő lehet: NAP, ESO, HO, SZEL. Korábban megismerkedtünk a * operátorral, ami arra használatos, hogy egy címkénél található értéket kivegyen (indirekció). A "cmp" utasítás két értéket hasonlít össze úgy, hogy az első értékből kivonja a második értéket, majd beállítja a flag regiszter bizonyos bitjeit. Állítja a ZERO flag-et, akkor lesz IGAZ értékű, ha a kivonás eredménye nullát ad, vagyis a két érték egyezett. Állítja a CARRY (átvitel) flag értékét is, akkor lesz IGAZ, ha az első érték kisebb, mint a második, vagyis a kivonásnak negatív eredménye lesz: kell még értékátvitel (CARRY), hogy nulla legyen. Tegyük fel, hogy az "idojaras" címkénél található érték ESO volt, vagyis esik az eső. Ebben az esetben az összehasonlítás eredménye: "egyenlő". A "je" utasítás használható ilyenkor, "JUMP IF EQUAL" (ugrás, ha egyenlő). A feltételes ugróutasításokkal vigyázni kell, ugyanis maximum 127 bájtot ugorhatunk velük előrehátra! Az az oka ennek a megkötésnek, hogy a feltételes ugróutasítások egy 8 bites relatív címet kapnak, ami a jelenlegi EIP és a megadott cím különbsége. Nyolc biten 2^8, vagyis 256 féle értéket lehet ábrázolni. A processzor megengedi az előre és hátra ugrást, vagyis ezen a 8 biten negatív (előjeles egész) számokat kell ábrázolni. A nyolc bites előjeles egészt előjeles karakter adattípusnak (signed char) hívjuk, értéktartománya [- 128,+127]. Mivel a hasonlítás eredménye "egyenlő" volt, a vezérlés a "kell" címkére adódik át. Itt az EAX regiszter egy "ESERNYO" értéket kap. Vagyis viszünk esernyőt. Ezek után a vezérlés a "tovabb" címkére kerül. Amennyiben az időjárás nem esős, nem ugrunk a "kell" címkére, és EAX regiszter nulla értéket kap, majd elugrunk a "tovabb" címkére. Hogyan lehetséges, hogy ábrázolni tudjuk az ESO, NAP, HO, SZEL, ESERNYO fogalmakat? A gép számokat ismer csupán, vagyis ezek is számértékként vannak meghatározva. Azokat az értékeket, amelyeket elnevezünk, vagyis később már egy egyezményes névvel tudunk elérni, konstans literáloknak nevezzük.

10 A következőkben egy olyan programot fogunk megvizsgálni, amely egy négyszögről eldönti, hogy "a" oldala nagyobb-e, mint 2, és "b" oldala kisebb-e, mint négy. Ha igaz az első feltétel, akkor EAX értéke igaz lesz (nem hamis, vagyis nem nulla), ha a második feltétel igaz, akkor EBX értéke igaz lesz. Ha tehát mindkét feltétel igaz, akkor EAX=EBX=1, ha pedig egyik sem, akkor EAX=EBX=0. a_oldal: cmp byte ptr [a], 2 ja atobb mov eax, 0 jmp b_oldal atobb: mov eax, 1 b_oldal: cmp byte ptr [b], 4 jl bkevesebb mov ebx, 0 jmp vege bkevesebb: mov ebx, 1 vege: A feltételes ugrásoknál meg kell különböztetni előjeles és előjel nélküli (unsigned) feltételt. Előjeles feltételek a "nagyobb, mint" (Greater than), "nagyobb, vagy egyenlő" (Greater or Equal), "alacsonyabb, mint" (Below than), "alacsonyabb, vagy egyenlő" (Below or Equal). Az Assembly nyelvekben ezek tagadása is használható: például "nem nagyobb, mint" (Not Greater than) ugyanazt jelenti, mint az "alacsonyabb, vagy egyenlő". Példánk az előjel nélküli összehasonlításokat mutatja be, "ugrás, ha több, mint kettő" (Jump if Above than) és "ugrás, ha kevesebb, mint négy" (Jump if Less than). Az Assembly alacsony szintű nyelvcsalád. Magas szintű nyelvekben, melyekben "emberi jellegű szavakkal és kifejezésekkel" tudjuk megfogalmazni a programban végrehajtandó tevékenységeket, a feltételek kiértékelését az "if" utasítás végzi. Például C nyelven az első program így hangzik: if( idojaras == ESO ) { eax = ESERNYO; } else { eax = 0; } A második példaprogram ennek megfelelően így néz ki C nyelven: if( a > 2 ) { eax = 1; } else { eax = 0; } if( b < 4 ) { ebx = 1; } else { ebx = 0; } Előfordul, hogy ismerünk több esetet, melyből egy bizonyos időpontban egyszerre csak egy áll elő. Az esetek kiválasztására a magas szintű nyelvekben a "case" (eset) kulcsszó használatos:

11 switch( idojaras ){ case ESO : { eax = ESERNYO; } case HO : { eax = KABAT+SAL+SAPKA+KESZTYU; } case SZEL : { eax = KABAT; } case NAP : { eax = NAPSZEMUVEG; } default : { eax = 0; } // eldonthetetlen idojaras :)) // inkabb nem veszunk fel semmit } Készítsük el ezt a programot is Assembly nyelven. cmp byte ptr [idojaras], ESO je esernyo cmp byte ptr [idojaras], HO je telicucc cmp byte ptr [idojaras], SZEL je fujaszel cmp byte ptr [idojaras], NAP je sutanap default: mov eax, 0 jmp vege esernyo: mov eax, ESERNYO jmp vege telicucc: mov eax, KABAT+SAL+SAPKA+KESZTYU jmp vege fujaszel: mov eax, KABAT jmp vege sutanap: mov eax, NAPSZEMUVEG vege: A CPU rendelkezésére álló memóriaterület olyan nagy, hogy egyetlen regiszter nem tudja végig címezni a teljes memóriát. Ezért egy memóriacím elôállításához mindig két regisztert használunk fel. Az egyiket szegmensregiszternek, a másikat

12 offszet regiszternek hívjuk. Az offszetregiszterek általá-ban a mutató- (BP, IP, SP), vagy az index- (SI, DI) regiszterek. A tényleges memóriacím így a két regiszter segítségével áll elô úgy, hogy a szegmens regiszter értékének tizenhat-szorosához hozzáadódik az offszetregiszter értéke. Például ha a CS regiszter értéke 1A2Ch, az IP regiszter értéke pedig 2B17h, akkor a CS:IP regiszterpár értéke 1CDD7h. Az alábbi ábrán látható, hogy a 16-tal való szorzást egy hexadecimális jeggyel való balra léptetéssel helyettesíthetjük. Fizikai cím = SZEGMENS*16 + OFFSET 1 A 2 C 2 B C D D 7 Legyen például a szegmenscím 0040h, az offset 0002h. Ekkor a cím így irható fel : 0040:0002. Ebben az esetben a szegmenscímet 16-tal szorozva 0400h értéket kapunk. Ehhez hozzáadva a 0002h értéket 0402h fizikai cím adódik. A memóriacímek alkotásához a lehetséges offszet-regisztereknek van egy alapértelmezett szegmensregiszter párja. Az alábbi táblázat mutatja, hogy mely offszetregiszterhez mely szegmensregiszter tartozik alapértelme-zésben. SI, DI: IP: BP, SP: DS CS SS

13 A CPU SS regisztere kijelöli a memória egy 64K-s darabját (szegmensét) úgy, hogy az SS éppen aktuális értéke mellett az SP értéket változtatva milyen memóriacímeket érhetünk el. Ha pl. az SS értéke 1234h, akkor a verem szegmens (stack segment) a memória 1234h:0000h-tól 1234:FFFFh-ig terjedô része. A memóriának ezt a szegmensét veremnek nevezzük. A verembe adatokat lehet berakni, és onnan kivenni úgy, hogy mindig a legutoljára berakott értéket vesszük ki. A verem szegmensen belül az SP regiszter mindig az utoljára berakott adatra mutat. Ha újabbat akarunk berakni, akkor elôször bekerülô adat méretével csökkentjük az SP értékét, majd az SS:SP címre beírjuk az adatot. Ezt végzi a PUSH utasítás. Ha viszont adatot akarunk kivenni a verembôl, akkor elôször kivesszük az SS:SP által mutatott címrôl az adatot, majd a megfelelô mennyiséggel megnöveljük az SP értékét. Ezt végzi a POP utasítás. A verem tehát magasabb címtôl kezdve telitôdik, és mindig páros darab byte kerülhet bele és belôle ki. Például tegyük fel, hogy az AX, BX regiszterek tartalma rendre 0001h, 0002h, az SP értéke pedig FFF0h, és az alábbi utasításokat hajtjuk végre: PUSH AX PUSH BX POP AX POP BX Ekkor az alábbi módon alakulnak a memória- és regiszter értékek (xx: tetszôleges érték): Kezdetben: SS:FFECh: xx SS:FFEEh: xx SP-> SS:FFF0h: xx A PUSH AX után (1): SS:FFECh: xx SP-> SS:FFEEh: 0001h SS:FFF0h: xx

14 A POP AX után (3): A PUSH BX után (2): SP-> SS:FFECh: 0002h SS:FFEEh: 0001h SS:FFF0h: xx SS:FFECh: 0002h SP-> SS:FFEEh: 0001h SS:FFF0h: xx és AX tartalma 0002h. A POP BX után (4): SS:FFECh: 0002h SS:FFEEh: 0001h SP-> SS:FFF0h: xx és BX tartalma 0001h.

15 A verem működése késôbb még fontos szerepet fog játszani. A CPU a következôképpen működik. 1. A CS:IP regiszterpár által mutatott helyrôl kiolvassa az éppen végrehajtandó utasítás kódját. 2. A kódból meghatározza, hogy hány byte-nyi paraméter tartozik még az utasításhoz, ennyi byte-ot kiolvas a kód utáni területrôl. Ezek lesznek az utasítás operandusai. 3. Végrehajtja a kód által meghatározott utasítást a beolvasott operandusokkal. 4. Növeli a CS:IP regiszter értékét annyival, amennyi byte volt a teljes utasítás operandusokkal együtt. Do Repeat Kód:=Kiolvas(CS:IP) For i:=1 To Paraméterek_Száma[Kod] Operandusok[i]:=Kiolvas(CS:IP+i) Végrehajt(Kód,Operandusok) (CS:IP) := (CS:IP)+Hossz[Kód] Until Áramszünet Megjegyzés: A fenti algoritmus csak vázlat, ugyanis vannak olyan utasítások, amelyek kódja nem egy, hanem két byte-os. Ezen kívül a vezérlésátadó utasítások működése is "sántít".

16 típus hány bájton tárolódik Boolean 1 Byte 1 Shortint 1 Char 1 Word 2 Integer 2 Longint 4 Real 6 String[n] n+1 String 256 Kövessük végig a leírtakat egy példán. Tekintsük az alábbi unit-ból és főprogramból álló Pascal programot, és a memóriabeli elhelyezkedését illusztráló ábrát!

17 Unit Seged; Interface Var B1:Byte; Procedure Elj3; Implementation Procedure Elj3; Var B2:Byte; Begin {...} End; { } BEGIN B1:=5; END. Program FoPrg; Uses Seged; Var B3:Byte; { } Procedure Elj1; Begin {...} End; { } Procedure Elj2; Far; Begin {...} End; { } BEGIN Elj1; Elj3; B3:=7; END. A felhasznált unit és a főprogram A memória vázlata Amint az a memória vázlatából is látszik, a főprogram moduljában definiált két eljárás és maga a főprogram egy közös kódszegmensbe kerül, a unit eljárása és annak a főprogramja pedig még egy kódszegmensbe. Ha lennének még további modulok is, akkor azok is újabb és újabb kódszegmensekbe kerülnének. Jól látszik az ábrából, hogy a főprogram a unit eljárása más szegmensben van, ezért csak távoli (far) eljáráshívással hívható.

18

A 32 bites x86-os architektúra regiszterei

A 32 bites x86-os architektúra regiszterei Memória címzési módok Jelen nayagrészben az Intel x86-os architektúrára alapuló 32 bites processzorok programozását tekintjük. Egy program futása során (legyen szó a program vezérléséről vagy adatkezelésről)

Részletesebben

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

találhatók. A memória-szervezési modell mondja meg azt, hogy miként Memória címzési módok Egy program futása során (legyen szó a program vezérléséről vagy adatkezelésről) a program utasításai illetve egy utasítás argumentumai a memóriában találhatók. A memória-szervezési

Részletesebben

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

Adatelérés és memóriakezelés Adatelérés és memóriakezelés Jelen nayagrészben az Intel x86-os architektúrára alapuló 32 bites processzorok programozását tekintjük. Egy program futása során (legyen szó a program vezérléséről vagy adatkezelésről)

Részletesebben

Programozás alapjai. 10. előadás

Programozás alapjai. 10. előadás 10. előadás Wagner György Általános Informatikai Tanszék Pointerek, dinamikus memóriakezelés A PC-s Pascal (is) az IBM PC memóriáját 4 fő részre osztja: kódszegmens adatszegmens stackszegmens heap Alapja:

Részletesebben

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.

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. Példák számok kiírására 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. Decimális számok kiírása Az alábbi

Részletesebben

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

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 Mi az assembly Gyakorlatias assembly bevezető Fordítóprogramok előadás (A, C, T szakirány) programozási nyelvek egy csoportja gépközeli: az adott processzor utasításai használhatóak általában nincsenek

Részletesebben

Máté: Assembly programozás

Máté: Assembly programozás Dr. Máté Eörs docens Képfeldolgozás és Számítógépes Grafika Tanszék Árpád tér 2. II. em. 213 6196, 54-6196 (6396, 54-6396) http://www.inf.u-szeged.hu/~mate Tantárgy leírás: http://www.inf.u-szeged.hu/oktatas/kurzusleirasok/

Részletesebben

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

Digitális rendszerek. Utasításarchitektúra szintje Digitális rendszerek Utasításarchitektúra szintje Utasításarchitektúra Jellemzők Mikroarchitektúra és az operációs rendszer közötti réteg Eredetileg ez jelent meg először Sokszor az assembly nyelvvel keverik

Részletesebben

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.

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. 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. 1. Regiszterek Regiszterek fajtái a. Szegmensregiszterek cs (code):

Részletesebben

Aritmetikai utasítások I.

Aritmetikai utasítások I. Aritmetikai utasítások I. Az értékadó és aritmetikai utasítások során a címzési módok különböző típusaira látunk példákat. A 8086/8088-as mikroprocesszor memóriája és regiszterei a little endian tárolást

Részletesebben

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

Archi2 Gyak. (Processzorok Utasításszintű Kezelése) 2014 ősz Archi2 Gyak (Processzorok Utasításszintű Kezelése) 2014 ősz Ajánlott irodalom Agárdi Gábor: Gyakorlati Assembly, LSI Oktatóközpont, 1996, ISBN 963 577 117 7 Agárdi G.: Gyakorlati Assembly haladóknak, LSI

Részletesebben

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

1. Az utasítás beolvasása a processzorba A MIKROPROCESSZOR A mikroprocesszor olyan nagy bonyolultságú félvezető eszköz, amely a digitális számítógép központi egységének a feladatait végzi el. Dekódolja az uatasításokat, vezérli a műveletek elvégzéséhez

Részletesebben

Stack Vezérlés szerkezet Adat 2.

Stack Vezérlés szerkezet Adat 2. Stack Vezérlés szerkezet Adat 2. Kód visszafejtés. Izsó Tamás 2013. november 14. Izsó Tamás Stack Vezérlés szerkezet Adat 2./ 1 Változó típusú paraméterekátadása 1. #include < s t d i o. h> int64 myfunc

Részletesebben

Assembly. Iványi Péter

Assembly. Iványi Péter Assembly Iványi Péter További Op. rsz. funkcionalitások PSP címének lekérdezése mov ah, 62h int 21h Eredmény: BX = PSP szegmens címe További Op. rsz. funkcionalitások Paraméterek kimásolása mov di, parameter

Részletesebben

Processzorok Utasításszintű Kezelése tavasz

Processzorok Utasításszintű Kezelése tavasz Processzorok Utasításszintű Kezelése 2014 tavasz Ajánlott irodalom Agárdi Gábor: Gyakorlati Assembly, LSI Oktatóközpont, 1996, ISBN 963 577 117 7 Agárdi G.: Gyakorlati Assembly haladóknak, LSI oktatóközpont,

Részletesebben

Paraméter átadás regisztereken keresztül

Paraméter átadás regisztereken keresztül Eljárások paramétereinek átadási módjai Az eljárások deklarációjánál nincs mód arra, hogy paramétereket adjunk meg, ezért más, közvetett módon tudunk átadni paramétereket az eljárásoknak. Emlékeztetőül:

Részletesebben

Assembly. Iványi Péter

Assembly. Iványi Péter Assembly Iványi Péter Miért? Ma már ritkán készül program csak assembly-ben Általában bizonyos kritikus rutinoknál használják Miért nem használjuk? Magas szintű nyelven könnyebb programozni Nehéz más gépre

Részletesebben

Assembly utasítások listája

Assembly utasítások listája Assembly utasítások listája Bevezetés: Ebben a segédanyagban a fontosabb assembly utasításokat szedtem össze. Az utasítások csoportosítva vannak. A fontos kategóriába azok az utasítások tartoznak, amiknek

Részletesebben

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

Assembly Rekurzív függvények, EXE, C programok. Iványi Péter Assembly Rekurzív függvények, EXE, C programok Iványi Péter Algoritmusok előadás Rekurzív függvény FÜGGVÉNY nyomtat(n) print n HA n!= 0 nyomtat(n-1) ELÁGAZÁS VÉGE FÜGGVÉNY VÉGE Rekurzív függvény org 100h

Részletesebben

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

Assembly Címzési módok. Iványi Péter Assembly Címzési módok Iványi Péter Gépi kód Gépi kód = amit a CPU megért 1-13 byte hosszúak lehetnek az utasítások Kb. 20 000 variációja van a gépi kódú utasításoknak Számítógép architektúrától függ Feszültség

Részletesebben

Assembly programozás levelező tagozat

Assembly programozás levelező tagozat Assembly programozás levelező tagozat Szegedi Tudományegyetem Képfeldolgozás és Számítógépes Grafika Tanszék 2011-2012-2 Tematika Assembly nyelvi szint. Az Intel 8086/88 regiszter készlete, társzervezése,

Részletesebben

assume CS:Code, DS:Data, SS:Stack Start: xor di, di mov si, 1 Torles int 10h mov dl, 40 xor bh, bh mov ah, 02h Kesleltet int 16h

assume CS:Code, DS:Data, SS:Stack Start: xor di, di mov si, 1 Torles int 10h mov dl, 40 xor bh, bh mov ah, 02h Kesleltet int 16h Fealadat3: labda.asm Feladat meghatározása A program célja az assembly rutinok időzítési lehetőségeinek bemutatása. Az időzítés az AH00, INT1Ah funkció segítségével történik. A program egy labda leesését

Részletesebben

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradék

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradék Gyakorló feladatok Számrendszerek: Feladat: Ábrázold kettes számrendszerbe a 639 10, 16-os számrendszerbe a 311 10, 8-as számrendszerbe a 483 10 számot! /2 Maradék /16 Maradék /8 Maradék 639 1 311 7 483

Részletesebben

2016/08/31 02:45 1/6 Hardver alapok

2016/08/31 02:45 1/6 Hardver alapok 2016/08/31 02:45 1/6 Hardver alapok < Hardver Hardver alapok Szerző: Sallai András Copyright Sallai András, 2011, 2013, 2014 Licenc: GNU Free Documentation License 1.3 Web: http://szit.hu Bevezetés A számítógépet

Részletesebben

Mutatók és mutató-aritmetika C-ben március 19.

Mutatók és mutató-aritmetika C-ben március 19. Mutatók és mutató-aritmetika C-ben 2018 március 19 Memória a Neumann-architektúrában Neumann-architektúra: a memória egységes a címzéshez a természetes számokat használjuk Ugyanabban a memóriában van:

Részletesebben

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

Assembly Utasítások, programok. Iványi Péter Assembly Utasítások, programok Iványi Péter Assembly programozás Egyszerű logikán alapul Egy utasítás CSAK egy dolgot csinál Magas szintű nyelven: x = 5 * z + y; /* 3 darab művelet */ Assembly: Szorozzuk

Részletesebben

assume CS:Code, DS:Data, SS:Stack Start mov dl, 100 mov dh, 100 push dx Rajz

assume CS:Code, DS:Data, SS:Stack Start mov dl, 100 mov dh, 100 push dx Rajz Feladat5: rajzolo.asm Feladat meghatározása A feladat célja bemutatni egy egyszerű grafikai program segítségével a közvetlen címzést (grafikus VGA 320*200). A program a kurzor mozgató gombok segítségével

Részletesebben

Vezérlési szerkezetek

Vezérlési szerkezetek Vezérlési szerkezetek Szelekciós ok: if, else, switch If Segítségével valamely ok végrehajtását valamely feltétel teljesülése esetén végezzük el. Az if segítségével valamely tevékenység () végrehajtását

Részletesebben

Programozás alapjai. 5. előadás

Programozás alapjai. 5. előadás 5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk

Részletesebben

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

Számítógépek felépítése Számítógépek felépítése Emil Vatai 2014-2015 Emil Vatai Számítógépek felépítése 2014-2015 1 / 14 Outline 1 Alap fogalmak Bit, Byte, Word 2 Számítógép részei A processzor részei Processzor architektúrák

Részletesebben

A hibát az alábbi Python program segítségével tudjuk előidézni:

A hibát az alábbi Python program segítségével tudjuk előidézni: Bevezető Az ismertetésre kerülő biztonsági hiba 0day kategóriába tartozik, ezért sem a termék, sem a teljes hiba kihasználását lehetővé tevő kód bemutatása nem történik meg. A leírás célja az alkalmazott

Részletesebben

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter Adatszerkezetek Tömb, sor, verem Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot

Részletesebben

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás Kódgenerálás Memóriagazdálkodás Kódgenerálás program prológus és epilógus értékadások fordítása kifejezések fordítása vezérlési szerkezetek fordítása Kódoptimalizálás L ATG E > TE' E' > + @StPushAX T @StPopBX

Részletesebben

2017/12/16 21:33 1/7 Hardver alapok

2017/12/16 21:33 1/7 Hardver alapok 2017/12/16 21:33 1/7 Hardver alapok < Hardver Hardver alapok Szerző: Sallai András Copyright Sallai András, 2011, 2013, 2014 Licenc: GNU Free Documentation License 1.3 Web: http://szit.hu Bevezetés A számítógépet

Részletesebben

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2019. augusztus 29. Feladat: írjuk ki az els 10 természetes szám négyzetét! #i n c l u d e i n t main ( v o i d ) { p r

Részletesebben

SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1

SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1 INFORMATIKAI RENDSZEREK ALAPJAI (INFORMATIKA I.) 1 NEUMANN ARCHITEKTÚRÁJÚ GÉPEK MŰKÖDÉSE SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1 Ebben a feladatban a következőket fogjuk áttekinteni: Neumann rendszerű számítógép

Részletesebben

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Tömb Ugyanolyan típusú elemeket tárol A mérete előre definiált kell legyen és nem lehet megváltoztatni futás során Legyen n a tömb mérete. Ekkor:

Részletesebben

Szegmentálás. Memória kezelési stratégia mely a felhasználó nézőpontját támogatja Például:

Szegmentálás. Memória kezelési stratégia mely a felhasználó nézőpontját támogatja Például: Szegmentálás 1 Szegmentálás Memória kezelési stratégia mely a felhasználó nézőpontját támogatja Például: Egy program szegmensekből áll Mindegyik szegmens külön címtér Egy eljárás nullás címen kezdődik

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

Az assembly nyelv sor-orientált nyelv, tehát minden sorba pontosan egy utasítás kerül. Egy sor mezőkből áll a következőképpen:

Az assembly nyelv sor-orientált nyelv, tehát minden sorba pontosan egy utasítás kerül. Egy sor mezőkből áll a következőképpen: Informatika szigorlat 16-os tétel: Az assembly nyelvek tulajdonságai és fordítása Az assembly nyelv tulajdonképpen a gépi kód szimbolikus megfelelője, azért jött létre, hogy könnyebben lehessen programozni

Részletesebben

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

Mikroprocesszor CPU. C Central Központi. P Processing Számító. U Unit Egység Mikroprocesszor CPU C Central Központi P Processing Számító U Unit Egység A mikroprocesszor általános belső felépítése 1-1 BUSZ Utasítás dekóder 1-1 BUSZ Az utasítás regiszterben levő utasítás értelmezését

Részletesebben

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban... A kódgenerálás helye a fordítási folyamatban Forrásprogram Forrás-kezelő (source handler) Kódgenerálás I. (kifejezések és vezérlési szerkezetek) Fordítóprogramok előadás (A,C,T szakirány) 2008. őszi félév

Részletesebben

Adatok ábrázolása, adattípusok

Adatok ábrázolása, adattípusok Adatok ábrázolása, adattípusok Összefoglalás Adatok ábrázolása, adattípusok Számítógépes rendszerek működés: információfeldolgozás IPO: input-process-output modell információ tárolása adatok formájában

Részletesebben

Szoftvertervezés és -fejlesztés I.

Szoftvertervezés és -fejlesztés I. Szoftvertervezés és -fejlesztés I. Operátorok Vezérlési szerkezetek Gyakorlás 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik.

Részletesebben

Occam 1. Készítette: Szabó Éva

Occam 1. Készítette: Szabó Éva Occam 1. Készítette: Szabó Éva Párhuzamos programozás Egyes folyamatok (processzek) párhuzamosan futnak. Több processzor -> tényleges párhuzamosság Egy processzor -> Időosztásos szimuláció Folyamatok közötti

Részletesebben

6. fejezet: Ciklusok

6. fejezet: Ciklusok 6. fejezet: Ciklusok Mint a nyelvekben általában, itt is léteznek ciklusok. Az alapvető három ciklus-típus: elöltesztelő, hátultesztelő és számláló. Lássuk ezeket sorban! Elöltesztelő = while. A while

Részletesebben

Karunkról Kari digitális könyvtár

Karunkról Kari digitális könyvtár . előadás Jegyzet www.inf.elte.hu Karunkról Kari digitális könyvtár i az assembly? gépi kód: a számítógép által közvetlenül értelmezett és végrehajtott jelsorozat assembly: a gépi kód emberek számára könnyen

Részletesebben

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

Mintavételes szabályozás mikrovezérlő segítségével Automatizálási Tanszék Mintavételes szabályozás mikrovezérlő segítségével Budai Tamás budai.tamas@sze.hu http://maxwell.sze.hu/~budait Tartalom Mikrovezérlőkről röviden Programozási alapismeretek ismétlés

Részletesebben

B I T M A N B I v: T M A N

B I T M A N B I v: T M A N Műszaki informatika Tesztek+Megoldások B I v: T 2015.04.19 M A N 1/42 Tesztek + Megoldások Alapfogalmi kitérő kérdéssor IPA kérdéssor CPA kérdéssor 2/42 Ellenőrző kérdések 1. 1. Melyik Neumann elv következménye

Részletesebben

Aritmetikai utasítások

Aritmetikai utasítások Aritmetikai utasítások Az értékadó és aritmetikai utasítások során a címzési módok különböző típusaira látunk példát. A 8086/8088-as processzor memóriája és regiszterei a little endian tárolást követik,

Részletesebben

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

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -1- Mit tudunk már? Típus fogalma char, int, float,

Részletesebben

Készítette: Nagy Tibor István

Készítette: Nagy Tibor István Készítette: Nagy Tibor István A változó Egy memóriában elhelyezkedő rekesz Egy értéket tárol Van azonosítója (vagyis neve) Van típusa (milyen értéket tárolhat) Az értéke értékadással módosítható Az értéke

Részletesebben

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Python Változók Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Név Érték Típus Memóriacím A változó értéke (esetleg más attribútuma is) a program futása alatt

Részletesebben

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

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3) Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT Mit tudunk már? Típus fogalma char, int, float, double változók deklarációja operátorok (aritmetikai, relációs, logikai,

Részletesebben

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

A számítógép alapfelépítése Informatika alapjai-6 számítógép felépítése 1/8 számítógép alapfelépítése Nevezzük számítógépnek a következő kétféle elrendezést: : Harvard struktúra : Neumann struktúra kétféle elrendezés alapvetően egyformán

Részletesebben

Memóriakezel. riakezelés s I. A memória címzése; A memória felosztása; Abszolút változó (rádefiniálás); Memóriatömbök. dr.

Memóriakezel. riakezelés s I. A memória címzése; A memória felosztása; Abszolút változó (rádefiniálás); Memóriatömbök. dr. Memóriakezel riakezelés s I. A memória címzése; A memória felosztása; Abszolút változó (rádefiniálás); Memóriatömbök. Készítette: dr. Nyári Tibor Emlékeztető! A memória címzc mzése: A memóri riát byte-onk

Részletesebben

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

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix 2. Adattípusonként különböző regisztertér Célja: az adatfeldolgozás gyorsítása - különös tekintettel a lebegőpontos adatábrázolásra. Szorzás esetén karakterisztika összeadódik, mantissza összeszorzódik.

Részletesebben

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája Adatszerkezetek Összetett adattípus Meghatározói: A felvehető értékek halmaza Az értékhalmaz struktúrája Az ábrázolás módja Műveletei Adatszerkezet fogalma Direkt szorzat Minden eleme a T i halmazokból

Részletesebben

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

1. ábra: Perifériára való írás idődiagramja BELÉPTETŐ RENDSZER TERVEZÉSE A tárgy első részében tanult ismeretek részbeni összefoglalására tervezzük meg egy egyszerű mikroprocesszoros rendszer hardverét, és írjuk meg működtető szoftverét! A feladat

Részletesebben

Intel x86 utasításkészlet

Intel x86 utasításkészlet Intel x86 utasításkészlet Kód visszafejtés. Izsó Tamás 2013. október 31. Izsó Tamás Intel x86 utasításkészlet/ 1 Section 1 Intel mikroprocesszor Izsó Tamás Intel x86 utasításkészlet/ 2 Intel mikroprocesszor

Részletesebben

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

Számítógépek felépítése, alapfogalmak 2. előadás Számítógépek felépítése, alapfogalmak Lovas Szilárd, Krankovits Melinda SZE MTK MSZT kmelinda@sze.hu B607 szoba Nem reprezentatív felmérés kinek van ilyen számítógépe? 2 Nem reprezentatív felmérés

Részletesebben

Informatika érettségi vizsga

Informatika érettségi vizsga Informatika 11/L/BJ Informatika érettségi vizsga ÍRÁSBELI GYAKORLATI VIZSGA (180 PERC - 120 PONT) SZÓBELI SZÓBELI VIZSGA (30 PERC FELKÉSZÜLÉS 10 PERC FELELET - 30 PONT) Szövegszerkesztés (40 pont) Prezentáció-készítés

Részletesebben

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

Számítógép Architektúrák Számítógép Architektúrák Utasításkészlet architektúrák 2015. április 11. Budapest Horváth Gábor docens BME Hálózati Rendszerek és Szolgáltatások Tsz. ghorvath@hit.bme.hu Számítógép Architektúrák Horváth

Részletesebben

Bevezetés a számítástechnikába

Bevezetés a számítástechnikába Bevezetés a számítástechnikába, Címzési módok, Assembly Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. november 2/9. ú utasítás

Részletesebben

BASH script programozás II. Vezérlési szerkezetek

BASH script programozás II. Vezérlési szerkezetek 06 BASH script programozás II. Vezérlési szerkezetek Emlékeztető Jelölésbeli különbség van parancs végrehajtása és a parancs kimenetére való hivatkozás között PARANCS $(PARANCS) Jelölésbeli különbség van

Részletesebben

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe Mechatronika és mikroszámítógépek 2017/2018 I. félév Bevezetés a C nyelvbe A C programozási nyelv A C egy általános célú programozási nyelv, melyet Dennis Ritchie fejlesztett ki Ken Thompson segítségével

Részletesebben

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.

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. 1. Regiszterek 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. Általános célú regiszterek AX akkumulátor: aritmetikai

Részletesebben

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

A Számítógépek felépítése, mőködési módjai Mechatronika, Optika és Gépészeti Informatika Tanszék Kovács Endre tud. Mts. A Számítógépek felépítése, mőködési módjai Mikroprocesszoros Rendszerek Felépítése Buszrendszer CPU OPERATÍV TÁR µ processzor

Részletesebben

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Javascript Változók Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Név Érték Típus Memóriacím A változó értéke (esetleg más attribútuma is) a program futása

Részletesebben

A programozás alapjai

A programozás alapjai A programozás alapjai Változók A számítógép az adatokat változókban tárolja A változókat alfanumerikus karakterlánc jelöli. A változóhoz tartozó adat tipikusan a számítógép memóriájában tárolódik, szekvenciálisan,

Részletesebben

A C# programozási nyelv alapjai

A C# programozási nyelv alapjai A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet

Részletesebben

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

Máté: Számítógép architektúrák A mikroprogram Mic 1: 4.. ábra. 51x3 bites vezérlőtár a mikroprogramnak, MPC (MicroProgram Counter): mikroprogram utasításszámláló. MIR (MicroInstruction Register): mikroutasítás regiszter. Az adatút ciklus

Részletesebben

Adatszerkezetek 1. Dr. Iványi Péter

Adatszerkezetek 1. Dr. Iványi Péter Adatszerkezetek 1. Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot kódoltan tároljuk

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve

Részletesebben

PE/COFF fájl formátum

PE/COFF fájl formátum PE/COFF fájl formátum Kód visszafejtés. Izsó Tamás 2013. december 5. Izsó Tamás PE/COFF fájl formátum/ 1 Szimbólumtábla A programozási nyelvekben az típusokra, adatokra, függvényekre, ugrási címekre szimbólikus

Részletesebben

Máté: Assembly programozás

Máté: Assembly programozás Szegmens, szegmens csoport sz_név SEGMENT aling_type combine_type osztály... szegmens sz_név ENDS sz_név a szegmens (szelet) neve. A fordító az azonos nevű szegmens szeleteket úgy tekinti, mintha folyamatosan,

Részletesebben

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás A tárgy órái Előadás hetente (St101) csüt. 8:15 Bécsi Tamás C elmélet Ajánlott irodalom Dennis Ritchie: A C programozási nyelv Gyakorlat hetente

Részletesebben

DSP architektúrák dspic30f család

DSP architektúrák dspic30f család DSP architektúrák dspic30f család A Microchip 2004 nyarán piacra dobta a dspic30f családot, egy 16 bites fixpontos DSC. Mivel a mikróvezérlők tantárgy keretén belül a PIC családdal már megismerkedtetek,

Részletesebben

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

SZÁMÍTÓGÉP ARCHITEKTÚRÁK SZÁMÍTÓGÉP ARCHITEKTÚRÁK Kártyás ajtónyitó tervezése Horváth Gábor BME Hálózati Rendszerek és Szolgáltatások Tanszék ghorvath@hit.bme.hu, belso@hit.bme.hu Budapest, 2018-02-19 Hálózati Rendszerek és Szolgáltatások

Részletesebben

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre. C memóriakezelés Ez a kis segédanyag az adatszerkezetek órán használt eszközök megértését hivatott elősegíteni. A teljesség igénye nélkül kerül bemutatásra a mutató típus és a dinamikus memóriakezelés.

Részletesebben

Verem Verem mutató 01

Verem Verem mutató 01 A számítástechnikában a verem (stack) egy speciális adatszerkezet, amiben csak kétféle művelet van. A berak (push) egy elemet a verembe rak, a kivesz (pop) egy elemet elvesz a verem tetejéről. Mindig az

Részletesebben

Hardverközeli programozás 1 1. gyakorlat. Kocsis Gergely 2015.02.17.

Hardverközeli programozás 1 1. gyakorlat. Kocsis Gergely 2015.02.17. Hardverközeli programozás 1 1. gyakorlat Kocsis Gergely 2015.02.17. Információk Kocsis Gergely http://irh.inf.unideb.hu/user/kocsisg 2 zh + 1 javító (a gyengébbikre) A zh sikeres, ha az elért eredmény

Részletesebben

Bevezetés a C++ programozásba

Bevezetés a C++ programozásba Bevezetés a C++ programozásba A program fogalma: A program nem más, mint számítógép által végrehajtható utasítások sorozata. A számítógépes programokat különféle programnyelveken írhatjuk. Ilyen nyelvek

Részletesebben

2. Fejezet : Számrendszerek

2. Fejezet : Számrendszerek 2. Fejezet : Számrendszerek The Architecture of Computer Hardware and Systems Software: An Information Technology Approach 3. kiadás, Irv Englander John Wiley and Sons 2003 Wilson Wong, Bentley College

Részletesebben

1. Alapok. #!/bin/bash

1. Alapok. #!/bin/bash 1. oldal 1.1. A programfájlok szerkezete 1. Alapok A bash programok tulajnképpen egyszerű szöveges fájlok, amelyeket bármely szövegszerkesztő programmal megírhatunk. Alapvetően ugyanazokat a at használhatjuk

Részletesebben

Készítette: Nagy Tibor István

Készítette: Nagy Tibor István Készítette: Nagy Tibor István Operátorok Műveletek Egy (vagy több) műveleti jellel írhatók le A műveletet operandusaikkal végzik Operátorok fajtái operandusok száma szerint: egyoperandusú operátorok (pl.:

Részletesebben

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. február 18. Minimum és maximumkeresés u s i n g n a m e s p a c e s t d ; i n t main ( ) { c o u t

Részletesebben

Vezérlésfolyam gráf és X86 utasításkészlet

Vezérlésfolyam gráf és X86 utasításkészlet Vezérlésfolyam gráf és X86 utasításkészlet Kód visszafejtés. Izsó Tamás 2016. november 3. Izsó Tamás Vezérlésfolyam gráf és X86 utasításkészlet / 1 Intervallum algoritmus Procedure Intervals(G={N, E, h})

Részletesebben

Objektumorientált Programozás III.

Objektumorientált Programozás III. Objektumorientált Programozás III. Vezérlési szerkezetek ismétlés Matematikai lehetőségek Feladatok 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő

Részletesebben

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

Máté: Számítógép architektúrák MPC új tartalma, JMPC JMPC esetén MPC 8 alacsonyabb helyértékű bitjének és MR 8 bitjének bitenkénti vagy kapcsolata képződik MPC-ben az adatút ciklus vége felé (MR megérkezése után). Ilyenkor Addr 8 alacsonyabb

Részletesebben

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 3. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Primitív típusok Típus neve Érték Alap érték Foglalt tár Intervallum byte Előjeles egész 0 8 bit

Részletesebben

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

Intel x86 utasításkészlet + disassembler működése Intel x86 utasításkészlet + disassembler működése Kód visszafejtés. Izsó Tamás 2016. november 10. Izsó Tamás Intel x86 utasításkészlet + disassembler működése / 1 Section 1 Intel X86 utasításkészlet Izsó

Részletesebben

Segédlet az Informatika alapjai I. című tárgy számrendszerek fejezetéhez

Segédlet az Informatika alapjai I. című tárgy számrendszerek fejezetéhez Segédlet az Informatika alapjai I. című tárgy számrendszerek fejezetéhez Sándor Tamás, sandor.tamas@kvk.bmf.hu Takács Gergely, takacs.gergo@kvk.bmf.hu Lektorálta: dr. Schuster György PhD, hal@k2.jozsef.kando.hu

Részletesebben

Megszakítások és kivételek

Megszakítások és kivételek Megszakítások és kivételek Megszakítások Megszakítás a számítási rendszernek küldött jelzés, mely valamilyen esemény felléptéről értesíti. Egy megszakítás felléptekor a rendszer: megszakítja az aktív program

Részletesebben

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

Máté: Számítógép architektúrák NEXT ADDRESS JMPC JAMN JAMZ SLL8 SRA1 F0 F1 ENA EN INVA INC H OPC TOS LV SP PC MDR MAR WRITE READ FETCH 4 sín Mikroutasítások 24 bit: az adatút vezérléséhez bit: a következő utasítás címének megadásához,

Részletesebben

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

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 2012. április 10. A PROGAMOZÁS ALAPJAI 1 Vitéz András egyetemi adjunktus BME Híradástechnikai Tanszék vitez@hit.bme.hu Miről lesz ma szó? alaki szabályok használata - mintapélda használata - mintapélda

Részletesebben

Programozott soros szinkron adatátvitel

Programozott soros szinkron adatátvitel Programozott soros szinkron adatátvitel 1. Feladat Név:... Irjon programot, mely a P1.0 kimenet egy lefutó élének időpontjában a P1.1 kimeneten egy adatbitet ad ki. A bájt legalacsonyabb helyiértéke 1.

Részletesebben

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,

Részletesebben

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás Programozás BMEKOKAA146 Dr. Bécsi Tamás 2. előadás Szintaktikai alapok Alapvető típusok, ismétlés C# típus.net típus Méret (byte) Leírás byte System.Byte 1Előjel nélküli 8 bites egész szám (0..255) char

Részletesebben

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,

Részletesebben