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



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

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

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

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

Assembly. Iványi Péter

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

Processzorok Utasításszintű Kezelése tavasz

Máté: Assembly programozás

Megszakítások és kivételek

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

Assembly. Iványi Péter

Assembly programozás levelező tagozat

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

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:

Aritmetikai utasítások I.

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 Utasítások, 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.

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

PE/COFF fájl formátum

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

Máté: Assembly programozás

Stack Vezérlés szerkezet Adat 2.

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

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

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

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

Bevezetés az informatikába

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

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

S z á m í t ó g é p e s a l a p i s m e r e t e k

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

Máté: Assembly programozás

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

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

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

Aritmetikai utasítások

Paraméter átadás regisztereken keresztül

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

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

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

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

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

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

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

Architektúra, megszakítási rendszerek

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

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradé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

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

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.

C programozás. 1 óra Bevezetés

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Assebly feladatok SHR SHL NOT NEG AND XOR. Ezt követően ismertetni kell a szoftver megszakítás fogalmát és szükségességét.

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

Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

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

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

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

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

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

HARDVERKÖZELI PROGRAMOZÁS1

BATCH Programozás. Tartalomjegyzék

Assembly utasítások listája

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

A C programozási nyelv I. Bevezetés

VI. SZOFTVERES PROGRAMOZÁSÚ VLSI ÁRAMKÖ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).

A C programozási nyelv I. Bevezetés

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

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

A TURBO DEBUGGER HASZNÁLATA

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

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

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

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

4. Laborgyakorlat. A fájlokról ezeket az adatokat, a fájlrendszer tárolja. Számunkra az 1, 3, 4. oszlopok lesznek az érdekesek.

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

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

1 done by: b+bme. Adja meg, hogy milyen ICW3 parancsot kell küldeni a MASTER illetve a SLAVE egységeknek!

o a PC blokkvázlatos felépítése:

A programozás alapjai előadás. A C nyelv típusai. Egész típusok. C típusok. Előjeles egészek kettes komplemens kódú ábrázolása

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

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

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.

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

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

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

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

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

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

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

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

Mérési utasítás Mikrokontroller programozás 2.sz. mérés

Programozott soros szinkron adatátvitel

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

Fájl rendszer. Fájl koncepció Elérési módok Könyvtár szerkezet Védelem Konzisztencia szemantika

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

Átírás:

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 szintek adják meg az utasítást Emberi formában 0 és 1 segítségével írjuk le 10100001 10111100 10010011 00000100 00001000 00000011 00000101 11000000

Assembly és assembler Emberek által nehezen kezelhető a gépi kód Picit olvashatóbb a hexadecimális írás A1 BC 93 04 08 03 05 C0 93 04 08 Assembly = a programozási nyelv mnemonikus parancsok: angol kifejezések rövidítése szimbolikus címek: memória címeket értelmes nevekkel látunk el Ismerni kell a gép felépítését

Assembly Simple.com B4 02 B2 2A CD 21 CD 20 Assembly: MOV MOV INT INT AH,2h DL,2Ah 21h 20h

Szintakszis Összehasonlítás http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html Intel section.text global _start _start: mov eax, 1 mov ebx, 2 int 80h AT&T.section.text.globl _start _start: movl $1, %eax movl $2, %ebx int $0x80

Assemblerek Assembler = emberi formában leírt assembly utasításokat fordít le gépi kódra ( számsorozattá ) Nagyon sokféle assembler van NASM Netwide Assembler Cross-platform http://nasm.sourceforge.net MASM Visual Studio része ml.exe néven http://www.masm32.com

TASM Turbo Assembler GAS GNU Assembler AT&T szintakszis Cross-platform WASM Watcom Assembler HLA Assemblerek

Linker EXE file-ok esetén Assembler elegendő COM Kapcsolatpl. Windows-al vagy C programokkal alink http://alink.sourceforge.net Cross-platform GNU/LD GNU Cross-platform

