A 32 bites x86-os architektúra regiszterei

Hasonló dokumentumok
Adatelérés és memóriakezelés

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

Assembly programozás levelező tagozat

Máté: Assembly programozás

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

Assembly. Iványi Péter

Paraméter átadás regisztereken keresztül

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

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

Aritmetikai utasítások I.

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

Assembly. Iványi Péter

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

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

Processzorok Utasításszintű Kezelése tavasz

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

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.

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.

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

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

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

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

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

Bevezetés az informatikába

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

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

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

Assembly utasítások listája

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

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

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

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

Megszakítások és kivételek

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

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

C programozási nyelv Pointerek, tömbök, pointer aritmetika

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

Kitlei Róbert kitlei.web.elte.hu. Karunkról Kari digitális könyvtár

Operandus típusok Bevezetés: Az utasítás-feldolgozás menete

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

Stack Vezérlés szerkezet Adat 2.

VI. SZOFTVERES PROGRAMOZÁSÚ VLSI ÁRAMKÖRÖK

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

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

8. gyakorlat Pointerek, dinamikus memóriakezelés

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

Utasításfajták Memóriacímzés Architektúrák Végrehajtás Esettanulmányok. 2. előadás. Kitlei Róbert november 28.

Assembly programozás levelező tagozat

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

Aritmetikai utasítások

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

Intel x86 utasításkészlet

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:

Máté: Assembly programozás

Digitális technika HF2 Elkészítési segédlet Gépi szintű programozás

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

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

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

A mikroprocesszor egy RISC felépítésű (LOAD/STORE), Neumann architektúrájú 32 bites soft processzor, amelyet FPGA val valósítunk meg.

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

Architektúra, címzési módok

SzA19. Az elágazások vizsgálata

Virtuális memóriakezelés Védelem. Memória védelem. Intel x68. Izsó Tamás október 18. Izsó Tamás Memória védelem/ 1

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

Adatok ábrázolása, adattípusok

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

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

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

Irvine eljárások. ClrScr - Törli a képernyő tartalmát és a kurzort a képernyő bal felső sarkába helyezi (Clear Screen).

Informatika 1 2. el adás: Absztrakt számítógépek

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

Szegmens regiszterek (16 bitesek)

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

Virtuális memóriakezelés Védelem. Memória védelem. Intel X86. Izsó Tamás október 1. Izsó Tamás Memória védelem/ 1

Tamás Péter (D. 424) Mechatronika, Optika és Gépészeti Informatika Tanszék (D 407)

5. Fejezet : Lebegőpontos számok

PE/COFF fájl formátum

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

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Adatszerkezetek 1. Dr. Iványi Péter

Kitlei Róbert. Assembly programozás ELTE, Lektorálta: Dévai Gergely. Kitlei Róbert Assembly programozás 1

A mikroprocesszor felépítése és működése

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

DSP architektúrák dspic30f család memória kezelése

Egyszerű RISC CPU tervezése

Architektúra, megszakítási rendszerek

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

SIMATIC. STEP 7 Magasabb szintű műveletek (STL)

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

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

Alkalmazott modul: Programozás 10. fejezet. Strukturált programozás: dinamikus memóriakezelés. Giachetta Roberto

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

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.

A C programozási nyelv III. Pointerek és tömbök.

Készítette: Nagy Tibor István

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

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

A C programozási nyelv III. Pointerek és tömbök.

Alkalmazott modul: Programozás 8. előadás. Strukturált programozás: dinamikus memóriakezelés. Dinamikus memóriakezelés. Dinamikus memóriakezelés

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

Átírás:

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) a program utasításai illetve egy utasítás argumentumai a memóriában találhatók. A memória-szervezési modell mondja meg azt, hogy miként és mekkora területhez férhetünk hozzá a memóriában tárolt adathoz. A legkisebb memória-egység, amelyet meg tudunk címezni 8 bit, vagyis 1 bájt. Gyakran azonban szavas címeket használunk. Egy szót (word) 2 vagy 4 bájton tudunk ábrázolni, dupla szavakat (double word vagy dword) pedig 4 vagy 8 bájton ábrázolunk. A x86-os architektúrájú számítógépek memóriája szegmensekre van osztva. A szegmensek a memória adott méretű, összefüggő területei. A memóriaszegmensek báziscímei (kezdőcímei) általában ismertek, és mivel a szegmensek összefüggőek, szegmensen belüli bájtokat a báziscíméhez képest tudjuk megadni. A szegmensen belüli bájtok távolságát a báziscímhez képest offszetnek hívjuk. A szegmensek megadásának számos módozata létezik, de az itt tárgyalt FLAT memóriamodellben a program futásához szükséges összes adat (programkódok, adatok, verem) egyetlen szegmensben tárolódnak. Ezen szegmensen belül az adatok elérésére a szegmensen belüli eltolással hivatkozhatunk. A tárgyalt processzorcsalád regiszterei 32-bitesek, ebből kifolyólag a szegmensen belüli eltolást is 32 bites értékkel tudjuk megadni. Ez szegmensenkén 4 GB memória megcímzését teszi lhetővé. A 32 bites x86-os architektúra regiszterei Szegmens regiszterek (16 bites regiszterek) CS (Code Segment): utasítások címzéséhez SS (Stack Segment): verem címzéséhez 1

