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

Rozměr: px
Začít zobrazení ze stránky:

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

Transkript

1 1 z :49 Assembler - 1.část poslední změna této stránky: Zpět Vítejte u první části učebních materiálů k Assembleru. Tyto učební texty vznikly na jaře roku 2000 jako doprovodný materiál ke cvičením. Původní texty nebyly určeny k samostudiu, ale jen jako doplňkový text k tomu, co se studenti dověděli na hodinách. Během let jsem Assembler několikrát střídavě učil a neučil v denním i kombinovaném studiu a tyto neustálé změny způsobily i postupné úpravy těchto Současná verze stále nemůže být pokládána za dostačující primární zdroj samostudia, nicméně alespoň je text stále aktualizován, aby reflektoval nové prvky a změny vždy v nejnovější verzi překladače Assembleru. Seznam doporučené studijní literatury (čili něco ke čtení :-) je uveden na hlavní stránce, dole pod nabídkou, ze které jste se zřejmě dostali na tuto stránku. 1. Úvodní seznámení s assemblerem Protože všichni by měli znát C++, nejsnazší cesta k assembleru je ukázat si rozdíly oproti C++. Hned na úvod je také potřeba si říci o nejzákladnější a největší a nejčastější chybě, kterou programátoři v Assembleru dělají: Píší podivné konstrukce, jakoby neznali "normální" styl programování v C++, Pascalu nebo jiném jazyku. Přitom v Assembleru byste měli 90% kódu napsat úplně stejným způsobem jako v jiném programovacím jazyku, pouze to má jinou syntaxi. :-) Pojďme tedy na rozdíly Assembleru oproti C++. Ten základní je už v samotném psaní příkazů. V assembleru se totiž píše každý příkaz na samostatný řádek. Každý takový příkaz má následující podobu: instrukce operand1,operand2. Čili na začátku řádku je příkaz, kterému se říká instrukce a za mezerou jsou parametry, zvané operandy. Počet operandů u příkazu je instrukce bez operandu: př.: cld instrukce s 1 operandem - operand se používá jako parametr i pro zápis výsledku: př.: inc eax instrukce se 2 operandy - oba operandy jsou parametry, výsledek se uloží do 1.operandu: add eax,1 instrukce se 3 operandy - 1.operand je vyhrazen pro výsledek, zbylé dva jsou parametry: imul eax,ebx,34 Nejjednodušší zápis assembleru je přímo do kódu C/C++. Většina překladačů C++ to umožňuje, ovšem ne všechny mají stejnou syntaxi. Zde je příklad, který si můžete vyzkoušet ve Visual C++:

2 2 z :49 void main() { _asm { imul eax,ebx,34 add eax,1 inc eax cld Všimněte si červeně vyznačených řádků. Příkazy v assembleru (dále jen asm) se píší do deklarace _asm {... Nutno dodat, že výše uvedený program nemá žádný efekt - je to ukázka, jak se zapisují instrukce se třemi, dvěma, jedním a žádným operandem. V následující tabulce je srovnání konstrukcí a operací v C++ a assembleru. C++ asm operandy název instrukce poznámka = mov 2 move += add 2 add -= sub 2 subtract *= /= mul (u) imul (s) div (u) idiv (s) 1 1,2,3 1 1 multiply divide ++ inc 1 increment -- dec 1 decrement >>= shr (u) sar (s) 2 2 shift right shift arithmetic right u=unsigned s=signed u=unsigned s=signed u=unsigned s=signed <<= shl 2 shift left &= and 2 (bitwise) and = or 2 (bitwise) or ^= xor 2 (bitwise) xor ~= not 1 (bitwise) not - neg 1 negate změní znaménko čísla

3 3 z :49 goto jmp 1 jump return ret - // ; - jednořádková poznámka & offset - reference (vrací pointer na proměnnou) * [ ] - dereference (vrací proměnnou, na kterou ukazuje pointer) *(char*)& byte ptr - (tvrdé) přetypování na 1bajtovou hodnotu *(short*)& word ptr - (tvrdé) přetypování na 2bajtovou hodnotu *(long*)& dword ptr - (tvrdé) přetypování na 4bajtovou hodnotu V tabulce nejsou podmíněné příkazy (if) a cykly (for, while, do). Důvodem je to, že v assembleru se tyto věci dělají úplně jinak než v C++. Pozor! V jedné istrukci můžete pouze jedenkrát adresovat paměť. To znamená, že např. příkaz a=33; zapíšete normálně jako mov a,33, ale příkaz a=b; takto jednoduše napsat nejde. Byly by zde dvě proměnné, čili dvojí adresace paměti v jedné instrukci. Tyto případy jsou poměrně časté a vyřešíte je pomocí registrů (viz následující kapitola). Přitom dvojí přístup do paměti v jedné instrukci je možný, pokud nejde o dvojí adresaci. Např. příkaz a++; se zapíše jednoduše inc a. Tato instrukce je provedena ve třech krocích: 1. CPU přečte z paměti hodnotu proměnné a. 2. CPU zvýší hodnotu o jedničku. 3. CPU zapíše novou hodnotu proměnné a zpět do paměti. Pozn.: Tento příklad taky ukazuje, že inc a není atomická instrukce ve víceprocesorových systémech. Velká a malá písmena se v assembleru standardně nerozlišují, ale lze to zapnout. Pokud chcete kombinovat assembler s C++, bez rozlišování velkých a malých písmen by to ani nešlo. Proto překladače obvykle nabízejí možnost velká a malá písmena rozlišovat jen u exportovaných funkcí, zatímco interně je assembler nerozlišuje. Možné kombinace operandů při násobení a dělení: násobení unsigned: dělení unsigned: mul r/m8 ax=al*op1 div r/m8 al=ax/op1, ah=zbytek

4 4 z :49 mul r/m16 dx:ax=ax*op1 div r/m16 ax=dx:ax/op1, dx=zbytek mul r/m32 edx:eax=eax*op1 div r/m32 eax=edx:eax/op1, edx=zbytek násobení signed: dělení signed: před dělením: imul r/m8 ax=al*op1 idiv r/m8 al=ax/op1, ah=zbytek cbw - rozšíří al->ax imul r/m16 dx:ax=ax*op1 idiv r/m16 ax=dx:ax/op1, dx=zbytek cwd - rozšíří ax->dx:ax imul r/m32 edx:eax=eax*op1 idiv r/m32 eax=edx:eax/op1, edx=zbytek cdq - rozšíří eax->edx:eax imul reg16,r/m16 op1=op1*op2 cwde - rozšíří ax->eax imul reg32,r/m32 op1=op1*op2 vysvětlivky: imul reg16,imm8/16 op1=op1*op2 reg = registr s uvedeným počtem bitů imul reg32,imm8/32 op1=op1*op2 mem = paměť (proměnná) s uvedeným počtem bitů imul reg16,r/m16,imm8/16 op1=op2*op3 r/m = registr nebo paměť s uvedeným počtem bitů imul reg32,r/m32,imm8/32 op1=op2*op3 imm = konstanta (immediate) s uvedeným počtem bitů Pozor! Instrukce násobení se třemi operandy (poslední dva řádky této tabulky) vyžadují, aby třetím operandem byla přímá hodnota (tj. konstntna-číslo, ne proměnná, ne registr). Pokud tam všam napíšete něco neplatného, překladač ve Visual C++ nenapíše chybu. Program však sprvně fungovat nebude. (Je to chyba Visual C++.) 2. Registry Registry jsou paměťové buňky přímo v CPU. Práce s nimi je rychlejší a nemusí se při tom adresovat paměť. Tzn. příklad z předchozího odstavce (příkaz a=b; v C++) můžeme v assembleru napsat pomocí registru eax (je to jeden z mnoha registrů, klidně můžete použít i jiný - záleží především na typu proměnné). mov eax,b mov a,eax A je to. ---

5 5 z :49 Ale registry je potřeba se naučit podrobně. Na přednášce struktury počítačů nebo operačních systémů byste měli probírat všechny podrobnosti. Zde se podívámě na to důležité. Základní aritmetické registry (použitelné pro počítání) jsou eax, ebx, ecx, edx. Adresovací registry jsou esi, edi, ebp, esp. Segmentové registry jsou cs, ds, es, fs, gs, ss. Registry s trojpísmenným jménem e.. jsou 32bitové. Segmenty jsou 16bitové a používají se většinou jen v 16bit programech (tj. v DOSu). Ve Widnows 95/NT (dále jen Win32) a Linuxu je 32bitový kód a segmenty nejsou většinou potřeba, protože paměť je podle potřeby operačním systémem mapována do virtuálního prostoru každého procesu. Podíváme se nejprve na registr eax, totéž platí pro ebx, ecx, edx. eax ax ah al Celý registr eax má 32 bitů (4 bajty). Registr ax odpovídá zápisu (short)eax v C++, je to tedy spodních 16 bitů z registru eax (dva bajty ze čtyř, tedy polovina). Horní polovinu eax takto adresovat nelze. Můžete však příkazem rol eax,16 přehodit horní a dolní polovinu registru. Dále můžete použít čtvrtinu, tj. 8 bitů (čili jeden bajt) pod názvem al. Druhý bajt (horní polovina ax) je přístupný jako ah. Adresovací registry esi, edi, ebp, esp fungují podobně, ovšem nemají 8bitové ekvivalenty. Tzn. jsou to 32bitové registry a mají 16bitové ekvivalenty si, di, bp, sp. Registr ebp má specifickou úlohu při adresování lokálních proměnných, takže ho nebudete ve svých programech nijak zvlášť měnit. Registr esp (stack pointer) ukazuje na vrchol programového zásobníku, takže jeho použití v programu je už prakticky úplně vyloučeno. Další dva jsou volně použitelné registry. 3. Programový zásobník Každý mikroprocesor používá při své činnosti zásobník. Zásobník (datová struktura typu LIFO) je umístěn někde v paměti a na jeho vrchol ukazuje registr esp. Zásobník vždy roste dolů, tj. přidáváním hodnot na zásobník se snižuje hodnota esp. Můžete použít tyto jednoduché instrukce: push op1 - uloží hodnotu op1 na zásobník (vždy 4 bajty) pop op1 - vytáhne hodnotu ze zásobníku a uloží do op1 (vždy 4 bajty) mov op1,[esp] - uloží do op1 hodnotu na vrcholu zásobníku (4 bajty), zásobník se nezmění Zásobník vždy pracuje po 4 bajtech (v 16bitovém režimu v DOSu po 2 bajtech). Teď si můžeme ukázat malý příklad. Co program dělá, zkuste poznat sami.

6 6 z :49 #include <math.h> int pythagoras(int a,int b) { int result; _asm { mov eax,a ;eax=a imul eax,a ;eax*=a mov ebx,b ;ebx=b imul ebx,b ;ebx*=b add eax,ebx ;eax+=ebx mov result,eax ;result=eax return (int)sqrt((double)result); Všechny instrukce mají dva operandy, použité registry jsou (32bitové) eax a ebx. Kvůli tomu, že jsme použili tyto dva registry, C++ je už nemůže použít pro sebe. Kdyby v nich něco na začátku bylo, náš asm program by to zrušil. Proto je vhodné program upravit následujícím způsobem, aby hodnoty registrů byly zachovány. #include <math.h> int pyth(int a,int b) { int result; _asm { push eax push ebx mov eax,a ;eax=a imul eax,a ;eax*=a mov ebx,b ;ebx=b imul ebx,b ;ebx*=b add eax,ebx ;eax+=ebx mov result,eax ;result=eax pop ebx pop eax return (int)sqrt((double)result); Instrukce push a pop pracují se zásobníkem CPU a sdílejí tak paměť s voláním funkce. Pokud tedy zapomenete zavolat pop přesně odpovídající k předchozímu push, program se zhroutí (buďte rádi, že máte Windows NT a nespadne celý počítač...). Pozor! Ve Visual C++ můžete libovolně používat registry eax, ebx, ecx, edx, esi, edi. Překladač sám přidá potřebné instrukce push a pop. V

7 7 z :49 Borland C (DOS) můžete používat pouze 16bit registry ax, bx, cx, dx. Indexové registry můžete použít, vypnete-li optimalizace. Anebo prostě musíte použít push-pop. Registr ebp se VŽDY používá pro adresování lokálních proměnných, takže ten nemůžete použít nikde, kde jsou nějaké lokální proměnné. Nemáte-li lokální proměnné, můžete ebp použít, ale musíte jej chránit pomocí push-pop. Segmentové registry zatím na nic nepotřebujete, aspoň tedy dodám, že jejich použití je možné jen opatrně (musíte také použít push-pop). 4. Přímé adresování Přímé adresování je tam, kde jsou adresy známé přímo při překladu, tzn. při práci se statickými nebo globálními proměnnými. Přímé adresování je naprosto jasné a velmi se podobná C++. V asm máte ale ještě nějaké možnosti navíc. static int thevar,thevar2; _asm { mov eax,thevar ;eax=thevar mov eax,thevar+4 ;eax=thevar2 mov eax,[offset thevar+4] ;eax=thevar2 Z příkladu je vidět, že názvy proměnných se v asm vyhodnocují vždy jako adresy (jakoby pointery), se kterými ještě můžete provádět základní aritmetické operace. Příklad počítá s tím, že proměnné thevar a thevar2 jsou v paměti bezprostředně za sebou. Proměnné jsou deklarovány static, protože s lokálními proměnnými ještě pracovat neumíme. 5. Nepřímé adresování Jednou ze základních konstrukcí C++ jsou pointery, bez kterých byste mnohé věci ani nemohli napsat. V assembleru tomu odpovídá nepřímé adresování. Zatímco u přímého adresování známe přesnou adresu proměnné již při překladu, u nepřímého adresování máme jen pointer, přesněji řečeno známe vzdálenost proměnné od nějakého pevného bodu. Přímé adresování paměti je tedy práce s běžnými proměnnými. mov eax,thevar ;přímé adresování nějaké globální proměnné jménem thevar mov eax,[thevar] ;totéž jako předchozí řádek

8 8 z :49 Pokud je thevar běžná globální proměnná typu int, pak oba tyto příkazy dělají totéž, čili do eax přiřadí hodnotu thevar. Proč tam jsou ty hranaté závorky: Pomůckou k pochopení, proč se název proměnné píše takto do hranatých závorek, může být představa paměti počítače jako jednoho velkého pole, do kterého přistupujeme pomocí těchto hranatých závorek stejně, jak to děláme ve vyšších programovacích jazycích při práci s poli. Toto srovnání můžete chápat doslova. Za "přímé adresování" pak označujeme situaci, kdy v době překladu programu víme, kde přesně je ona "proměnná" thevar v paměti. To u globální proměnné thevar víme vždy. Do oněch hranatých závorek se tedy při překladu dosadí nějaké číslo, které udává doslova "kolikátý bajt od začátku paměti" chceme načíst do registru eax. Za "nepřímé adresování" označujeme situaci, kdy v době překladu programu ještě přesnou pozici oné "proměnné" nevíme. To platí například pro situace, kdy k datům přistupujeme přes pointery. Mějme tedy nějakou globální proměnnou typu pointer jménem thepointer a zkusme následující kód. mov ebx,thepointer ;ebx=thepointer mov esi,2 ;esi=2 mov al,[ebx+esi] ;ax=*(bx+si)=*(thepointer+2)=thepointer[2] mov ah,thepointer[esi] ;toto nefunguje! Tato pro začátečníky méně jasná konstrukce je příkladem nepřímého adresování. Nejprve si načteme pointer do registru ebx - toto je opět přímé adresování. Jenže místo hodnoty proměnné, na kterou thepointer ukazuje, máme v ebx pouze její adresu. Do registru esi dáme číslo 2. Potom načteme do al hodnotu na adrese ebx+esi, což odpovídá práci s pointerem nebo prostě čtení druhého prvku pole charů, na které ukazuje thepointer. Ano, první řádky výše uvedeného kódu odpovídají tomu, když ve vyšším jazyku máme pointer na pole charů a přečteme z něj buňku pomocí thepointer[2]. Poslední řádek ukazuje alternativní možnost, kdy adresa pointeru není načtena do ebx. Tento příkaz je neplatný, protože má dvě adresování paměti. Nejprve požaduje načíst obsah thepointer a potom ještě obsah vypočítané adresy thepointer+esi. Toto je tedy příklad dvojí adresace paměti v jedné instrukci, o kterém již víme, že prostě není možná. Instrukce lea lea reg,address "load effective address" Instrukce lea vypočítá efektivní adresu a její hodnotu uloží do nějakého registru. Čili třetí řádek posledního příkladu můžete nahradit dvojicí:

9 9 z :49 lea ebx,[ebx+esi] ;base=ebx, index=esi, scale=1 mov al,[ebx] ;base=ebx V uvedeném příkladě to samozřejmě nemá smysl, jelikož by stačilo napsat add ebx,esi, ale při složitějším adresování může být použití lea výhodné. Podíváme se tedy na to, co všechno lze v adresování využít. Obecný tvar nepřímé adresy je base+(index*scale)+displacement kde scale je konstanta (může být pouze 1, 2, 4, 8). Jednotlivé položky adresy jsou pochopitelně nepovinné, viz. poznámky u výše uvedeného příkladu. Pozor! V 16bitovém řežimu (v DOSu) máte ovšem daleko horší situaci: bx+index+displacement, kde index může být jedině si nebo di. Všechny položky jsou pochopitelně nepovinné. Instrukci lea můžete také použít pro jednoduché násobení. Takové násobení je nejrychlejší možné rychlé (1 takt). Násobit můžete 2x, 3x, 4x, 5x, 8x, 9x. lea eax,[eax+8*eax] ;eax=9*eax (unsigned) Při práci s nepřímými adresami musíte dávat pozor na datové typy. V C++ takové problémy nejsou: long pole[20]; long *pointer=pole+12; //pointer na prvek pole[12] _asm { lea ebx,[pole+12] //ebx=pointer na prvek pole[3] = 12 bajtů za začátkem pole mov eax,[ebx] //eax=pole[3] Co z toho plyne? Při nepřímém adresování pokud možno využívejte násobení konstantami vždy, když typ prvku pole je short nebo long. long pole[20]; _asm { mov esi,3 lea ebx,[pole+esi*4] //ebx=pointer na prvek pole[3] = 12 bajtů za začátkem pole lea ebx,[pole+3*4] //totéž mov eax,[ebx] //eax=pole[3] Na obrázku vidíte oficiální popis výpočtu efektivní adresy: offset=base+(index*scale)+displacement. Uvedené hodnoty scale 1,2,3,4 jsou

10 10 z :49 bohužel chybné - správně má být 1,2,4,8 (jak vidět i mistr tesař se někdy utne - obrázek je z "Intel Architecture Software Developer's Manual"). Další obrázek ukazuje seznam datových typů podporovaných procesory x86 a jejich umístění v paměti (tzv. LSB = lowest significat byte first - důležité u vícebajtových proměnných). Proměnné mohou začínat na libovolné adrese, ovšem pokud budou patřičně zarovnány, vykonávaný program se tím výrazně zrychlí. Všechny tyto vlastnosti se 100% shodují s chováním C++ a dalších vyšších programovacích jazyků, proto nebudu zacházet do podrobností.

11 11 z :49 Poznámka: Ačkoliv procesory Pentium a novější jsou hardwarově 64bitové, pouze malá část instrukční sady je skutečně 64bitová a většina instrukcí pracuje se 32 nebo méně bity. Tento zdánlivý paradox je způsoben tím, že činnost RISC jádra je nezávislá na činnosti 64bitové paměťové jednotky (na obrázku jako "bus interface unit"). Viz následující velmi stručný diagram:

12 12 z :49 6. Disassembler Vaše dotazy často zodpoví disassembler. Disassembler je opak assembleru - je to program, který převádí binární strojový kód do symbolického tvaru v assembleru.

13 13 z :49 Napište příkaz ve Visual C++, potom ho spusťte pomocí F10 a stiskem Ctrl+Alt+D zobrazte dissassembly window (dříve Alt+8). Můžete se tak například podívat, jak se pracuje s poli. Uvědomte si ale, že pokud nekompilujete váš program s optimalizacemi (release build), tak často uvidíte poměrně krkolomný kód, který byste správně v assembleru nikdy neměli napsat (dlouhý a pomalý). 7. Inline a external assembler Inline assembler je ten, který píšete do souborů C++ (nebo jiných vyšších jazyků). External assembler je ten, který je v samostatných souborech s příponou ASM. Zatím se budeme věnovat pouze inline assembleru, protože se tím výhodně vyhneme některým potížím. Ukázka malého dema v assembleru je tady (100 řádků) a zkompilovaný program je tady (200 bajtů). Je to program pro MS-DOS, takže ve Windows nemusí běžet stoprocentně dobře. Zpět

ISU Cvičení 3. Marta Čudová

ISU Cvičení 3. Marta Čudová ISU Cvičení 3 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 Program

Více

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

Registry 32 bitové pro všeobecné použití: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP. 1 Procesor i486 a vyšší - úvodní seznámení Procesory i486 a vyšší jsou v technické literatuře dobře dokumentovány, ale dokumentace je rozsáhlá a obsahuje pro začínajícího i zkušeného programátora mnoho

Více

ISU Cvičení 7. Marta Čudová

ISU Cvičení 7. Marta Čudová 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

Více

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

Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška I. 10. 10. 2014 1 / 21 Operační systémy Úvod do Operačních Systémů Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/YOS: Přednáška I. 10. 10. 2014 1 / 21 Organizační informace email: petr.krajca@upol.cz

Více

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

Assembler - 5.část. poslední změna této stránky: Zpět 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í

Více

x86 assembler and inline assembler in GCC

x86 assembler and inline assembler in GCC x86 assembler and inline assembler in GCC Michal Sojka sojkam1@fel.cvut.cz ČVUT, FEL License: CC-BY-SA 4.0 Useful instructions mov moves data between registers and memory mov $1,%eax # move 1 to register

Více

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

Předmluva 13 Použité konvence 14. KAPITOLA 1 Základní číselné soustavy a pojmy Číselné soustavy a převody 15 1. 7 Předmluva 13 Použité konvence 14 KAPITOLA 1 Základní číselné soustavy a pojmy 15 1.1 Číselné soustavy a převody 15 1.2 Datové typy 18 KAPITOLA 2 Seznámení s mikroprocesory řady x86 21 2.1 Počítač obecně

Více

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

KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO ASSEMBLER VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN KATEDRA INFORMATIKY PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO ASSEMBLER ALEŠ KEPRT VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ REPUBLIKY Olomouc,

Více

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

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů). Strojový kód k d a asembler procesoru MIPS Použit ití simulátoru SPIM K.D. - cvičení ÚPA 1 MIPS - prostředí 32 ks 32bitových registrů ( adresa registru = 5 bitů). Registr $0 je zero čte se jako 0x0, zápis

Více

a operačních systémů

a operačních systémů NSWI2 2/2 ZS Principy počítačů a operačních systémů INSTRUKCE Kdybych nařídil generálovi, aby létal od květině ke květině a on by rozkaz neprovedl, nebyla by to chyba generálova, ale moje. král asteroidu

Více

Procesor z pohledu programátora

Procesor z pohledu programátora Procesor z pohledu programátora Terminologie Procesor (CPU) = řadič + ALU. Mikroprocesor = procesor vyrobený monolitickou technologií na čipu. Mikropočítač = počítač postavený na bázi mikroprocesoru. Mikrokontrolér

Více

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

Assembler - 2.část. poslední změna této stránky: Zpět 1 z 9 19.2.2007 7:51 Assembler - 2.část poslední změna této stránky: 9.2.2007 1. Příznaky (flagy) Zpět Flagy (česky podivně "příznaky", proto používám výhradně anglický název) jsou výlučnou záležitostí

Více

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

Assembler - 4.část. poslední změna této stránky: 9.2.2007. Zpět 1 z 11 19.2.2007 7:51 Assembler - 4.část poslední změna této stránky: 9.2.2007 Zpět 1. Proměnlivý počet parametrů Funkce s proměnlivým počtem parametrů lze v Assembleru implementovat stejně jako v C++.

Více

Pohled do nitra mikroprocesoru Josef Horálek

Pohled do nitra mikroprocesoru Josef Horálek Pohled do nitra mikroprocesoru Josef Horálek Z čeho vycházíme = Vycházíme z Von Neumannovy architektury = Celý počítač se tak skládá z pěti koncepčních bloků: = Operační paměť = Programový řadič = Aritmeticko-logická

Více

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

Strojový kód. Instrukce počítače Strojový kód Strojový kód (Machine code) je program vyjádřený v počítači jako posloupnost instrukcí procesoru (posloupnost bajtů, resp. bitů). Z hlediska uživatele je strojový kód nesrozumitelný, z hlediska

Více

Úroveň strojového kódu procesor Intel Pentium. Adresovanie pamäte

Úroveň strojového kódu procesor Intel Pentium. Adresovanie pamäte Úroveň strojového kódu procesor Intel Pentium Pamäťový operand Adresovanie pamäte Priama nepriama a indexovaná adresa Práca s jednorozmerným poľom Praktické programovanie assemblerových funkcií Autor:

Více

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

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

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

Struktura a architektura počítačů (BI-SAP) 7 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Struktura a architektura počítačů (BI-SAP) 7 doc. Ing. Hana Kubátová, CSc. Katedra číslicového návrhu Fakulta informačních technologii

Více

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus Činnost CPU Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus Hodinový cyklus CPU je synchronní obvod nutné hodiny (f CLK ) Instrukční cyklus IF = doba potřebná

Více

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

Assembler - 3.část. poslední změna této stránky: 9.2.2007. Zpět 1 z 7 19.2.2007 7:51 Assembler - 3.část poslední změna této stránky: 9.2.2007 Zpět 1. Externí assembler O externí assembler se jedná v případě, že máte zdroják v samostatném souboru s příponou ASM (některé

Více

REbejs. 1. workshop (draft0)

REbejs. 1. workshop (draft0) REbejs 1. workshop (draft0) Pojetí workshopu 1 14 dní Rychle a prakticky Teorie až později Podrobný slidy s klikacíma URL ke stažení na wiki Trochu ARM Crackme: jednoúčelový program pro reverzování, bez

Více

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

Pointery II. Jan Hnilica Počítačové modelování 17 Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky

Více

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

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro: 21.4.2009 Makra - dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h - jak na vlastní makro: #define je_velke(c) ((c) >= 'A' && (c)

Více

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í

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í 02 Jazyk C - je imperativní říkáme, co se má udělat, voláme příkazy - další imperativní jazyky: Pascal, Java, C/C++ apod. - na rozdíl od jazyků deklarativních např. Prolog, Haskell, Scheme, Lisp (funkcionální

Více

ISU Cvičení 2. Marta Čudová

ISU Cvičení 2. Marta Čudová ISU Cvičení 2 Marta Čudová Supercomputing Technologies Reseaŕch 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

Více

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

Assembler x86. Studijní text pro předmět: Strojově orientované jazyky Petr Olivka. Katedra informatiky VŠB-TU Ostrava Assembler x86 Studijní text pro předmět: Strojově orientované jazyky Petr Olivka Katedra informatiky VŠB-TU Ostrava email: petr.olivka@vsb.cz http://poli.cs.vsb.cz c 2014 Obsah 1 Procesor i486 a vyšší

Více

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

Operační systémy 2. Přednáška číslo 1. Úvod do OS Operační systémy 2 Přednáška číslo 1 Úvod do OS Co je to operační systém (definice) Operační systém jsou ty programové moduly ve výpočetním systému, jež ovládají řízení prostředku, jimiž je tento výpočetní

Více

Opakování programování

Opakování programování Opakování programování HW návaznost - procesor sběrnice, instrukční sada, optimalizace rychlosti, datové typy, operace (matematické, logické, podmínky, skoky, podprogram ) - paměti a periferie - adresování

Více

MSP 430F1611. Jiří Kašpar. Charakteristika

MSP 430F1611. Jiří Kašpar. Charakteristika MSP 430F1611 Charakteristika Mikroprocesor MSP430F1611 je 16 bitový, RISC struktura s von-neumannovou architekturou. Na mikroprocesor má neuvěřitelně velkou RAM paměť 10KB, 48KB + 256B FLASH paměť. Takže

Více

Princip funkce počítače

Princip funkce počítače Princip funkce počítače Princip funkce počítače prvotní úlohou počítačů bylo zrychlit provádění matematických výpočtů první počítače kopírovaly obvyklý postup manuálního provádění výpočtů pokyny pro zpracování

Více

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

8. Laboratoř: Aritmetika a řídicí struktury programu 8. Laboratoř: Aritmetika a řídicí struktury programu Programy v JSA aritmetika, posuvy, využití příznaků Navrhněte a simulujte v AVR studiu prográmky pro 24 bitovou (32 bitovou) aritmetiku: sčítání, odčítání,

Více

Semestrální práce z předmětu ÚPA MIPS

Semestrální práce z předmětu ÚPA MIPS Semestrální práce z předmětu ÚPA MIPS Jméno a příjmení: Martin Sloup Osobní číslo: A04372 Datum odevzdání: 21. prosince 2006 E-mail: msloup@students.zcu.cz Zadání Program převede signed integer na jeho

Více

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

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

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 Jednoduché stránkování Operační systémy Přednáška 8: Správa paměti II Hlavní paměť rozdělená na malé úseky stejné velikosti (např. 4kB) nazývané rámce (frames). Program rozdělen na malé úseky stejné velikosti

Více

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

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

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

Architektura počítačů. Instrukce a návrh instrukční sady. Lubomír Bulej KDSS MFF UK Architektura počítačů Instrukce a návrh instrukční sady Lubomír Bulej KDSS MFF UK Pro připomenutí: počítač je (jen) stroj Vykonává program Posloupnost instrukcí uložených v paměti. Vykoná instrukci a posune

Více

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

Petr Krajča. 26. říjen, 2012 Operační systémy Řízení výpočtu Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci 26. říjen, 2012 Petr Krajča (UP) KMI/YOS: Přednáška II. 26. říjen, 2012 1 / 18 Reprezentace hodnot záporná

Více

Simulátory aplikačně specifických instrukčních procesorů Jazyk LISA. Masařík Karel (masarik@fit.vutbr.cz)

Simulátory aplikačně specifických instrukčních procesorů Jazyk LISA. Masařík Karel (masarik@fit.vutbr.cz) Simulátory aplikačně specifických instrukčních procesorů Jazyk LISA Masařík Karel (masarik@fit.vutbr.cz) 1. Úvod Vestavěný systém Jednoúčelový systém, ve kterém je řídicí počítač zcela zabudován do zařízení,

Více

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY Stručný úvod do programování v jazyce C 2.díl České vysoké učení technické Fakulta elektrotechnická A1B14MIS Mikroprocesory pro výkonové systémy 07 Ver.1.10 J. Zděnek,

Více

4-1 4. Přednáška. Strojový kód a data. 4. Přednáška ISA. 2004-2007 J. Buček, R. Lórencz

4-1 4. Přednáška. Strojový kód a data. 4. Přednáška ISA. 2004-2007 J. Buček, R. Lórencz 4-4. Přednáška 4. Přednáška ISA J. Buček, R. Lórencz 24-27 J. Buček, R. Lórencz 4-2 4. Přednáška Obsah přednášky Násobení a dělení v počítači Základní cyklus počítače Charakteristika třech základní typů

Více

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

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz Semestrální práce z předmětu KIV/UPA Jan Bařtipán / A03043 bartipan@studentes.zcu.cz Zadání Program přečte ze vstupu dvě čísla v hexadecimálním tvaru a vypíše jejich součet (opět v hexadecimální tvaru).

Více

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

Kubatova 19.4.2007 Y36SAP 8. Strojový kód Jazyk symbolických instrukcí asembler JSA pro ADOP a AVR. 2007-Kubátová Y36SAP-strojový kód 1 Y36SAP 8 Strojový kód Jazyk symbolických instrukcí asembler JSA pro ADOP a AVR 2007-Kubátová Y36SAP-strojový kód 1 Architektura souboru instrukcí, ISA - Instruction Set Architecture Vysoká Architektura

Více

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

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG 2008-9) Programování v C++ Úplnej úvod Co se naučíte? tak samozřejmě C++, s důrazem na: dynamické datové struktury Objektově Orientované Programování STL (standardní knihovna šablon) vytváření vlastních šablon

Více

Adresní mody procesoru

Adresní mody procesoru Adresní mody procesoru K.D. - přednášky 1 Obecně o adresování Různé typy procesorů mohou mít v instrukci 1, 2 nebo více adres. Operandy mohou ležet v registrech nebo v paměti. Adresní mechanismus procesoru

Více

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

IUJCE 07/08 Přednáška č. 6 Správa paměti Motivace a úvod v C (skoro vždy) ručně statické proměnné o datový typ, počet znám v době překladu o zabírají paměť po celou dobu běhu programu problém velikosti definovaných proměnných jak

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

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

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 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 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského

Více

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr. Model procesoru Jedná se o blokové schéma složené z registrů, paměti RAM, programového čítače, instrukčního registru, sčítačky a řídicí jednotky, které jsou propojeny sběrnicemi. Tento model má dva stavy:

Více

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 14 Atomické akce dále nedělitelná = neproložitelná jiným procesem izolovaná =

Více

ISU Cvičení 2. Marta Čudová

ISU Cvičení 2. Marta Čudová ISU Cvičení 2 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 Kdo

Více

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

Úroveň strojového kódu procesor Intel Pentium Úvod Úroveň strojového kódu procesor Intel Pentium Úvod Štruktúra procesorov Intel Pentium Základné inštrukcie Vetvenia a cykly Praktické programovanie jednoduchých assemblerových funkcií Autor: Peter Tomcsányi,

Více

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean

Více

Popis instrukční sady procesoru ADOP

Popis instrukční sady procesoru ADOP instrukční sady procesoru ADOP ČVUT FEL, 2008 K. Koubek, P. Bulena Obsah instrukční sady...5 Univerzální registry...5 Registr příznaků FR...5 Standardní význam příznaků...6 Přehled instrukcí...7 ADD Add...8

Více

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

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

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více

Reprezentace dat v informačních systémech. Jaroslav Šmarda

Reprezentace dat v informačních systémech. Jaroslav Šmarda Reprezentace dat v informačních systémech Jaroslav Šmarda Reprezentace dat v informačních systémech Reprezentace dat v počítači Datové typy Proměnná Uživatelské datové typy Datové struktury: pole, zásobník,

Více

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

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

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

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Assembler pro Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Zápis instrukcí umíme už zapisovat instrukce v binárním tvaru to je silně nešikovné pro snazší vývoj

Více

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

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

CZ.1.07/1.5.00/

CZ.1.07/1.5.00/ Celá čísla Celočíselný typ má označení INTEGER. Kromě tohoto základního jsou k dispozici ještě další celočíselné typy, které uvádí následující tabulka. Každý typ umožňuje definovat určitý rozsah celých

Více

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

Principy počítačů a operačních systémů Principy počítačů a operačních systémů Instrukce jazyk počítače Zimní semestr 2011/2012 Jazyk počítače Instrukce a instrukční sada instrukce slova jazyka instrukční sada slovník Jaká slova by jazyk měl

Více

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

Assembler RISC RISC MIPS. T.Mainzer, kiv.zcu.cz Assembler RISC T.Mainzer, kiv.zcu.cz RISC RISC, neboli Reduced Instruction Set Computer - koncepce procesorů s redukovaným souborem instrukcí (vs. CISC, neboli Complex Instruction Set Computer, "bohatý"

Více

Platforma x64 a přechod na 64 bitů. Aleš Keprt Univerzita Palackého, Olomouc

Platforma x64 a přechod na 64 bitů. Aleš Keprt Univerzita Palackého, Olomouc Platforma x64 a přechod na 64 bitů Aleš Keprt Univerzita Palackého, Olomouc 2008, 2009 Úvod 64bit počítač není nový objev 64bit unixové servery od roku 1992 Nyní pozvolné rozšiřování 64bit na PC Pomalé

Více

Assembler DRUHÁ ČÁST OBSAH.

Assembler DRUHÁ ČÁST OBSAH. DRUHÁ ČÁST OBSAH. 1. Knihovny DLL obecný popis. 2. Statické knihovny Dll - výstupní soubor.lib 3. Připojení statické knihovny do konzolové aplikace. 4. Tvorba vlastních API ve statické knihovně a připojení

Více

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo Operátory, výrazy Tomáš Pitner, upravil Marek Šabo Operátor "Znaménko operace", pokyn pro vykonání operace při vyhodnocení výrazu. V Javě mají operátory napevno daný význam, nelze je přetěžovat jako v

Více

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0 Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0 int policko[100]; // tj. pole je od 0 do 99!!! policko[5] = 7; // pozor je to 6. prvek s indexem 5

Více

C2115 Praktický úvod do superpočítání

C2115 Praktický úvod do superpočítání C2115 Praktický úvod do superpočítání IX. lekce Petr Kulhánek, Tomáš Bouchal kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta, Masarykova univerzita, Kotlářská 2, CZ-61137

Více

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

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Tomáš Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Zjednodušené schéma systému z základ hardware pro mainframe tvoří: operační pamět - MAIN / REAL STORAGE jeden

Více

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování. Delphi lekce 6 Minimum z Object Pascalu Vrátíme se ještě k základům Object Pascalu. Struktura programu Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově

Více

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

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Jedenácté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Gabriela Nečasová, inecasova@fit.vutbr.cz

Více

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

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje f1(&pole[4]); funkci f1 předáváme hodnotu 4. prvku adresu 4. prvku adresu 5. prvku hodnotu 5. prvku symbolická konstanta pro konec souboru je eof EOF FEOF feof Správné vytvoření a otevření textového souboru

Více

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí) Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog

Více

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

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

Př. další použití pointerů

Př. další použití pointerů Př. další použití pointerů char *p_ch; int *p_i; p_ch = (char *) p_i; // konverze int * na char * 8 int i = 5; int *p_i; p_i = &i; POZOR!!!! scanf("%d", p_i); printf("%d", *p_i); Obecný pointer na cokoliv:

Více

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ý

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ý 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ý typem proměnné - ukazatel je tedy adresa společně s

Více

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

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

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

MAXScript výukový kurz

MAXScript výukový kurz MAXScript výukový kurz Díl čtvrtý jazyk MAXScript, část I. Jan Melichar, březen 2008 Jan Melichar (aka JME) strana 1 OBSAH ÚVOD... 4 ZÁKLADNÍ PŘÍKAZY... 5 OPERÁTORY... 6 PROMĚNNÉ... 6 POLE... 7 ZÁVĚREM...

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

Jazyk symbolických adres

Jazyk symbolických adres Jazyk symbolických adres 1 Proč programovat v JSA Pro některé procesory resp. MCU jsou překladače JSA dostupnější. Některé překladače vyšších jazyků neumí využít určité speciální vlastnosti procesoru.

Více

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

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h> 9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte

Více

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

Pole a Funkce. Úvod do programování 1 Tomáš Kühr Pole a Funkce Úvod do programování 1 Tomáš Kühr (Jednorozměrné) pole u Datová struktura u Lineární u Homogenní = prvky stejného datového typu u Statická = předem určený počet prvků u Pole umožňuje pohodlně

Více

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

Architektury CISC a RISC, uplatnění v personálních počítačích Architektury CISC a RISC, uplatnění v personálních počítačích 1 Cíl přednášky Vysvětlit, jak pracují architektury CISC a RISC, upozornit na rozdíly. Zdůraznit, jak se typické rysy obou typů architektur

Více

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Deváté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 27.11.2017,

Více

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

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19 Algoritmy I Cvičení č. 2, 3 1 ALG I, informace Cvičící RNDr. Eliška Ochodková, Ph.D., kancelář EA439 eliska.ochodkova@vsb.cz www.cs.vsb.cz/ochodkova Přednášející doc. Mgr. Jiří Dvorský, Ph.D., kancelář

Více

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí) Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog

Více

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Klimatizace. Třída: 4.C. Střední Průmyslová Škola Elektrotechnická Havířov Protokol do MIT. Skupina: 3. Zpráva číslo: 3

Klimatizace. Třída: 4.C. Střední Průmyslová Škola Elektrotechnická Havířov Protokol do MIT. Skupina: 3. Zpráva číslo: 3 Střední Průmyslová Škola Elektrotechnická Havířov Protokol do MIT Třída: 4.C Skupina: 3 Klimatizace Zpráva číslo: 3 Dne: 08.01.2007 Soupis použitých přístrojů: přípravek s μc 8051 přípravek s LCD přípravek

Více

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

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

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li: 13.4.2010 Typová konverze - změna jednoho datového typu na jiný - známe dva základní implicitní ("sama od sebe") a explicitní (výslovně vyžádána programátorem) - C je málo přísné na typové kontroly = dokáže

Více