Program és adatterület szervezése Eredeti SP SS:BP SS:SP Felhasznált verem Szabad verem SS CS:IP DS:DI DS:SI Program Adat CS DS

Assembly utasítások Assembly utasítás megfelel a processzor gépi kódú utasításainak A gépi kódú utasítás = számkód melyeket a memóriába kell tölteni Utasítás: Operációs kód (mit kell tenni) Operandus (mivel) Általában egy adatnak a címe

Assembly utasítások Egy utasítás hossza lehet egy vagy több byte Általános szerkezet: Prefixum Op. kód Címzési mód Operandus Op. kód Op. kód Operandus NOP MOV AX, 16 Op. kód Címzési mód MOV AL, AH Op. kód Címzési mód Operandus MOV [BX+3], AX

Adatterület címzése MOV utasítás használható adatmozgatásra Például: MOV AX, op az op értékét tölti be az AX regiszterbe MOV op, AX az AX regiszter értékét tölti be az op-ba Az op sok minden lehet

Adatterület címzése Kódba épített adat (immediate addressing) Direkt memóriacímzés Indexelt címzés Regiszter indexelt címzés Bázisrelatív címzés

Példa: Kódba épített adat MOV AX, 07ffh az AX regiszterbe a 07ffh érték kerül Az adat a kódterületen tárolódik!! Utasítás kódja: B8 FF 07 Az 3 byte-ból áll B8: operációs kód

Direkt memóriacímzés A kódban elhelyezett 16 bites szám az adat címe MOV AX, [07FFh] Nem szabad elfelejteni, hogy szegmens regiszter is van (DS) Például: DS = 1376h Akkor az AX-be töltendő adat címe: 1376:07FF

Direkt memóriacímzés Assembler-ben szimbólikusan is meg lehet adni ADAT DW 34F2h... MOV AX, [ADAT] Az AX regiszterbe a 34F2h kerül az utasítás után. Ha az ADAT szimbólikus változó éppen a 07FFh címre esik, akkor a kód: A1 FF 07

Indexelt címzés A megadott 8 vagy 16 bites számot hozzáadjuk az index regiszterhez. Az így keletkezett 16 bites címet használja az aktuális szegmens regiszterrel Például: MOV MOV AX, [DI] AX, [SI + 7FFh] MOV AX, [DI - 10h]

Indexelt címzés MOV AX, [SI + 7Fh] Ha SI = 12E0h A DS szegmens elejétől számítva 12E0+7F címen kezdődő adatot olvassa be AX-be

Indexelt címzés 8 bites eltolás esetén MOV AX, [SI + 7Fh] 8B 45 7F 16 bites eltolás esetén MOV AX, [SI + 7FFh] 8B 85 FF 07

Indexelt címzés Túlcsordulást a rendszer eldobja DI = FF00h Eltolás = 07FF A cím: 06FFh Negatív eltolás is lehet

Indexelt címzés használata Adatstruktúra esetén Struktúra címe az indexregiszterben Eltolás adja meg a struktúra elemét Buffercímzés Eltolás a buffer címe Indexregiszter a bufferen belüli cím

Regiszter indexelt címzés Az indexelt címzés speciális esete, ahol az eltolás zérus Példák: MOV MOV MOV AX, [DI] AX, [SI] AX, [BX]

Bázisrelatív címzés Azonos az indexelt címzéssel, de BX regisztert használjuk Kombinálható az indexelt címzéssel Példa: MOV AX, [BX] ; speciális MOV AX, [057Fh + DI + BX]

Bázisrelatív címzés A BX regiszter esetén a DS szegmens regisztert használja a rendszer A BP regiszter esetén az SS szegmens regisztert használja a rendszer A BP regiszter a verem (stack) esetén használatos

Címzési módok BX DI Eltolás BP SI Az oszlopok egymással nem kombinálhatók!!! Példák: [BX] [BX+DI] [BP+DI+eltol] stb.

