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

Podobné dokumenty
Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

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

Jazyk symbolických adres

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Třídy a struktury v C++

Programovací jazyk Pascal

Jazyk C++ I. Šablony

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

Sada 1 - Základy programování

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 -

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

Odvozené a strukturované typy dat

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

dovolují dělení velkých úloh na menší = dekompozice

MPASM a IDE pro vývoj aplikací MCU (Microchip)

ISU Cvičení 3. Marta Čudová

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

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Algoritmizace a programování

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

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

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

NPRG030 Programování I, 2015/16 1 / :25:32

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

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

DUM 06 téma: Tvorba makra pomocí VBA

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

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

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

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

A51 MACRO ASSEMBLER POKUSNY PROGRAM DATE 10/3/007 PAGE 1

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

Prezentace a vysvětlení programového prostředí NXC

Číselné soustavy. Binární číselná soustava

2 Datové typy v jazyce C

24. XML. Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML.

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

22. TVORBA UŽIVATELSKÝCH INSTRUKCÍ A MAKER

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

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

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

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

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Software602 Form Designer

Programujeme v softwaru Statistica

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

PREPROCESOR POKRAČOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ

Datové typy a struktury

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

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

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

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

MQL4 COURSE. By Coders guru -8- Proměnné

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

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

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

Úvod do MS Access. Modelování v řízení. Ing. Petr Kalčev

18. ZPŮSOBY ŘEŠENÍ AUTOMATICKÉ VÝMĚNY NÁSTROJE A TECHNOLOGICKÉ TABULKY

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

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

Překladač a jeho struktura

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

Objektově orientované programování

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

Elementární datové typy

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

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

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

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

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

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla

CZ.1.07/1.5.00/

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Paměť počítače. alg2 1

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

MAXScript výukový kurz

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

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

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

1. Od Scheme k Lispu

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

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

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý

Lokální definice (1) plocha-kruhu

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

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

5 Přehled operátorů, příkazy, přetypování

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

Algoritmizace a programování

Modul LCD displeje se čtyřmi tlačítky. Milan Horkel

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

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

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

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Transkript:

1 z 5 19.2.2007 7:52 Assembler - 5.část poslední změna této stránky: 9.2.2007 1. Pseudoinstrukce a direktivy Zpět Kromě instrukcí můžete v Assembleru psát také další konstrukce, které se obšem nepřekládají na žádný konkrétní kód. Říkáme jim pseudoinstrukce a direktivy. Direktiva určuje způsob práce překladače assembleru a pseudoinstrukce je to, co se chová jako instrukce, i když to ve skutečnosti žádná instrukce není. Využívá se při tom toho, že překladače TASM a MASM jsou tzv. makro-assemblery, tj. mají podporu maker. (Význam maker znáte např. ze Scheme.) $ Znak string se vyhodnocuje na aktuální adresu při překladu. Jinými slovy jde o offset kódového segmentu instrukce, kde je tento znak použit. local jméno1:typ1, jméno2:typ2,... Tato konstrukce slouží k definici lokálních proměnných v proceduře. Musí být vždy uvedena úplně na začátku procedury. Lokální proměnné se vymezí na zásobníku, stejně jako v Céčku. include soubor Stejné jako #include v Céčku. Jméno souboru se uvádí jen tak, bez uvozovek. jméno label typ Takto můžete zpřístupnit paměť následující za touto definicí pod určitým jménem a typem. Můžete např. použít toto: the_byte label byte the_word label word the_dword dd? Anebo toto:

2 z 5 19.2.2007 7:52 the_dword label dword the_lower_word dw? the_upper_word dw? org offset Nastaví počítadlo offsetu kódu při překladu. Používá se obvykle jen pro generování COM souborů, které musí začínat na adrese 100h. 2. Netriviální datové typy Netriviální datové typy jsou v asm stejné jako v Céčku. Můžete je definovat jako struct, union nebo enum. Jejich význam je skutečně stejný jako v Céčku nebo C++ s tím dodatkem, že jména položek strukturovaných datových typů musí být v rámci souboru unikátní. (Bohužel.) Pozor! U netriviálních datových typů jsou zásadní rozdíly v syntaxi MASM a TASM. Dávejte na to bacha. ;platí jen pro TASM! jméno enum hodnota1,hodnota2,hodnota3... ;víceřádková verze - opět jen pro TASM! jméno enum { hodnota1 hodnota2... } Jak je vidět, výčtový typ TASM lze deklarovat dvěma způsoby. Strukturované typy, vhodné k napodobení objektově orientovaného programování, jsou již podporovány MASM i TASM. Syntaxe je však odlišná. ;MASM deklarace jméno struct...deklarace složek... jméno ends ;TASM deklarace jméno struc {...deklarace složek... }