DS (Data Segment): adat terület címzéshez ES (Extra Segment): másodlagos adatterület címzéshez FS : extra adatszegmens GS : extra adatszegmens Vezérlő regiszterek (32 bites regiszterek) EIP (Extended Instruction Pointer): az éppen végrehajtandó utasítás logikai címét tartalmazza a CS által mutatott szegmensben ESP (Extended Stack Pointer): a verem tetejére beírt adat logikai címére mutat az SS által mutatott szegmensben EFLAGS: a processzor állapotát jelző regiszter EBP (Extended Base Pointer): a verem indexelt címzéséhez használatos ESI (Extended Source Index): a kiindulási adat terület indexelt címzéséhez használatos EDI (Extended Destination Index): a cél adat terület indexelt címzéséhez használatos Minden 32 bites regiszter első Extended tagja azt jelzi, hogy a regiszter egy korábbi 16 bites regiszter kiterjesztése. A kompatibilitás megőrzésére a regiszterek alsó 16 bitje külön is nevesíthető. Általános regiszterek 32-bites regiszterek. A Regiszterek általánosan is felhasználhatóak, de egyes utasításokban speciális felhasználásuk/szerepük is lehet. EAX (Extended Accumulator): Szorcás, osztásnál van szerepe. EBX (Extended Base Register): Címző regiszter ECX (Extended Counter): Gyakran használjuk a számlálások vezérléseknél EDX (Extended Data Register): Szorzás, osztás, I/O műveletekben használatos