Címzési módok Minden utasítás csak egyszer férhet hozzá a memóriához Érvénytelen!!!!: MOV [BX], [BP] Érvényes MOV AX, [BP] MOV [BX], AX

Címzési módok Operandusok mérete meg kell egyezzen 8 bites számot csak 8 bites számmal lehet összehasonlítani 16 bites számot csak 16 bites számmal lehet összehasonlítani Érvénytelen: CMP AH, AX

Címzési módok A szegmens regiszterekbe nem lehet közvetlenül írni Érvénytelen!!!!: MOV DS, 1111h Érvényes MOV AX, 1111h MOV DS, AX

Címzési módok Ha számot írunk, figyeljünk, hogy egyértelmű legyen: MOV bl, ah Az ah most egy regiszter vagy a hexadecimális A számnak felel meg? MOV bl, 0ah

Példák MOV MOV MOV MOV AX, BX AX, DI DI, AX AH, AL MOV AL, 12h MOV AX, 1234h MOV CX, 4444h

Példák MOV AX, [1234h] ; AX <- DS:1234 MOV [1234h], DI ; DS:1234 <- DI MOV AX, [DI] MOV [DI], AX MOV AX, [BX] ; AX <- DS:BX MOV AX, [BP] ; AX <- SS:BP MOV [BX + 12h], CX ; DS:(BX+12h) <- CX MOV [BX+DI], AX MOV AX,[BX+DI]

MOV [BX+DI+33h], AX MOV AX,[BX+DI+33h] Példák

Általános szerkezet: Assembly utasítások Prefixum Op. kód Címzési mód Operandus D W Op kód mód reg reg/mem

Assembly utasítások Op kód D W D: adatmozgatás iránya D=0 REG REG/MEM D=1 REG/MEM REG W: adat mérete W=0 az adat byteméretű W=1 az adat word méretű, védett módban dupla word

Assembly utasítások mód reg reg/mem Mód 00 01 10 11 Nincs eltolás 8 bites eltolás 16 bites eltolás REG/MEM egy regiszter MOV AL, [DI] nincs eltolás (mód: 00) MOV AL, [DI+2] 8 bites eltolás (mód: 01)

Assembly utasítások mód reg reg/mem REG W=0 (Byte) W=1 (Word) W=1 (Dword) 000 AL AX EAX 001 CL CX ECX 010 DL DX EDX 011 BL BX EBX 100 AH SP ESP 101 CH BP EBP 110 DH SI ESI 111 BH DI EDI

Assembly utasítások 16 bites mód, 8Bh ECh Bináris módban: 1000 1011 1110 1100 Op kód: 100010 MOV D 1 R/M REG W 1 word méret mód 11 regiszter REG 101 BP REG/MEM 100 SP MOV BP, SP

És így tovább Assembly utasítások A további részletekbe nem megyünk bele

Programok

BAT Futtatható programok Script: Operációs rendszerek tantárgy COM Csak egy szegmensből áll max: 64KByte EXE Bármekkora lehet a mérete

Futtatás 1. Op rendszer lefoglal egy memória területet A memória terület elején előkészít egy programszegmens leíró blokkot (Program Segment Prefix, PSP) COM esetén az egyetlen szegmens elején EXE esetén külön szegmens elején Betölti a programot a PSP után EXE esetén relokációt elvégzi

Futtatás 2. Regiszterek előkészítése EXE esetén DS, ES -a PSP-re mutat SS:SP -verem szegmensre mutat CS:IP -a belépési pontra mutat COM esetén CS, DS, ES, SS -közös szegmensre mutat SP -a verem tetejére mutat IP -100h

Kommunikáció a rendszerrel INT 21h Program MS-DOS Op. rsz. ROM BIOS INT 10h INT 13h INT 14h INT 16h INT 17h IN és OUT utasítások IBM PC

INT 20h Megszakítások Kilépés a programból hagyományos módon Ebben az esetben a CS regiszternek a PSP-t tartalmazó szegmensre kell mutatnia Ez alapból teljesül COM programoknál EXE programnál más kilépést használunk majd