3 z 5 19.2.2007 7:52 Strukturovaný typ struct odpovídá struct v Céčku (pochopitelně :-). Deklarace složek jsou totožné s deklaracemi obyčejných proměnných, tedy např. jméno db?. Deklaraci proměnné takového typu provedeme takto: jméno typ <výchozí hodnoty složek> Výchozí hodnoty složek jsou navzájem odděleny čárkami. Můžete i některé hodnoty vynechat (uvedete několik čárek za sebou). union Typy union se co do deklarace a způsobu použití neliší od typů struct. Význam je stejný jako v Céčku. kolik dup (čeho) Pole se deklarují tak, že vymezíme paměť pro několik stejných proměnných za sebou. K tomu slouží dup. Uvedeme několik příkladů. prazde_pole db 10 dup (?) pole_2d db 2 dup (3 dup (0)) ;pole 2x3 prvky pole_dvojic db 5 dup (0,1) ;opakuje 0,1,0,1,... length jméno Pomocí length zjistíte počet opakování, tj. v našem příkladu length prazdne_pole je rovno 10. size jméno Pomocí size zjistíte velikost jedné buňky v bajtech. Můžete to použít pro libovolné datové typy. U polí to vrací velikost pouze jedné buňky pole. 3. Konstanty Konstanty jsou ekvivalentní použití #define v Céčku. Číselné konstatny navíc můžete používat v makrech k dalším výpočtům, protože se vyhodnocují jako hodnoty ne jako text (tak to známe z Céčka). jméno = hodnota jméno equ hodnota První řádek ukazuje definici číselné konstanty. Druhý řádek ukazuje definici obecné konstanty. Všimněte si následujícího chování:

4 z 5 19.2.2007 7:52 A equ 6 B equ A-2 ;B = 4 C equ <A-2> ;C = A-2 Poslední řádek ukazuje jak zabránit vyhodnocení výrazu. Lomené závorky tedy použijeme tehdy, když si chceme vynutit zachování textové konstanty. Poznámka: V 99% případů se používají jen obecné konstanty definované pomocí equ. Číselné konstanty slouží k výpočtům v makrech, což je ukázáno v následujícím odstavci. rept Konstrukce rept je velmi silný nástroj, zvláště ve spojení s použitím konstant. Umožňuje nám totiž opakovat překlad. Vysvětlení nejlépe podá následující příklad. Dodejme ještě, že konec opakovaného bloku je označen endm. BitMask = 1 ;inicializuj bitovou masku (jednička v 1.bitu) BittBl label byte rept 8 db BitMask BitMask = BitMask * 2 ;posuň (jedničkový) bit doleva endm (Tento příklad je převzat z dokumentace TASM.) 4. Makra Makra, to je velmi složitá kapitola, která nám taky právě proto zbyla na konec. Makra mají v asm podobný význam jako ve Scheme, lze pomocí nich tedy dělat věci, které byste jinak dělat nemohli. Základní princip je stejný jako #define v Céčku. Čili nadefinujete jakoby funkci, která se ovšem na textové úrovni dosadí všude tam, kde bude použita. Na konci makra, na rozdíl od funkce, není instrukce ret a definice je ukončena direktivou endm, ovšem bez uvedení jména makra! jméno macro parametry ;tělo makra

5 z 5 19.2.2007 7:52 jméno endm Následuje malý příklad definice a použití makra. ;definice makra mojemakro macro param1,param2 mov al,param1 mov ah,param2 endm ;použití makra (nepoužívejte pojem "volat" makro - makro se nevolá) mojemakro 20,30 ;přiřadí al=20, ah=30 Na další důležité konstrukce se podívejte do knihy Turbo Assembler 3.0 nebo aspoň do MSDN nápovědy. Zde aspoň stručný přehled toho, co probereme na hodině: purge jméno - zruší platnost makra local jméno - definuje jméno jako lokální návěští (použijte na začátku těla makra) exitm - ukončí rozvíjení makra (analogie instrukce ret ve funkcích) &jméno - nahradí formální parametr makra jeho hodnotou, lze použít např. v poznámkách ;;text - ignorovaný komentář (normální komentáře se v makrech nevypouštějí) <text> - doslovný text, který se nijak nezpracovává, jen se vypustí <>!znak - stejné jako předchozí, ale jen pro jeden znak %parametr - zajistí vyhodnocení parametru před jeho dosazením, možno použít i uvnitř parametru Poznámka: Parametrem makra může být i jméno jiného makra. Potom můžete pomocí výše uvedených konstrukcí vytvářet velmi rychle opravdu krkolomné kódy, které byste ručně psali roky a roky. Assembler navíc narozdíl od C++ umožňuje krokovat makra, protože jim správně generuje debug info. Čili narozdíl od C++, kde špatně napsané šílené makro nikdy neodladíte, v assembleru by nalezení chyby neměl být problém. Zpět