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

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

Assembly utasítások listája

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

A 32 bites x86-os architektúra regiszterei

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.

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

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

Aritmetikai utasítások

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

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

Assembly. Iványi Péter

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

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

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

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

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

Processzorok Utasításszintű Kezelése tavasz

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

Stack Vezérlés szerkezet Adat 2.

Aritmetikai utasítások I.

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

Assembly programozás levelező tagozat

Máté: Assembly programozás

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

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

Bevezetés az informatikába gyakorló feladatok Utoljára módosítva:

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.

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?

Bevezetés az informatikába gyakorló feladatok Utoljára módosítva:

SZÁMÉRTÉKEK (ÁT)KÓDOLÁSA

Dr. Oniga István DIGITÁLIS TECHNIKA 2

Paraméter átadás regisztereken keresztül

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

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

SZÁMRENDSZEREK KÉSZÍTETTE: JURÁNYINÉ BESENYEI GABRIELLA

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

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

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.

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

Megszakítások és kivételek

4. Fejezet : Az egész számok (integer) ábrázolása

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

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

ÁTVÁLTÁSOK SZÁMRENDSZEREK KÖZÖTT, SZÁMÁBRÁZOLÁS, BOOLE-ALGEBRA

Assembly. Iványi Péter

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Intel x86 utasításkészlet

3. gyakorlat. Kettes számrendszer: {0, 1} Tízes számrendszer: {0, 1, 2,..., 9} 16-os (hexadecimális számrendszer): {0, 1, 2,..., 9, A, B, C, D, E, F}

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

Assembly programozás levelező tagozat

2. Fejezet : Számrendszerek

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

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

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

PE/COFF fájl formátum

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

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.

Informatikai Rendszerek Alapjai

Programozás II. Segédlet az első dolgozathoz

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

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

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

I+K technológiák. Számrendszerek, kódolás

Harmadik gyakorlat. Számrendszerek

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

The Architecture of Computer Hardware and Systems Software: An InformationTechnology Approach 3. kiadás, Irv Englander John Wiley and Sons 2003

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

HARDVERKÖZELI PROGRAMOZÁS1

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

Informatika érettségi vizsga

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

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

10-es számrendszer, 2-es számrendszer, 8-as számrendszer, 16-os számr. Számjegyek, alapműveletek.

Egyszerű RISC CPU tervezése

Analóg és digitális jelek. Az adattárolás mértékegységei. Bit. Bájt. Nagy mennyiségû adatok mérése

Assembly programozás: 2. gyakorlat

Kedves Diákok! A feladatok legtöbbször egy pontot érnek. Ahol ettől eltérés van, azt külön jelöljük.

Digitális technika (VIMIAA02) Laboratórium 1

Bevezetés az informatikába

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

Bevezetés az informatikába

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.

Digitális technika (VIMIAA02) Laboratórium 1

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

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

Programozott soros szinkron adatátvitel

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

Alapfogalmak. Dr. Kallós Gábor A Neumann-elv. Számolóeszközök és számítógépek. A számítógép felépítése

Digitális technika VIMIAA01

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

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

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 hibát az alábbi Python program segítségével tudjuk előidézni:

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

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

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

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

A feladatok legtöbbször egy pontot érnek. Ahol ettől eltérés van, azt külön jelöljük.

Átírás:

. előadás Kitlei Róbert kitlei.web.elte.hu Jegyzet: ssembly programozás 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 értelmezhető reprezentációja

iért érdemes assemblyt tanulni? a legalacsonyabb absztrakciós szint a gépi kód felett gyors, hatékony bizonyos feladatokhoz nélkülözhetetlen új rálátást ad

ilyen assemblert használunk? architektúra: x86-32 két fő gyártó: D, Intel operációs rendszer: inux assembler: nasm több platformra is megtalálható linker: gcc

ilyen más tárgyak kapcsolódnak? Nagy hatékonyságú számítások RIC processzorokkal zeries (I nagygépek) Operációs rendszerek Programnyelvek I. és II.

Platform C64 start ldx #$0d cycle lda hworld,x sta $0400,x dex bne cycle hworld rts.text "hello world!!!"

Platform zeries nagygép TIT 'Hello World (V/C)' HO TRT R 2,0 UING *,2 * WRTR 'Hello World!' * R 5,5 R 4 * ND HO

Platform VX 0:.data.text.align.globl _main _main:.word 2 jbr 4 5:.data 7:.ascii "Hello, world.2"...

Platform x86, DO,.OD tiny.cod ORG 00h HO PROC OV H,09h DX,msg INT 2h OV X,4C00h INT 2h HO NDP msg D 'Hello World$' ND HO

Platform x86, DO, T ; WRITTN IN T (Turbo ssembler).od TIN COD GNT U C:COD, D:COD ORG 00h TRT: mov ah,9 mov dx,offt sg int 2h int 20h sg D 'Hello World',3,0,'$' COD ND ND TRT