INT 21h Megszakítások Az AH regiszter határozza meg a funkciót AH = 1 Olvasás a szabványos bemenetről A karaktert visszaírja a képernyőre!!! A beolvasott karakter ASCII kódja az AL regiszterben tárolódik Ha nincs ASCII kódja (funkció billentyű), akkor AL értéke nulla és a második olvasásra a billentyű scan kódját kapjuk meg AL-ben

AH = 8 Megszakítások Ugyanaz mint AH=1, csak nem írja vissza a karaktert a képernyőre AH=2 A DL regiszterben tartalmazott karaktert kinyomtatja a képernyőre Példa: MOV AH, 2 MOV DL,24h INT 21h

AH=9 Megszakítások A DS:DX címen levő stringet kinyomtatja a képernyőre A string végét a dollár jel jelzi ($) Példa: MOV AH, 9 MOV DX, 200 INT 21h DS:0200 H, e, l, l, o, $

AH=0Ah Bufferelt beolvasás Megszakítások A DS:DX egy olyan bufferre mutat, melynek első két byte-ja vezérlő jellegű, a többiben tárolható az adat 1. Byte: a buffer tényleges hossza, melybe az ENTER is belefér 2. Byte: a ténylegesen beolvasott byte-ok száma A rendszer nem enged többet beolvasni, ilyenkor sípol és csak törölni lehet, vagy ENTER-t nyomni

Netwide Assembler 80x86-os assembler Támogatott formátumok BIN, COM OBJ NASM Csak a kód, pl COM, SYS file-ok Microsoft tárgykód (object), MS-DOS 16 bites kód A linker-el EXE file-t hozhatunk létre WIN32 Microsoft WIN32 -es kód

Támogatott formátumok COFF ELF a.out NASM Common Object File Format Linux Linux aoutb NetBSD/FreeBSD/OpenBSD

NASM alapok COM file létrehozása Legegyszerűbb program: alap.asm org 100h int 20h Fordítás: nasm -oalap.com alap.asm

Általános formátum: Például: Opciók NASM alapok nasm -f formátum file [-o kimenet] nasm -f com alap.asm nasm -f com alap.asm -o alap.com -h további segítség -l file lefordított kód szöveges formátumban...

NASM, egy másik program ORG 100h MOV ah,2 MOV dl,2ah ; Mi a 2ah???? INT 21h INT 20h

ASCII tábla

NASM -l opció, map file 1 org 100h 2 00000000 B402 MOV AH,2h 3 00000002 B22A MOV DL,2Ah 4 00000004 CD21 INT 21h 5 00000006 CD20 INT 20h 6

Megjegyzések NASM A pontos vessző utáni rész a sor végéig Példa: ORG 100h MOV ah,2 ; karakter nyomtatás MOV dl,2ah ; csillag karakter INT 21h ; funkció hívás INT 20h ; kilépés

NASM Számkonstansok számb - bináris számo - oktális számd - decimális számh - hexadecimális Karakter konstansok, idézőjelek között Ez egy string Ez is egy string

Konstansok definiálása Formátum: NASM név EQU kif Példa ABC EQU 25 MOV AX, ABC MOV AX, 25 ; UGYANAZ

Címkék NASM, szimbólumok Programterületen használjuk, Ugró utasítás operandusai Formátum: címke:

NASM, változók Név: Kezdődhet: Betűvel (a-z), ponttal (.) További karakterek: Betű (a-z), szám (0-9), @, _, $ Terület foglalás név: DB kifejezés Például: DAT: DB 45d CHARS: DB a, b, c text: DB Ez egy szoveg

NASM, változók DB - define byte DW - define word DD - define doubleword DQ - define quadword DT - define tenbytes

NASM, változók, byte és word MOV BX, CHARS MOV AL, [BX] ; AL == a MOV AX, [BX] ; AL == a ; AH == b ; AX == 6261 CHARS: DB a, b, c