Mint a vezérlő regiszterek esetében, az általános regiszterek is a korábbi 16 bites regiszterek kiterjesztett változatai, és (az Extended jelölő elhagysával) van lehetőség az alső 16 bit külön történő elérésére is. További kiegészítés, hogy az also 16 bit két fele külön külön is megnevezhető. regiszter felső bájt alsó bájt AX AH AL Accumulator (szorzás, osztás) BX BH BL Base Register (címző regiszter) CX CH CL Counter Regiszter (számláló) DX DH DL Data Register (szorzás, osztás, I/O) Címzési módok assembly-ben Assembly programozási nyelvben egy utasítás a következő sémát követi: Példa: címrész operációs kód operandusok kommentár címrész: egyes adatok illetve utasítások szimbólikus jelölése operációs kód: mnemonic, az utasítás, művelet megnevezésére szolgál operandusok: az utasítás paraméterei kommentár: A program jobb olvashatóságát és érthetőségét teszi lehetővé, de nincs hatása a program működésére hat: }{{} címrész MOV }{{} utasítás kód AX, 6 }{{} operandusok ; ide ugrik a vezerles }{{} kommentár A példában szereplő MOV utasítás két operandusú adat másoló művelet. A második operandusának értékét másolja át az első operandusba. Az operandusai lehetnek regiszterek, memóricímek, vagy konstansok, de memóriacím legfeljebb az egik lehet a kettő közül. A két operandus által jelölt adatterületek méretének megegyszerőnek kell lennie. Adat terület címzés A MOV utasítást- mint példát használva az adatokat az alábbi módokaon érhetjük el.

Kódba épített adat Az adatot közvetlenül a regiszterbe írjuk. Ennél a címzési módnál csak konstansokat tudunk megadni második operandusként. Formátum: regiszter, konstans MOV AX, 6 MOV AX, 06F2h Direkt memória címzés adjuk meg, nem az adatot. A címrészen az operandus logikai (offszet) címét Formátum: regiszter, memóriacím MOV EAX, DSZO, ahol a DSZO egy 4 bytos változót jelöl MOV AX, SZO, ahol a SZO egy 2 byteos változót jelöl MOV AL, KAR, ahol a KAR egy 1 byteos változót jelöl Ügyelni kell arra, hogy a két operandus mérete összhangban legyen egymással. 32 bites geiszterhez csak 32 bites, 16 bites regiszterhez csak 16 bites (word), 8 bites regiszterhez csak 8 bites változókat használhatunk! Direkt címzésnél megadhatunk második operandusként egy regisztert is. Akár a egy regisztert, akár egy logikai címet adunk meg, mindkét esetben a memóriacímen tárolt adat változhat, viszont a cím azonos marad. Regiszter indirekt címzés Az operandusban a címet egy regiszter tartalmazza. Az ilyen módon megadott címet mutatónak hívjuk. Ebben a címzési módnál csak az ESI, EDI és EBX regiszter használható.

Formátum: regiszter, [regiszter] EAX, [SI], az ESI-ben tárolt értéket használjuk EAX, [BX], a EBX-ben tárolt értéket használjuk EAX, [DI], a EDI-ben tárolt értéket használjuk Indexelt címzés Az operandusban megadott 8 vagy 16 bites számot (eltolás) hozzáadjuk az index-regiszter (SI vagy DI) tartalmához, így alakul ki a logikai cím. Formátum: regiszter, szám[index-regiszter] EAX, [ESI], itt csak az SI-ben tárolt értéket számítjuk EAX, 10h[ESI], SI tartalmához hozzáadjuk a 10h konstanst EAX, -10h[ESI], SI tartalmához hozzáadjuk a -10h konstanst Az indexelt címzési mód ismerősebbnek tűnhet, ha az eltolásértéket egy tömb kezdőcíme adja. EAX, TOMB[ESI], A TÖMB kezdőcíméhez képest az ESI értékével eltolt helyről olvasulnk. Bázis relatív címzés Az operandusban megadott logikai címet úgy kapjuk meg, hogy az eltolás értékét, az ESI vagy EDI valamelyikének értékét, valamint a EBX regiszterben tárolt értéket összeadjuk. Formátum: regiszter, szám[regiszter][regiszter] EAX, 10h[ESI][EBX] EAX, [EBX][EDI] AX, [EBX + ESI + 10h]

Verem terület címzés A verem (stack) terület címzése bázis relatív címzéssel történik, azzal a különbséggel, hogy EBX helyett EBP-t használjuk. A fizikai cím meghatározásához nem DS-t, hanem SS lesz a szegmens regiszter (vagyis a verembl olvasunk indexelten). Program terület címzés Egy-egy utasítás során az IP értéke az utasítás hosszával növekszik és a soron következő utasításra mutat a CS-ben. Bizonyos vezérlési szerkezetekben (pl. ciklusok, feltételek) az IP értékének megadásával a kívánt helyen folytathatjuk a program futását. IP relatív címzés Az EIP (már módosult) pillanatnyi értékéhez hozzáadódik egy 32 bites előjeles operandus. A programkódokban bizonyos kódrészletek kezdő utasítását címkével láthatjuk el, ha azt szeretnénk, hogy egy adott feltétel esetén ott folytatódjon a program futása. A feltételes vezérlés átadás és a ciklus utasítás mindig ilyen címzési móddal valósul meg. JMP CIKLUS, ahol CIKLUS egy címke az assembly forráskódban Direkt utasítás címzés Ez a címzési mód közeli (NEAR) vagy távoli (FAR) vezérlés átadásoknál játszik szerepet. A vezérlés átadás közeli, ha a programkód ugyanabban a szegmensben folytatódik tovább és távoli szegmensváltás esetén. Közeli vezérlésátadás esetén a 16 bites operandus lesz az EIP új tartalma, távoli vezérlésátadásnál pedig az IP és a CS tartalma is megváltozik. Ilyen vezérlés lehet például az eljáráshívás. CALL ELJARAS, az ELJARAS nevű eljárás hívása Indirekt utasítás címzés Bármilyen címzési móddal megadott szóban vagy dupla szóban tárolt címre történő vezérlés átadás. JMP EAX JMP [EBX]

Feladatok Adott az alábbi módon definiált adat szegmens..data ; Bájt, szó és duplaszó területfoglalás, 5 kezdoértékkel (decimális) SZAM1 DB 5 SZAM2 DW 5 SZAM3 DD 5 ; Ugyanaz, mint fent, csak újabb kulcsszavakkal SZAM4 BYTE 5 SZAM5 WORD 5 SZAM6 DWORD 5 ; Negatív számértékek SZAM7 BYTE -5 SZAM8 WORD -5 SZAM9 DWORD -5 ; További példák (hexadecimális) SZAM10 BYTE 12h SZAM11 WORD 34h SZAM12 DWORD 56h ; Adatterület foglalása (tömb-szeru) ADAT1 DW 912, 920, 928, 936, 944 ADAT2 DB 11, 15, 20 ADAT3 DW 1912, 1920, 1928, 1936 ; 15 elemb}ol álló 1D tömb. ; 3x5 méretu 2D mátrixként értelmezzük majd. MATRIX1 DW 0, 0, 0, 0, 0 Matrix1RowSize = ( $ - MATRIX1 ) DW 0, 48, 92, 48, 0 DW 0, 0, 0, 0, 0

1. Mi a szegmensen belüli eltolása az alábbi értékeknek, feltéve, hogy az adatok a szegmens elején (a 0 címen) kezdődnek, a sorrendjük a memóriában megegyezik a definiálásuk sorrendjével, és közöttük szabad terület nincs. 2. SZAM1 SZAM4 SZAM5 SZAM9 ADAT1 3. eleme-ja ADAT3 utolsó eleme MATRIX1 2. sorának 4. eleme. Írj kódrészletet, ami az alábbi elvégzi az alábbi adatmozgatásokat. A tömb indexek [sorindex, oszlopindex] formában vannak megadva, és 0-tól indulnak. AL SZAM1 AX SZAM2 EAX SZAM3 AX SZAM10 EAX SZAM12 EAX SZAM12 AX ADAT1[3] AX MATRIX1[2,1] EAX MATRIX1[0,2]