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.

Hasonló dokumentumok
Assembly utasítások listája

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

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.

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

Assembly programozás levelező tagozat

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

Assembly. Iványi Péter

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

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

Aritmetikai utasítások I.

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

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.

II. KMAPR21TNB, KMAPR21ONB PC

Assembly programozás levelező tagozat

Máté: Assembly programozás

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

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

A 32 bites x86-os architektúra regiszterei

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

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

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

Assembly programozás Bevezetés

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

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

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

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

HARDVERKÖZELI PROGRAMOZÁS1

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

Intel x86 utasításkészlet

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

A MiniRISC processzor

Aritmetikai utasítások

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

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.

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

Processzorok Utasításszintű Kezelése tavasz

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

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

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

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

GPU Lab. 3. fejezet. Az X86 Utasításkészlet. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

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

Architektúra, megszakítási rendszerek

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

Egyszerű RISC CPU tervezése

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:

Paraméter átadás regisztereken keresztül

Stack Vezérlés szerkezet Adat 2.

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

INTEL 8085 gépi utasításkészlete

Bevezetés az informatikába

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

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

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

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

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

Mikrokontrollerek. Tihanyi Attila május 8

n-pr H 5 C 6 CHCl 2 Pascal és assembler

Assembly programozás. szerkesztette: Iványi Péter. September 27, 2010

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

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

Megszakítások és kivételek

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

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

Assembly programozás. szerkesztette: Iványi Péter. September 22, 2009

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

1 Doszpi

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

Mikrovezérlık története (nagyon) röviden

A 6502 mikroprocesszor

Java II. I A Java programozási nyelv alapelemei

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

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

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

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

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

BELÉPTETİ RENDSZER TERVEZÉSE

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

Mechatronika és mikroszámítógépek. 2018/2019 I. félév. Külső megszakítások

Máté: Assembly programozás

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

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

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

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

[1] Bevezetés. A "debug" a DOS-ból közvetlenûl indítható a "debug" szó begépelésével. Kilépés hasonlóképpen a "q" paranccsal történik.

Az interrupt Benesóczky Zoltán 2004

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...

Architektúrák és operációs rendszerek: Processzorok

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

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

Bevezetés az informatikába

INFORMATIKA MATEMATIKAI ALAPJAI

PMU Kezdı lépések. 6-0 Csatlakozás LG GLOFA-GM és SAMSUNG PLC-hez. 6-1 Kommunikáció LG PMU és LG GLOFA-GM7 / GM6 / GM4 között

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

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

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

SzA19. Az elágazások vizsgálata

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

Központi vezérlőegység

Átírás:

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 mőveletek BX bázis regiszter: tömbindexelés CX számláló (count) regiszter: ciklusszervezés, ismétlések számolása DX adat (data) regiszter: I/O mőveletek, aritmetikai mőveletek Szegmens regiszterek CS kód szegmens: futtatandó utasítások tárolása (maga a program) DS adat szegmens: globális változók, konstansok tárolása SS verem szegmens: lokális változók tárolása, visszatérési cím ES extra szegmens: tetszılegesen felhasználható terület (pl. heap) Pointer (index) regiszterek IP utasításszámláló, az éppen következı assembly utasításra mutat SI forrás (source) index, sztringmőveletek kiinduló címe DI cél (destination) index, sztringmőveletek érkezési címe SP verem mutató (stack pointer), a verem aktuális tetejét mutatja BP bázis pointer, bázis-index címzéshez (tömbindexelés) Speciális regiszter (SR = FLAGS) Státusz regiszter, minden bitje egy nevesített jelzıérték (true/false). O - elıjeles átvitel (overflow) D - sztringmőveletek iránya I - interruptok engedélyezése T - csapda (debug) eng. S - C - Z - A - P - eredménye elıjele (sign) eredménye átvitele (carry) eredménye nulla-e (zero) félszavas átvitel (BCD) eredmény páros/páratlan

