IPA - Lab.1 Úvod do programování v ASM



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

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

ČÁST 1. Základy 32bitového programování ve Windows

ISU Cvičení 2. Marta Čudová

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

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

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

ISU Cvičení 2. Marta Čudová

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Cvičení č. 5. Programování ve Windows program stopky 3 Body

PREPROCESOR POKRAČOVÁNÍ

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Projekt do předmětu PAS. Textový editor

ADT/ADS = abstraktní datové typy / struktury

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

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

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

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Operační systémy 2 Základy Windows API

REbejs. 1. workshop (draft0)

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Opakování programování

Konstruktory a destruktory

Programování ve Windows Dynamické knihovny. Andrea Číková Martin Osovský

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

K8055D.DLL v Technická příručka. Úvod. Obecné. Konvence volání. Nastavení adresy karty

PROGRAMOVÁNÍ V C++ CVIČENÍ

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY PROGRAMOVÁNÍ PROCESORŮ V 32- NEBO 64-BITOVÝCH OPERAČNÍCH SYSTÉMECH

TG Motion verze 4 Modul Virtuální PLC návod k obsluze

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Operační systémy. Cvičení 3: Programování v C pod Unixem

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

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

Struktura programu v době běhu

Základní datové struktury

PB161 Programování v jazyce C++ Přednáška 7

Zápis programu v jazyce C#

PB161 Programování v jazyce C++ Přednáška 7

Programování v Javě I. Leden 2008

Jazyk symbolických adres

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

TG Motion verze 4 Modul Virtuální PLC návod k obsluze

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

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

Programování v Javě I. Únor 2009

Programování II. Návrh programu I 2018/19

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <->

Popis funkcí a parametrů programu. Reliance External communicator. Verze 1.5.0

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

ISU Cvičení 3. Marta Čudová

Úvod do programovacích jazyků (Java)

Více o konstruktorech a destruktorech

Úvod do programování. Lekce 1

Algoritmizace prostorových úloh

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Programovací jazyk C++ Hodina 1

Assembler RISC RISC MIPS. T.Mainzer, kiv.zcu.cz

Obsah. Předm luva 3. Obsah \ 6

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

POČÍTAČE A PROGRAMOVÁNÍ

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Operační systémy a programování

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

Rozsáhlé programy = projekty

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

1. Téma 12 - Textové soubory a výjimky

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Jazyk C++, některá rozšíření oproti C

Základy programování (IZP)

Seminář Java II p.1/43

PB161 Programování v jazyce C++ Přednáška 9

7. Datové typy v Javě

David Bednárek Jakub Yaghob Filip Zavoral.

Ukazka knihy z internetoveho knihkupectvi

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

PŘETĚŽOVÁNÍ OPERÁTORŮ

Objektově orientované programování

Dědění, polymorfismus

PB161 Programování v jazyce C++ Přednáška 4

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ě

Quo vadis programování? Automatizace vyhodnocování studentských úloh

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Popis funkcí exportovaných z knihovny nddbe.dll

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

Transkript:

IPA - Lab.1 Úvod do programování v ASM Ondřej Klubal http://www.fit.vutbr.cz/~iklubal/ipa/ 2014 Ondřej Klubal IPA - Lab.1 1 / 16

Osnova Nástroje Konvence volání Použití DLL Windows API Makra NASM + VS 2010 Cvičení Ondřej Klubal IPA - Lab.1 2 / 16

Co budeme potřebovat/používat Čistý assembler (NASM): Compiler - Netwide ASseMbler (NASM) http://www.nasm.us/ Dokumentace http://www.nasm.us/doc/ Linker - alink http://alink.sourceforge.net/ Debugger - OllyDebugger http://www.ollydbg.de/ Smíšený kód (C/C++, MASM): MS Visual Studio 2010 inline assembler (option /FA), intrinsic functions (MMX, SSE) (option /Oi) Smíšený kód (C/C++, NASM): MS Visual Studio 2010 + NASM Ondřej Klubal IPA - Lab.1 3 / 16

(Úloha B) MS Visual Studio 2010 + NASM 1 Ondřej Klubal IPA - Lab.1 4 / 16

(Úloha B) MS Visual Studio 2010 + NASM 2 Command Line: nasm.exe -f win32 -Xvc -o "$(IntDir)\$ (InputName).obj" "$(InputDir)\$(InputName).asm" Outputs: "$(IntDir)\$(InputName).obj" Ondřej Klubal IPA - Lab.1 5 / 16

Datové typy Ondřej Klubal IPA - Lab.1 6 / 16

