ISU Cvičení 7. Marta Čudová

Podobné dokumenty
ISU Cvičení 3. Marta Čudová

Assembler - 4.část. poslední změna této stránky: Zpět

Registry 32 bitové pro všeobecné použití: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.

Assembler DRUHÁ ČÁST OBSAH.

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Struktura programu v době běhu

Procesor z pohledu programátora

Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška I / 21

Petr Krajča. 26. říjen, 2012

ISU Cvičení 2. Marta Čudová

Assembler x86. Studijní text pro předmět: Strojově orientované jazyky Petr Olivka. Katedra informatiky VŠB-TU Ostrava

x86 assembler and inline assembler in GCC

ISU Cvičení 2. Marta Čudová

REbejs. 1. workshop (draft0)

Jazyk symbolických adres

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Architektura počítačů. Instrukce a návrh instrukční sady. Lubomír Bulej KDSS MFF UK

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Koncepce DMA POT POT. Při vstupu nebo výstupu dat se opakují jednoduché činnosti. Jednotlivé kroky lze realizovat pomocí speciálního HW.

Více o konstruktorech a destruktorech

Assembler - 3.část. poslední změna této stránky: Zpět

8. Laboratoř: Aritmetika a řídicí struktury programu

Exploitace zranitelností. Obsah

Operační systémy 2. Přednáška číslo 1. Úvod do OS

Programování v C++ 2, 4. cvičení

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

IUJCE 07/08 Přednáška č. 6

Assembler - 2.část. poslední změna této stránky: Zpět

Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška II. 14. říjen, / 26

Předmluva 13 Použité konvence 14. KAPITOLA 1 Základní číselné soustavy a pojmy Číselné soustavy a převody 15 1.

Architektura počítačů

Strojový kód. Instrukce počítače

Kubatova Y36SAP 8. Strojový kód Jazyk symbolických instrukcí asembler JSA pro ADOP a AVR Kubátová Y36SAP-strojový kód 1

Opakování programování

Princip funkce počítače

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Programátorský model x86

Konstruktory a destruktory

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

Úroveň strojového kódu procesor Intel Pentium Úvod

Michal Brandejs. Mikroprocesory Intel Pentium

Struktura a architektura počítačů (BI-SAP) 7

Architektury VLIW M. Skrbek a I. Šimeček

Úroveň strojového kódu procesor Intel Pentium Zásobník a konvencie volania

Popis instrukční sady procesoru ADOP

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

IMTEE Přednáška č. 11

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

Úvod do programování - Java. Cvičení č.4

Sdílení dat mezi podprogramy

Registry 8*32bit ERn (=16*16bit En+Rn, 8*16bit+16*8bit En+RnH+RnL)

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

8 Třídy, objekty, metody, předávání argumentů metod

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Easy Code 2.02 X86 použitelné instrukce.

Abstraktní datové typy: zásobník

Pointery II. Jan Hnilica Počítačové modelování 17

Architektury CISC a RISC, uplatnění v personálních počítačích

