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

Hasonló dokumentumok
A 32 bites x86-os architektúra regiszterei

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

Assembly programozás levelező tagozat

Máté: Assembly programozás

Assembly. Iványi Péter

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

Aritmetikai utasítások I.

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

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 Rekurzív függvények, EXE, C programok. 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.

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

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.

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

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

Assembly. Iványi Péter

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

Processzorok Utasításszintű Kezelése tavasz

Bevezetés az informatikába

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

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

Assembly utasítások listája

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

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

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

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

Máté: Assembly programozás

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

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

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

Paraméter átadás regisztereken keresztül

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

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

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

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

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

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

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

Assembly programozás levelező tagozat

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.

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

Megszakítások és kivételek

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

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:

8. gyakorlat Pointerek, dinamikus memóriakezelés

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

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

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

Egyszerű RISC CPU tervezése

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.

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

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

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

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

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

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

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

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

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

Aritmetikai utasítások

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

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

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

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

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

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

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

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

SzA19. Az elágazások vizsgálata

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

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

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

Központi vezérlőegység

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

A 6502 mikroprocesszor

Programozott soros szinkron adatátvitel

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

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

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

ASSEMBLY PROGRAMOZÁS

ELŐSZÓTJ "Előszó" \l

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

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

Adatok ábrázolása, adattípusok

A MiniRISC processzor

code segment para public 'code' assume cs:code, ds:code, es:nothing, ss:nothing

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

Előszó avagy Murphy és az optimizmus. Tartalomjegyzék

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

Programozási nyelvek 6. előadás

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

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

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

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

A programozás alapjai

Stack Vezérlés szerkezet Adat 2.

Adatszerkezetek 1. Dr. Iványi Péter

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

Architektúra, megszakítási rendszerek

Átírás:

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 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 8086-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. Egy memória-terület címének fizikai címét a báziscímmel és az offszettel tudjuk megadni. BÁZISCÍM:OFFSZET A 8086/8088-as architektúrájú számítógépek regiszterei 16-bitesek, a címbusz pedig 20 bites 1. Ebből kifolyólag két regiszter szükséges egy cím előállításához. A fizikai cím kiszámítását úgy valósították meg, hogy szegmens címek mindig oszthatóak 16-tal (paragrafushatár). A szegmens regiszter a szegmens kezdő paragrafusának a sorszámát tartalmazza (valós mód). Valós módban a fizikai cím úgy számítható ki, hogy a megfelelő szegmens regiszter tartalmát megszorozzuk 16-tal (vagyis egy helyiértékkel balra toljuk és a legalacsonyabb helyi értéken 0 lesz) és hozzáadujuk az offszet címet. Az eredmény alsó 20 bitjén kapott érték a fizikai cím függetlenül attól, hogy a kapott érték elfér-e 20 biten vagy sem 2. 1 Andrew S. Tanenbaum: Számítógép architektúrák, PANEM, 2001 2 Máté Eörs: Assembly programozás, NOVODAT 1

Példa: Tegyük fel, hogy a processzor valós módban van. Legyen egy szegmens regiszter értéke 04F2h. Határozzuk meg a fizikai címet, ha az offszet 00B2h! 1. A szegmens regiszter tartalmát megszorozzuk 16-tal (egy helyiértékkel balra toljuk): 4F20h 2. Hozzáadjuk az offszet címet: 4F20h + 00B2h 4FD2h 3. Mivel az így kapott érték elfér 20 biten, ezért továbbítható a címbuszon. A 8086/8088 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 DS (Data Segment): adat terület címzéshez ES (Extra Segment): másodlagos adatterület címzéshez Vezérlő regiszterek (16 bites regiszterek) IP (Instruction Pointer): az éppen végrehajtandó utasítás logikai címét tartalmazza a CS által mutatott szegmensben SP (Stack Pointer): a verem tetejére beírt adat logikai címére mutat az SS által mutatott szegmensben STATUS (vagy SR, vagy FLAGS): a processzor állapotát jelző regiszter BP (Base Pointer): a verem indexelt címzéséhez használatos SI (Source Index): a kiindulási adat terület indexelt címzéséhez használatos DI (Destination Index): a cél adat terület indexelt címzéséhez használatos

Általános regiszterek 16-bites regiszterek. Az általános regiszterek felső 8 bitje és alsó 8 bitje külön is címezhető 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 Adat terület címzés AX, 6 } {{ } operandusok ; ide ugrik a vezerles } {{ } kommentár 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 AX, 6 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 AX, SZO, ahol a SZO egy word értéket tartalmaz AL, KAR, ahol a KAR egy byte értéket tartalmaz Ügyelni kell arra, hogy a két operandus mérete összhangban legyen egymással. 16 bites regiszterhez csak 16 bites (word) címeket használhatunk, 8 bites regiszterhez csak 8 bites címeket 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. 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] AX, [SI], itt csak az SI-ben tárolt értéket számítjuk AX, 10h[SI], SI tartalmához hozzáadjuk a 10h konstanst AX, -10h[SI], SI tartalmához hozzáadjuk a -10h konstanst A 8 biten megadott eltolás érték előjel helyesen 16 bitre bővül a cím kiszámításakor. Regiszter indirekt címzés Az operandusban a címet egy regiszter tartalmazza. Az ilyen módon megadott címet mutatónak hívjuk. Nem adható meg eltolás. Ebben a címzési módnál csak az SI, DI és BX regiszter használható.

Formátum: regiszter, [regiszter] AX, [SI], az SI-ben tárolt értéket használjuk AX, [BX], a BX-ben tárolt értéket használjuk AX, [DI], a DI-ben tárolt értéket használjuk Bázis relatív címzés Az operandusban megadott logikai címet úgy kapjuk meg, hogy az eltolás értékét, az SI vagy DI valamelyikének értékét, valamint a BX regiszterben tárolt értéket összeadjuk. Formátum: regiszter, szám[regiszter][regiszter] AX, 10h[SI][BX] AX, [BX][DI] AX, [BX + SI + 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 BX helyett BP-t használjuk. A fizikai cím meghatározásához nem DS-t, hanem SS lesz a szegmens regiszter. 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 IP (már módosult) pillanatnyi értékéhez hozzáadódik a 8 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 IP ú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 AX JMP [BX] Feladatok 1. Melyik címzés helyes és melyik helytelen? [12h+56h] ES:[09D3h] [123456789ABCh] [SI+DI] [IP] [SI-500d] [AX] SS:[BX+DI+1999d] [CX+1234h] [SP+BP] DS:[BP+SI] IP:[0000h] 2. Melyik milyen típusú címzés?

AX, BX BX, [SI] AX, [SI + 0Fh] 3. Oldjuk meg a következő feladatot! Egy programban a következő adat szegmens részlet szerepel: ADAT SEGMENT PARA PUBLIC DATA ;... A DB 10h SZOVEG DB Egy szoveg, 0 B DW 100h SZAMSOR DW 0000h, 0001h, 0010h, 0100h, 1000h ;... ADAT ENDS Számítsuk ki az A, és B változók, A SZOVEG változó 2., 7. elemeinek ( g, és o betű) a SZAMSOR változó 1., 5. elemeinek (0000h, és 1000h értékek) fizikai memóriacímét feltéve, hogy a processzor valós módban van, DS regiszter az ADAT szegmensre van állítva, értéke 0F7Dh. Valamint a változók szegmensen belüli eltoláscímei: A: 0064h, SZOVEG: 0065h, B: 0070h, SZAMSOR: 0072h