Volací koncence Ondřej Klubal IPA - Lab.1 7 / 16

Volací koncence cdecl, stdcall, pascal, fastcall lze specifikovat přímo při deklaraci funkce v C/C++ (nutná podpora překladače) cdecl je výchozí konvencí v rámci aplikace a statických knihoven stdcall je výchozí konvencí pro systmová volání a dynamické knihovny (32-bit Windows) Ondřej Klubal IPA - Lab.1 8 / 16

Předávání parametrů Zprava do leva (konvence) void f(int arg1, int ar2,int arg3) Zásobník roste se snižující se adresou (vrchol zásobníku má nenižší adresu) Příklad (stackframe): Ondřej Klubal IPA - Lab.1 9 / 16

Použití funkcí z dynamických knihoven Funkce jsou z externího zdroje (DLL) Direktivy extern a import: extern fce_z_dll import fce_z_dll knihovna.dll fce_z_dll_pro_fit Pozor - nepřímé volání dobře: call [fce_z_dll] špatně: call fce_z_dll Ondřej Klubal IPA - Lab.1 10 / 16

Windows API Win32 API je aplikační rozhraní 32bit Windows Potřebujeme pro komunikaci s uživatelem/zařízeními (I/O funkce) je třeba do zdojového textu vložit win32n.inc (direktiva %include) Řetězce ANSI a UNICODE: ANSI == 8 bit ASCII MessageBoxA UNICODE == 16 bit MessageBoxW Ondřej Klubal IPA - Lab.1 11 / 16

Windows API - funkce pro práci s konzolí - kernel32.dll Získání handle na standartní vstup/výstup HANDLE WINAPI GetStdHandle(DWORD nstdhandle); Čtení z konzole BOOL WINAPI ReadConsole( _In_ HANDLE hconsoleinput, _Out_ LPVOID lpbuffer, _In_ DWORD nnumberofcharstoread, _Out_ LPDWORD lpnumberofcharsread, _In_opt_ LPVOID pinputcontrol ); Čtení z konzole BOOL WINAPI WriteConsole( _In_ HANDLE hconsoleoutput, _In_ const VOID *lpbuffer, _In_ DWORD nnumberofcharstowrite, _In_ LPDWORD lpnumberofcharswritten, _Reserved_ LPVOID lpreserved ); Ukončení aplikace: VOID WINAPI ExitProcess(UINT uexitcode); Ondřej Klubal IPA - Lab.1 12 / 16

(Úloha A) NASM 1/2 ; 1) Definujeme potřebné symboly STD_OUT_HANDLE equ -11 NULL equ 0 ; je vhodné použít %include inc/win32n.inc, kde jsou tyto definovány ; 2) import externích funkcí použitých ve vaší aplikaci - doplňte extern GetStdHandle import GetStdHandle kernel32.dll ; je vhodné použít %include inc/general.mac, kde jsou tyto užitečná makra: ; dllimport (import funkcí z dll) ; invoke (voální funkcí) ; string (definice řetězců) ; Použití: ; dllimport ReadConsole, kernel32.dll, ReadConsoleA ; dllimport GetStdHandle, kernel32.dll ;definice datového segmentu - proměnné [section.data use32 class=data] smessage db "Zadejte cislo: ", 10, 0 ; string smessage, "Zadejte cislo: ",10 dwwritten dd 0... Ondřej Klubal IPA - Lab.1 13 / 16

(Úloha A) NASM 2/2... ;definice kódového segmentu [section.code use32 class=code]..start: push dword STD_OUT_HANDLE call [GetStdHandle]... Překlad: nasm -fobj NazevSouboru.asm alink -ope -subsys con NazevSouboru.obj nebo run.bat NazevSouboru Ondřej Klubal IPA - Lab.1 14 / 16

Cvičení Úloha A) NASM - vytvořte aplikaci, která načte číslo ze standardního vstupu na standardní výstup vypíše, zda se jedná o liché nebo sudé číslo používejte makra z general.mac Úloha B) MS Visual Studio 2010 + NASM v add.asm doplňte těla funkcí _addcdecl a _addstdcall (funkce má sečíst dvě čísla předaná jako parametr a vrátit výsledek) v main.cpp je nutno povolit volání a import těchto funkcí, aby byl vypsán výsledek vytvořte funkci numtoascii, která převede číslo na řetězec (ASM část vložte do add.asm, volání a výpis proveďte v main.cpp) Ondřej Klubal IPA - Lab.1 15 / 16

Děkuji za Vaši pozornost (příště MMX a optimalizace) Ondřej Klubal IPA - Lab.1 16 / 16