Platform x86, NetD, gas.data msg:.string "Hello World\n" len:.long. msg.text.globl _start _start: push $len /* aenge */ push $msg /* dresse */ push $ /* tdout */ movl $0x4, %eax /* write */...

Platform x86, inux, nasm section.text global main main mov eax, 4 mov ebx, mov ecx, mov edx, H int 0x80 mov eax, xor ebx, ebx int 0x80 section.data H db Hello world

datábrázolás ogikai értékek hamis 0 bit igaz és and 0 vagy or 0 0 0 0 0 0 0 nem not kizáró vagy 0 0 0 xor 0 0 0

datábrázolás ogikai értékek bitmanipuláció and 0 0 0 0 0 0 nulla töröl 0 0 0 0 0 or 0 0 0 0 0 0 0 0 egyes beállít 0 0 xor 0 0 0 0 0 0 0 egyes átvált 0 0 0 0 0 eredeti módosító spec. alk. önmagával módosítás: törlés

datábrázolás Nemnegatív számok a bitek sorban a bitek sorszáma számok előjel nélkül 0 0 0 7 6 5 4 3 2 0 2 7 2 6 2 5 2 4 2 3 2 2 2 2 0 28 64 32 6 8 4 2 2 7 + 0 2 6 + 0 2 5 + 2 4 + 2 3 + 2 2 + 0 2 + 2 0 a szám értéke: 57 0 leírása: 000b az egyes bitek helyi értékei

datábrázolás Nemnegatív számok a kezdeti szám ha páros a szám, 2 0 6 nullát írunk, ha 2 2 2 2 3 30 5 7 0 páratlan, egyet majd osztunk kettővel, és folytatjuk amíg maradt a 2 4 3 számból 2 5 2 6 ekkor a végeredményt alulról felfele olvasva kapjuk: 6 = 0 0 2

datábrázolás Nemnegatív számok hexadecimális (tizenhatos) számrendszer 0.. 9 mint tízesben számok leírása 0 0 0 0 0xCD = 4398 0 0 0 2 0 C 0 0 0h = 0 0 3 0 D 0 h posztfixszel 4 0 0 nullát kell írni 5 0 F elé, ha betűvel kezdődik

datábrázolás Nemnegatív számok összeadás 2 8 2 7 2 6 2 5 2 4 2 3 2 2 2 2 0 0 0 22 0 0 0 0 0 0 23 0 az összeg egy bittel hosszabb, erre majd fel kell készülni (átvitel) 0 0 0 0 2 + 2 + 2 = 2 0 2 +0 2 + 2 = 2 nem keletkezik túlcsordulás 2 + 2 =0 2 a nullát leírjuk, az egyes túlcsordul 434 0

datábrázolás lőjeles számok +52 negálás bitenként not, majd egy hozzáadása -52 nyolc biten ábrázolva ún. kettes komplemens alak nemnegatív előjeles szám nullával kezdődik, alakja megegyezik az előjel nélküliekével 0 0 0 0 0 not not not not not not not 0 0 0 + 0 0 0 0 a szám legfelső bitje mutatja az előjelét (: negatív)

datábrázolás CII karakterek Karakter Ö ű Θ

datábrázolás CII karakterek Karakter Ö ű Θ Karakterkészlet CII IO 8859- Unicode

datábrázolás CII karakterek Karakter Karakterkészlet Kód (hexa) kódolás: CII CII 4 Ö IO 8859- kódolás: IO 8859- D6 ű Unicode 0 7 Θ 03 98 kódolás: UTF-8

datábrázolás CII karakterek Karakter Karakterkészlet Kód (hexa) Ö IO 8859- D6 IO 8859-7 Θ

datábrázolás CII karakterek karakter új sor kocsivissza kódja 0 0 0D 3 szóköz 20 32.. Z 4..5 65..90 a.. z 6..7 97..22 megjegyzés a sorvége jelzése DO, Windows 0D 0, Unix, inux alatt 0 0.. 9 30..39 48..57 a számjegyek az angol ábécé betűi sorban, kihagyás nélkül sok karakter nincs benne, ezért fejlesztették ki a Unicode-ot minden karaktert egy nyolc bites számmal kódolunk

memória felépítése R lineáris memóriamodell a memória byte-ok sorozata mindegyiknek egy 32 bites címe van DD DDF D0 memóriacímek D... 60 0D C0 D... a memória tartalma

memória felépítése R lineáris memóriamodell egy lépésben kezelhető adatok byte 8 bit word 6 bit szó dword 32 bit duplaszó a memóriában byte-onként fordított sorrendben tárolódnak (little-endian) 0C7 0C7F 0C80 0C8... F 5 F 0C82 57... az 0C7 címen található duplaszó értéke: F5F 6 =426735706 0 az 0C8 címen található szó értéke: 57F 6 =22526 0