IMTEE Přednáška č. 8. interrupt vector table CPU při vzniku přerušení skáče na pevně dané místo v paměti (obvykle začátek CODE seg.

Funkce, intuitivní chápání složitosti

Úroveň strojového kódu 32-bitový procesor Intel Pentium

přetížení operátorů (o)

Programování v C++ 1, 1. cvičení

ISU Cvičení 1. Marta Čudová

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Operační systémy. Přednáška 8: Správa paměti II

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051

PB071 Programování v jazyce C Jaro 2017

Struktura a architektura počítačů (BI-SAP) 9

Systém adresace paměti

Rekurzivní algoritmy

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Dynamické datové struktury IV.

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Principy počítačů a operačních systémů

Knihovna DataBoxLib TXV první vydání prosinec 2010 změny vyhrazeny

Základy programování (IZP)

Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála.

KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO ASSEMBLER VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN

09. Memory management. ZOS 2006, L.Pešička

Úvod. Instrukce musí obsahovat: typ operace adresu operandu (operandů) typ operandů modifikátory adresy modifikátory operace POT POT

Základy programování (IZP)

Metody připojování periferií BI-MPP Přednáška 2

Základy programování (IZP)

Implementace LL(1) překladů

Assembler - 1.část. poslední změna této stránky: Zpět

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Transkript:

ISU Cvičení 7 Marta Čudová Supercomputing Technologies Research Group Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole icudova@fit.vutbr.cz

Osnova dnešního cvičení Úvod do skoků frame Volání podprogramu, předávání parametrů, lokální proměnné. PUSH, POP, CALL, RET, Řetězové instrukce Marta Čudová - ISU, 7. cvičení 2

Skoky Řídí tok programu Změna hodnoty v EIP -> skok Podmíněný skok (if-else) Využití v cyklech a podmínkách. Rozhodování podle příznaků v EFLAGS (ZF, CF) nebo ECX JZ, JE, JC, JCXZ, Nepodmíněný skok (goto) Skáče se vždy. Nevyhodnocuje se žádná podmínka, zda se skákat má nebo ne. JMP návěští Marta Čudová - ISU, 7. cvičení 3

Zásobník - opakování Velikost zásobníku je nastavena při sestavení programu. Pokud je dno nastavené na hodnotu 0xFF F, pak zásobník roste dolů k nižším adresám. Zásobník se vždy posouvá o násobky 4 ve 32bitovém režimu - minimálně o 4B PUSH val - val se uloží na vrchol zásobníku.. Nejprve ale podle velikosti operandu dekrementuje ESP (2/4B). PUSHA 16b registry se v tomto pořadí uloží na zásobník: AX, CX, DX, BX, SP, BP, SI, DI PUSHAD - 32b registry uloží na zásobník: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI POP reg hodnotu na vrcholu zásobníku uloží do registru reg. Podle velikosti operandu inkrementuje ESP (2/4B). POPA, POPAD Příklad: swap(a, b) ;eax = a, ebx = b push eax mov eax, ebx; a = b pop ebx ; b = původní a Pushing: sub esp, 4 ; alokace mista mov [esp], X ; ulož na stack Marta Čudová - ISU, 7. cvičení 4

Aplikační paměť Typicky paměť přidělená programu může být rozdělena do 4 segmentů kódový (text), datový (statické a globální proměnné), stack a heap. Každý segment je odkazován ukazatelem v segment registru. frame (rámec zásobníku) množina hodnot vložených na zásobník v rámci jednoho volání funkce. Vytváří se při volání podprogramu, kdy jsou parametry předány přes zásobník. Jednotlivé prvky zásobníku jsou vyhrazeny pro: Parametry podprogramu Lokální proměnné podprogramu Návratová adresa z volajícího podprogramu (uložený EIP) Obsahuje minimálně návratovou adresu. Heap dynamická alokace Volný prostor lokální proměnné, argumenty funkcí, Neinicializovaná data fixní velikost určená v době kompilace Inicializovaná data Code (text) fixní velikost určená v době kompilace Marta Čudová - ISU, 7. cvičení 5

Podprogram Podprogram = (často využívaná) skupina instrukcí. Volá se jako samostatná část programu. Instrukce CALL dest Provede zavolání podprogramu - uložení parametrů do zásobníku a uložení návratové adresy na zásobník (EIP). Návratová adresa je adresa místa volajícího podprogramu, odkud se provedlo volání daného podprogramu. Přejde na návěští podprogramu dest Instrukce CALL zařizuje vše s výjimkou ukládání parametrů na zásobník (to dělá programátor). Odpovídá: push eip + 2 ; navratova adresa jmp _funkce Instrukce RET [int] Zabezpečuje návrat z podprogramu Do EIP uloží návratovou adresu z vrcholu zásobníku Volitelný parametr [int] odstraní ze zásobníku int hodnot velikosti byte (= úklid + správné nastavení ESP) Marta Čudová - ISU, 7. cvičení 6

frame - příklad int total; int Square(int x) return x*x; Nižší adresa int SquareOfSum(int x, int y) int z = Square(x+y); return z; int int a = 2; int b = 5; total = SquareOfSum(a, b); printf( Result: %d\n, total); Vyšší adresa Marta Čudová - ISU, 7. cvičení 7

frame - příklad int total; int Square(int x) return x*x; int SquareOfSum(int x, int y) int z = Square(x+y); return z; int int a = 2; int b = 5; total = SquareOfSum(a, b); printf( Result: %d\n, total); -frame pro funkci Square() -frame pro funkci SquareOfSum() 1. push a push b push y ; 2. param. push x ; 1. param. push return addr of Return address of SquareOfSum() x (parameter) Z (local var) Return address of x (parameter) y (parameter) b (local var) a (local var) total -frame pro funkci Marta Čudová - ISU, 7. cvičení 8

frame - příklad int total; int Square(int x) return x*x; int SquareOfSum(int x, int y) int z = Square(x+y); return z; int int a = 2; int b = 5; total = SquareOfSum(a, b); printf( Result: %d\n, total); 2. push z SquareOfSum() push x push return addr of SquareOfSum() -frame pro funkci SquareOfSum() Return address of SquareOfSum() x (parameter) Z (local var) Return address of x (parameter) y (parameter) b (local var) a (local var) total -frame pro funkci Square() -frame pro funkci Marta Čudová - ISU, 7. cvičení 9

frame - příklad int total; Návrat int Square(int x) return x*x; int SquareOfSum(int x, int y) int z = Square(x+y); return z; int int a = 2; int b = 5; total = SquareOfSum(a, b); printf( Result: %d\n, total); 1. pop return addr of SquareOfSum() -> Návrat řízení funkci SquareOfSum() Square() Return address of SquareOfSum() x (parameter) Z (local var) Return address of x (parameter) y (parameter) b (local var) a (local var) total Kdykoliv v rámci běhu programu je vždy spouštěna funkce na vrcholu zásobníku. Ostatní čekají. Marta Čudová - ISU, 7. cvičení 10

frame - příklad int total; int Square(int x) return x*x; 2. pop x ; clean the stack (za to zodpovida volany podprogram) ; návrat do main pop z pop return addr of int SquareOfSum(int x, int y) int z = Square(x+y); return z; int int a = 2; int b = 5; SquareOfSum() Z (local var) Return address of x (parameter) y (parameter) b (local var) a (local var) total = SquareOfSum(a, b); printf( Result: %d\n, total); total Kdykoliv v rámci běhu programu je vždy spouštěna funkce na vrcholu zásobníku. Ostatní čekají. Marta Čudová - ISU, 7. cvičení 11

frame - příklad int total; int Square(int x) return x*x; int SquareOfSum(int x, int y) int z = Square(x+y); return z; 3. pop x ; clean the stack pop y int int a = 2; int b = 5; total = SquareOfSum(a, b); printf( Result: %d\n, total); b (local var) a (local var) total Kdykoliv v rámci běhu programu je vždy spouštěna funkce na vrcholu zásobníku. Ostatní čekají. Marta Čudová - ISU, 7. cvičení 12

frame - příklad int total; int Square(int x) return x*x; 4. push par2 ; total push par1 ; string push return addr of int SquareOfSum(int x, int y) int z = Square(x+y); return z; int int a = 2; int b = 5; total = SquareOfSum(a, b); printf( Result: %d\n, total); Return address of Result: %d\n total b (local var) a (local var) total -frame pro funkci printf() Kdykoliv v rámci běhu programu je vždy spouštěna funkce na vrcholu zásobníku. Ostatní čekají. Marta Čudová - ISU, 7. cvičení 13

frame - příklad int total; int Square(int x) return x*x; int SquareOfSum(int x, int y) int z = Square(x+y); return z; 5. pop par1 ; clean the stack pop par2 int int a = 2; int b = 5; total = SquareOfSum(a, b); printf( Result: %d\n, total); b (local var) a (local var) total Kdykoliv v rámci běhu programu je vždy spouštěna funkce na vrcholu zásobníku. Ostatní čekají. Marta Čudová - ISU, 7. cvičení 14

frame - příklad int total; int Square(int x) return x*x; int SquareOfSum(int x, int y) int z = Square(x+y); return z; int int a = 2; int b = 5; total = SquareOfSum(a, b); printf( Result: %d\n, total); Kdykoliv v rámci běhu programu je vždy spouštěna funkce na vrcholu zásobníku. Ostatní čekají. Marta Čudová - ISU, 7. cvičení 15

Vytvoření/zničení zásobníkového rámce Vytvoření zásobníkového rámce: push ebp ; ulozeni EBP (pouzivala ho volající funkce) mov ebp, esp ; EBP=ESP ukazuje na vrchol zasobniku sub esp, X Zničení zásobníkového rámce: mov esp, ebp ; obnova ESP pop ebp ret [ebp- X] (ESP) ; posun ESP; alokace prostoru pro lokální proměnné na zásobníku, X odpovídá 4*počet_proměnných ; obnova původního EBP [ebp- 4] (1. lokální proměnná) FP [ebp] (stará hodnota EBP = frame pointer) RA [ebp+ 4] (návratová adresa) 10 [ebp+ 8] (1. argument funkce) 5 [ebp+12] (2. argument funkce) 2 [ebp+16] (3. argument funkce) Ukázka procedury, která přijímá 3 parametry a má vyhrazený prostor pro X/4 lokálních proměnných Marta Čudová - ISU, 7. cvičení 16

Několik poznámek K definici zásobníkového rámce (pohyb v něm) při volání podprogramů slouží EBP. Pro vytvoření a zničení zásobníkového rámce lze použít instrukce enter a leave Pokud chceme zavolat funkci, musíme nejprve na zásobník uložit parametry, které funkce vyžaduje (opačné pořadí než je zápis) a poté návratová adresa funkce, která volání provádí (resp. řádek, od kterého bude po návratu program pokračovat). Zásobník může přetéct stack overflow REP instrukce Opakuj instrukci tolikrát, kolik je uvedeno v registru ECX (provede: ECX -= 1, if ECX!= 0 then opakuj) REPNE, REPNZ, REPZ, REPE Marta Čudová - ISU, 7. cvičení 17

Řetězové instrukce MOVS, CMPS, SCAS, LODS, STOS, INS, OUTS Ukazatele na data jsou v registrech DS:ESI a ES:EDI Zdrojová data jsou uložena na adrese DS:ESI ( SI = Source Index) Cílová data jsou uložena na adrese ES:EDI ( DI = Destination Index) Instrukce pracují se slabikami (LODSB, SCASB, ), slovy (LODSW, MOVSW, ) nebo dvojslovy (LODSD, CMPSD, ) Instrukce automaticky zvyšuje/snižuje (podle DF) indexové registry ESI a EDI (o Byte/Word/DWord). Nastavení DF: instrukce CLD, STD CMPS, SCAS ovlivňují příznaky v EFLAGS. Marta Čudová - ISU, 7. cvičení 18

Díky za pozornost