Mindegyik regiszter 16 bites. Az általános célú regisztereket 2x8 bitesként is használhatjuk pl. AX = AH + AL (High/Low) Alap szegmens/offszet címpárok: CS:IP, DS:BX, DS:SI, SS:SP, SS:BP, ES:DI 2. Címzési módok Közvetlen címzés: MOV AX, 42 konkrét érték (konstans) Direkt: MOV AX, [1234h] adott címen lévı érték (változó/konstans) Regiszter: MOV AX, BX változók közötti értékadás Regiszter-indirekt: MOV AX, [BX] pointer szerinti értékadás Indexelt: MOV AX, [BX]4 ua. MOV AX, [BX+4] (tömb indexelés) Bázis-index: MOV AX, [BP][SI]1234h ua. [BP+SI+1234h] (több dim. tömb) Verem: PUSH AX lokális változók használata POP AX A címzési módokat hívják még operandus megadási módoknak is. 3. Adat mozgató utasítások Az adatmozgató utasítások értékadásra valók. Nem változtatják a flagek értékét, kivéve a POPF. MOV op1, op2 op 1 = op 2 értékadás XCHG op1, op2 op 1 és op 2 értéke kicserélıdik XLAT ugyanaz, mint MOV AL, [BX + AL] LEA reg, mem ugyanaz, mint MOV reg, OFFSET mem LES reg, mem MOV reg, [mem] és MOV ES, [mem + 2] LDS reg, mem MOV reg, [mem] és MOV DS, [mem + 2] PUSH reg SP = SP -2, MOV [SP], reg PUSHF SP = SP -2, SR (FLAGS) bekerül a verembe POP reg a verem felsı szavát teszi reg-be, SP = SP + 2 POPF a verem felsı szavát teszi SR-be, SP = SP + 2

4. Aritmetikai utasítások Az aritmetikai utasítások egyszerő számolási mőveleteket hajtanak végre. Ahol lehetséges célszerő az AX regiszterrel számolni, mivel az gyorsabb, mint a többi. Az ún. aritmetikai flageket (C, Z, S, A, O, P) beállítják ezek a mőveletek. ADD op1, op2 op 1 = op 1 + op 2 ADC op1, op2 op 1 = op 1 + op 2 + C(arry) SUB op1, op2 op 1 = op 1 op 2 SBB op1, op2 op 1 = op 1 op 2 C(arry) MUL op1 AX = AL op 1 ha op 1 8-bites elıjeltelen érték DX:AX = AX op 1, ha op 1 16-bites elıjel nélküli érték IMUL op1 ua. mint MUL, csak elıjeles értékekkel számol DIV op1 AL = AX / op 1, ha op 1 8-bites elıjel nélküli egész AX = DX:AX / op 1, ha op 1 16-bites elıjel nélküli egész IDIV op1 ua. mint DIV, csak elıjeles értékekkel számol INC op1 op 1 = op 1 + 1 (nem változtatja a Carry flaget!) DEC op1 op 1 = op 1 1 (nem változtatja a Carry flaget!) NEG op1 op 1 = op 1, kettes komplemens képzése! CMP op1, op2 flagek beállítása op 1 op 2 értéke alapján CBW AX = AL, kiterjesztés 16-bitre elıjellel együtt CWD DX:AX = AX, kiterjesztés 32-bitre elıjellel együtt 5. Vezérlés átadó utasítások A vezérlés átadó utasításokkal feltételes vagy feltétel nélküli ugrást, eljárás- és függvényhívást tudunk kezdeményezni. Az ugrás tulajdonképpen nem más, mint a CS:IP regiszter párnak a következı utasítás címére beállítása. Háromféle ugrást különböztetünk meg attól függıen, hogy az operandus milyen hosszú. A SHORT ugrásnál IP új értéke az IP 128 és IP + 127 között változhat, CS változatlan (8 bites, elıjeles operandus). NEAR ugrásnál IP értéke tetszılegesen változhat, CS változatlan (16 bites operandus). FAR ugrásnál mind CS, mind az IP értéke tetszılegesen változhat (2x16 bites operandus, far pointer).