memória felépítése Regiszterek 7 az általános célú regiszterek D F4 0 0 0 0 0 0 0 0 0 0 0 3 30 29 28 27 26 25 24 23 22 2 20 9 8 7 6 5 4 3 2 0 9 8 7 6 5 4 3 2 0 eax ebx ecx edx esi edi a regiszter bitjei sorszámmal (vö. helyi érték) az általános célú regiszterek: eax, ebx, ecx, edx, esi, edi

memória felépítése Regiszterek az általános célú regiszterek 7 D F4 0 0 0 0 0 0 0 0 0 0 0 3 30 29 28 27 26 25 24 23 22 2 20 9 8 7 6 5 4 3 2 0 9 8 7 6 5 4 3 2 0 ax bx cx dx si di eax ebx ecx edx esi edi a regiszter bitjei sorszámmal (vö. helyi érték) az általános célú regiszterek: eax, ebx, ecx, edx, esi, edi 32 bitesek, egyes részeik külön névvel rendelkeznek

memória felépítése Regiszterek az általános célú regiszterek 7 D ah bh ch dh al bl cl dl F4 0 0 0 0 0 0 0 0 0 0 0 3 30 29 28 27 26 25 24 23 22 2 20 9 8 7 6 5 4 3 2 0 9 8 7 6 5 4 3 2 0 ax bx cx dx si di eax ebx ecx edx esi edi a regiszter bitjei sorszámmal (vö. helyi érték) az általános célú regiszterek: eax, ebx, ecx, edx, esi, edi 32 bitesek, egyes részeik külön névvel rendelkeznek

memória felépítése Regiszterek további 32 bites regiszterek jelzőbitek regisztere átviteli jelzőbit (carry) veremkezelő regiszterek: esp, ebp ezek is általános célúak csak a futási idejű verem kezelésére használjuk őket

fordítás menete agasszintű forráskód x.cpp y.adt z.hs Fordítóprogram g++ gnat ghc ssembly forráskód a.asm x.asm y.asm z.asm ssembler nasm g++ gas fasm Tárgykód a.o x.o y.o z.o

fordítás menete Tárgykód a.o x.o y.o z.o zerkesztő gcc Futtatható állomány a.out

z első program Programkód section.text ; a kódszegmens kezdete global main ; a program legyen elindítható main ; a program belépési pontját jelző címke mov eax, 4 ; a rendszerszolgáltatás mov ebx, ; paramétereinek beállítása: mov ecx, szoveg ; szöveg kiírása a képernyőre mov edx, 6 ; a szoveg címkéről 6 hosszan int 0x80 ; rendszerszolgáltatás hívása mov eax, ; a kilépés paramétereinek mov ebx, 0 ; beállítása int 0x80 ; rendszerszolgáltatás hívása: kilépés section.data ; az adatszegmens kezdete szoveg db Hello, 0x ; a szöveg, végén egy újsorral

z első program Fordítás, futtatás fordítás és futtatás > nasm hellovilag.asm -f elf > gcc hellovilag.o -o hellovilag >./hellovilag Hello > hellovilag.o hellovilag

z első program memóriacím az utasítás kódja 00000000 00000005 0000000 0000000F 0000004 0000006 000000 00000020 a memóriában sorban megjelenő bájtok 00000000 00000005 a generált bájtok a paraméterek kódolt alakja 8 04000000 0000000 9 00000000 06000000 CD 80 8 0000000 00000000 CD 80 48 65 6C 6C 6F 0 az eredeti forrásszöveg section.text ; ez a 3 sor global main ; nem generál main ; kódot mov eax, 4 mov ebx, mov ecx, szoveg mov edx, 6 int 0x80 mov eax, mov ebx, 0 int 0x80 section.data szoveg db Hello db 0x ista

Utasítások datmozgatás mnemonik mov edx, ebx mov bh, 9 edx a céloperandus ebx a forrásoperandus mov ah, 0h ; 0 nélkül más mov ecx, 0xFDC ; a teteje nullákkal töltődik fel mov feltétel nélküli adatmozgatás általános elv a forrás és a cél hosszának meg kell egyeznie mov edi, címke ; edi címke értékét veszi fel, ami egy szám HTN mov ebx, [címke] mov eax, bl ; ebx a címke által jelölt mov [c], [c2] ; memóriacímen található ; duplaszó értékét veszi fel

Utasítások Tegyük fel, hogy címke értéke 0x0D7DD. kkor datmozgatás mov feltétel nélküli adatmozgatás mov ecx, címke hatása mov ecx, 0x0D7DD olyan, mint 0D7DD 0D7D 0D7DF 0D770 0D77... C C 5 77 42...