JMP op1 feltétel nélküli ugrás a megadott címre (short, near, far) Jxx short ptr feltételes ugrás a megadott flag értéke szerint (short) Lehetséges feltételek: Flag = 1 Flag = 0 C flag szerint: JC JB JNAE JNC JNB JAE Z flag szerint: JZ JE JNZ JNE S flag szerint: JS JNS O flag szerint: JO JNO P flag szerint: JP JPE JNP JPO CMP A, B utasítás után: A > B esetén: JA JNBE (C = 0 és Z = 0), elıjel nélküli számoknál A B esetén: JNA JBE (C = 1 vagy Z = 1), elıjel nélküli számoknál A > B esetén: JG JNLE (Z = 0 és S = O), elıjeles A < B esetén: JL JNGE (S O flag), elıjeles A B esetén: JGE JNL (S = O flag), elıjeles A B esetén: JLE JNG (Z = 1 vagy S O), elıjeles JCXZ címke feltételes ugrás, ha CX = 0 CALL címke eljáráshívás: PUSH IP majd JMP címke (near) ill. PUSH CS, PUSH IP, JMP címke (far) RET visszatérés közeli eljárásból: POP IP-vel egyenértékő RETF visszatérés távoli eljárásból: POP IP, POP CS 6. Ciklus szervezı utasítások A ciklus szervezı utasítások minden esetben CX értékét veszik figyelembe. Mindegyik utasítás csökkenti eggyel CX értékét, és ha az eredmény nulla, akkor vége a ciklusnak. Nagyjából egyenértékő a for (CX; CX > 1; CX--) utasítással. Az operandusban megadott ugrás SHORT lehet csak (-128 +127). LOOP címke CX = CX 1, ha CX 0 ugrás a címkére LOOPZ címke CX = CX 1, ha CX 0 és Z flag = 1 ugrás a címkére LOOPNZ címke CX = CX 1, ha CX 0 és Z flag = 0 ugrás a címkére LOOPE címke ua. mint LOOPZ LOOPNE címke ua. mint LOOPNE

7. String kezelı utasítások Ezek az utasítások a memóriában bájtsorozatokkal (stringekkel) kapcsolatos mőveleteket valósítanak meg (másolás, kiolvasás, beírás, keresés ). Mindig DS:SI által mutatott címrıl olvasnak, és az ES:DI címre írnak. Az utasítástól függıen SI ill. DI regiszterek értéke 1 (Byte) ill. 2 (Word)-vel változik. Ha D (Direction = irány) flag 1, akkor növekszik, ha 0 csökken ennyivel. Létezik mindegyik utasításnak típus nélküli változata is (nincs a végén B vagy W), ekkor a megadott operandus MÉRETE mondja meg, hogy melyik változatot kell használni. Ha ez nem dönthetı el egyértelmően, akkor az assembler fordítási hibát ad, emiatt ill. az átláthatóság érdekében ezek használata kerülendı! Az ismétlı prefixumokat string kezelı utasítások elıtt használhatjuk, azokkal EGYÜTTESEN. Segítségükkel gyorsan végigmehetünk egy teljes stringen, minden elemre végrehajtva a kívánt mőveletet. Az összes ismétlés CX-szer hajtódik legfeljebb végre, hasonlóan a LOOP utasításhoz, annyi különbséggel, hogy itt elıbb megnézi a processzor, hogy CX = 0 teljesül-e, és csak az utasítás végrehajtása után csökkenti eggyel (azaz CX = 0 esetén egyszer sem hajtódik végre az utasítás). Ebbıl az is következik, hogy ha szabályosan végigfut egy ismétlési ciklus, akkor CX = 0 lesz. MOVS op1 nem szerencsés, ua. mint MOVSB vagy MOVSW MOVSB MOV ES:[DI], DS:[SI], és SI = SI ± 1, DI = DI ± 1 MOVSW MOV ES:[DI], DS:[SI], és SI = SI ± 2, DI = DI ± 2 LODS op1 nem szerencsés, ua. mint LODSB vagy LODSW LODSB MOV AL, DS:[SI], és SI = SI ± 1 (D flagtıl függıen) LODSW MOV AX, DS:[SI], és SI = SI ± 2 (D flagtıl függıen) STOS op1 nem szerencsés, ua. mint STOSB vagy STOSW STOSB MOV ES:[DI], AL és DI = DI ± 1 (D flagtıl függıen) STOSW MOV ES:[DI], AX és DI = DI ± 2 (D flagtıl függıen) CMPS op1 nem szerencsés, ua. mint CMPSB vagy CMPSW CMPSB CMP DS:[SI], ES:[DI] és SI = SI ± 1, DI = DI ± 1 CMPSW CMP DS:[SI], ES:[DI] és SI = SI ± 2, DI = DI ± 2 SCAS op1 nem szerencsés, ua. mint SCASB vagy SCASW SCASB CMP AL, ES:[DI] és SI = SI ± 1 (D flagtıl függıen) SCASW CMP AX, ES:[DI] és SI = SI ± 2 (D flagtıl függıen) REP fenti 5 féle utasítás ismétlése legfeljebb CX-szer