Utasítások Tegyük fel, hogy címke értéke 0x0D7DD. kkor datmozgatás mov feltétel nélküli adatmozgatás hatása olyan, mov ecx, [címke] mint mov ecx, 0x775CC little endian bájtsorrend 0D7DD 0D7D 0D7DF 0D770 0D77... C C 5 77 42...

Utasítások meg kell adni a méretet, csak a címből nem derül ki datmozgatás mov feltétel nélküli adatmozgatás mov dword [56789Dh], 0xC07D mov word [456789Ch], 59Dh mov byte [456789h], 4567899 456789 456789 456789C 456789D... 0 9D 456789D 5... 56789C 56789D 56789 56789F 56789C0... D 7 C0 7...

Utasítások datmozgatás movzx előjel nélküli hosszkiterjesztés movsx előjeles hosszkiterjesztés xchg adatok felcserélése movsx és movzx: a cél hosszabb, mint a forrás movzx: nullákkal terjeszt ki movsx: a felső bittel terjeszt ki mov al, 0000000b movzx bx, al ; bx = 000000000000000b movsx cx, al ; cx = 0000000b xchg bx, cx ; bx = 0xFF80, cx = 0x0080 HTN movzx eax, ebx movsx ax, edi xchg bl, edx

Utasítások ogikai műveletek not logikai nem and logikai és or logikai vagy xor logikai kizáró vagy mov al, 000b not al ; al = 00000b and al, 00000b ; al = 0000000b or al, 0000b ; al = 000b xor al, 0000b ; al = 000b

Utasítások ritmetikai műveletek inc érték növelése add összeadás dec érték csökkentése mov al, 6 mov dl, 5 sub al, dl ; al = inc al ; al = 2 add al, al ; al = 4 dec al ; al = 3 neg al ; al = -3 előjelesen hatása ekvivalens ezzel: not al inc al ; előjel nélkül: 253 sub kivonás neg negáció

Utasítások ritmetikai műveletek mul előjel nélküli szorzás imul előjeles szorzás div előjel nélküli osztás idiv előjeles osztás egyoperandusúak, ennek hosszától függően a másik: byte: ax illetve al (osztás maradéka: ah) szó: dx:ax illetve ax (osztás maradéka: dx) duplaszó: edx:eax illetve eax (osztás maradéka: edx) dx:ax és edx:eax regiszterek úgy tekintendőek, mintha egy 32 (64) bites regisztert alkotnának összeolvasva. HTN div 2 div byte 2 mul eax, 3

Utasítások ritmetikai műveletek mul előjel nélküli szorzás imul előjeles szorzás div előjel nélküli osztás idiv előjeles osztás mov al, 5 mov dx, 0x0F ; dl = -2, dh = 0 mov bx, 20000 mul dh ; ax = 50 = 0x0032, dl marad imul dl ; ax = 0xFF9C = -00 div bx ; ez nem ax-ot osztja, hanem dx:ax-ot: ; 0x0FFF9C = 84 483 740 ; ax = 9224, dx = 3740 = 0x09C, dl = -00 idiv dl ; al = -92 = 0x4, ah = 24

Utasítások itforgatás shl és shr bitléptetés balra/jobbra sal és sar aritmetikai léptetés balra/jobbra rol és ror bitforgatás balra/jobbra mov eax, 0x38F ; eax = 000000b shr eax, 3 ; eax = 000000000b shl eax, 5 ; eax = 0000000000b ror eax, 7 ; eax = 0000000000b rol eax, 3 ; eax = 0000000000b sar eax, 4 ; eax = 00000000b sal eax, 2 ; eax = 0000000000b kettőhatvánnyal szorzás shl, shr: előjel nélkül sal, sar: előjelesen

Utasítások Feltételvizsgálat cmp összehasonlítás jmp feltétel nélküli ugrás ja, jb, jc,... feltételes ugrások egy feltételvizsgálat két sorból áll cmp eax, ebx ; beállítja a jelzőbiteket je cimke ; a jelzőbitek állása szerint ugrik ; ha a feltétel nem áll fenn, a program ; a következő utasítással folytatódik a feltételes ugrások alakja < > nem előjeles jb, jnae jbe, jna ja, jnbe jae, jnb jelzőbitek je, jne = jz, jnz egyenlőség előjeles jl, jnge jle, jng jg, jnle jge, jnl jc, jnc átvitel

Utasítások ogikai műveletek bt bittesztelés bts bittesztelés és beállítás btc bittesztelés és törlés btr bittesztelés és fordítás seta,... feltételes értékbeállítás mov al, 00000b bt al, 0 ; átviteli bit =, al = 00000b bts al, 3 ; átviteli bit = 0, al = 0000b btc al, 5 ; átviteli bit =, al = 00000b btr al, 7 ; átviteli bit = 0, al = 0000b cmp al, 0000b sete dl ; dl =