REPZ ismétlés legfeljebb CX-szer, ha Z flag értéke 1 REPNZ ismétlés legfeljebb CX-szer, ha Z flag értéke 0 REPE ua. mint REPZ REPNE ua. mint REPNZ 8. Logikai utasítások A logikai utasítások az operandusok között bitenkénti szabványos logikai mőveletek megvalósításai. Az eredmény az elsı operandusba kerül, a TEST utasítás kivételével, ahol értékük változatlan. Emellett természetesen mindegyiknél a megfelelı aritmetikai flagek is beállítódnak. AND op1, op2 op1 = op1 & op2, logikai ÉS mővelet TEST op1, op2 op1 & op2 értéke alapján beállítja a flageket OR o1p, op2 op1 = op1 op2, logikai VAGY mővelet XOR op1, op2 op1 = op1 + op2, logikai KIZÁRÓ VAGY mővelet NOT op1 op1 = op1, logikai negáció (egyes komplemens) 9. Bitforgató utasítások A bitforgató utasítások Az érték vagy konstans 1, vagy a CL regiszter (286-os géptıl felfelé megadhatunk 1-nél nagyobb konstanst is) RCL reg, érték forgatás balra, reg minden bitje eggyel balra tolódik, 0. bitbe C íródik, C felveszi a legmagasabb bit értékét RCR reg, érték forgatás jobbra, reg minden bitje eggyel jobbra tolódik, legmagasabb bitbe C íródik, C felveszi a 0. bit értékét ROL reg, érték forgatás balra, reg minden bitje eggyel balra tolódik, 0. bitbe és C flagbe a legmagasabb bit értéke kerül ROR reg, érték forgatás jobbra, reg minden bitje eggyel jobbra tolódik, legmagasabb bitbe és C flagbe a 0. bit értéke kerül

SHR reg, érték eltolás jobbra, reg minden bitje eggyel jobbra tolódik, legmagasabb bitbe 0 érték kerül, 0. bit a C flagbe íródik SHL reg, érték eltolás balra, reg minden bitje eggyel balra tolódik, 0. bitbe 0 érték kerül, legmagasabb bit a C flagbe íródik SAR reg, érték eltolás jobbra, reg minden bitje eggyel jobbra tolódik, legmagasabb bit nem változik, 0. bit a C flagbe íródik SAL reg, érték ua. mint SHL 10. Processzor vezérlı utasítások A processzor vezérlı utasítások egy része a flageket állítja direktben, másik részük egyéb közvetlen utasítást ad a CPU részére. A flageket, a leírt hatáson kívül nem változtatják. CLC C flaget törli (C = 0) STC C flaget beállítja (C = 1) CMC C flaget negálja (C = 1 C) CLD D flaget törli (D = 0), csökkenı irányú string mőveletek STD D flaget beállítja (D = 1), növekvı irány str. mőveletek CLI I flaget törli (I = 0), megszakítások tiltása STI I flaget beállítja (I = 1), megszakítások engedélyezése NOP CPU nem csinál semmit egy ideig ( XCHG AL, AL) WAIT CPU várakozik, amíg a koprocesszor kész nem lesz HLT CPU leáll, amíg hardveres megszakítás jelet nem kap 11. Input/Output utasítások Külsı eszközökkel kommunikálhat a CPU, az ún. portokon keresztül. A port értéke egy 0-255 közé esı konkrét szám lehet. Ha ennél nagyobb sorszámú portot akarunk elérni, akkor a port helyére DX regisztert kell beírni (a port sorszáma természetesen ekkor DX-ben van). A mővelethez kizárólag AX és AL regiszterek használhatóak, attól függıen 2 vagy 1 bájtot mozgatunk. IN accum, port beolvas 1 vagy 2 bájtot AL/AX-be a megadott portról OUT port, accum kiírja az AL/AX-ben lévı értéket a megadott portra

12. Interrupt utasítások Az interrup (megszakítás) kezelı utasításokkal saját, vagy beépített eljárásokat hívhatunk meg. Ezek egy része akkor fut le, ha egy hardver eszköz megszakítás jelet küld a CPU-nak (pl. leütöttek egy billentyőt), más részüket a rendszer és mi használjuk programon belül (pl. BIOS rutinok). A megszakítások sorszáma 0 255 között lehet, és a 0000h:[4*sorszám] helyen lévı távoli címen vannak megvalósítva. INT sorszám megszakítás hívása, interrupt táblában lévı cím szerint: PUSHF, CALL far ptr 0000h:[4*sorszám] egymás után INTO INT 4 hívása, ha az O flag értéke 1 IRET visszatérés megszakításból (RETF, POPF egymás után)