EAX. segment O O O O offset

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

Download "EAX. segment O O O O offset"

Transkript

1 Registry Registry procesoru jsou paměťová místa umístěná na čipu procesoru. Od procesoru jsou všechny registry (kromě segmentových) rozšířeny z původních 16b na 32b. Tyto rozšířené registry poznáme podle toho, že jejich název je rozšířen o E (z angl. Extended). GPR (General Purpose Registers) registry obecného použití; dále se dělí na dvě 8b části (viz ilustrace) (E)AX (Accumulator) střádač (E)BX (Base register) používá se pro přístup k datům v datovém segmentu (E)CX (Counter register) čítač (řídicí proměnná pro cykly, bitové posuvy, ) (E)DX (Data register) zvláštní účel při ukládání částí výsledků operací MUL/DIV (celočíselného násobení a dělení) 31 0 EAX 15 0 AX AH AL indexové a ukazatelové registryu (E)SP (Stack Pointer) ukazatel na vrchol zásobníku (adresa SS:(E)SP) (E)BP (Base Pointer) využívá se pro přístup k datům uloženým na zásobníku (lokální proměnné a argumenty podprogramu) (E)SI (Source Index) (E)DI (Destination Index) oba indexregistry se využívají při práci s řetězcovými instrukcemi a při výpočtu efektivní adresy (E)IP (Instruction Pointer) ukazuje do kódového segmentu paměti na následující vykonávanou instrukci (tedy na adresu CS:(E)IP) segmentové registry kódový segment - obsahuje instrukce programu CS (Code Segment) zásobníkový segment SS (Stack Segment) datové segmenty DS (Data Segment), ES (Extra data Segment), FS a GS (E)FLAGS příznakový registr procesoru IF (Interrupt enable Flag) povoluje přerušení OF (Overflow Flag) značí přetečení aritmetické operace ALU DF (Direction Flag) udává směr průchodu při práci s řetězcovými instrukcemi SF (Sign Flag) nastaven při záporném výsledku ZF (Zero Flag) pokud je výsledek roven 0, pak je nastaven AF (Auxiliary carry Flag) nastavuje se podle přenosu ze spodního nibblu (nibble = polovina bytu) PF (odd Parity Flag) nastaven při sudém (slov. párnom) počtu bitů v log. 1 CF (Carry Flag) příznak přenosu (při přenosu mimo rozsah operandu) Segment : offset (v 16b režimu procesoru) Jedná se o přístup k adresaci paměti z dob 8086, kdy jsme pomocí 16b registrů nebyli schopni přistupovat do celého 1 MiB paměťového prostoru. Pro adresaci takového paměťového prostoru je potřeba 20b (2 20 B = 1 MiB). Adresu do paměti získáme posunutým součtem dvou 16b hodnot, které nazýváme segment O O O O offset segment představme si ho jako okno, přes které můžeme přistupovat jen k určité ohraničené části paměti ukazuje na spodní okraj tohoto pomyslného okna je 16b číselná hodnota, která reprezentuje 20b hodnotu (spodní čtveřici bitů považujeme za nulovou) segmenty mohou začínat na adrese dělitelné 16 (opět díky té pomyslné spodní čtveřici bitů) offset pomocí něj se dá relativně adresovat celý paměťový prostor uvnitř segmentu můžeme si odvodit maximální velikost jednoho segmentu při 16b offsetu to bude 2 16 B = 64 KiB (u a jejích následníků může být i menší, ale to je jiná pohádka...). různými kombinacemi hodnot segmentů a offsetů můžeme adresovat stejné místo v paměti

2 Základní operandy Důležité je vědět, že znaménkové operandy jsou ukládány v tzv. doplňkovém kódu. V tomto kódu poznáme zápornou hodnotu na první pohled díky jedničce v MSB (Most Significant Bit) tedy v nevýznamnějším bitu (to jest ten nejvíce vlevo) operandu. Algoritmus pro převod mezi zápornými a kladnými hodnotami uloženými v doplňkovém kódu: začínám zprava opisovat nuly až do doby, než narazím na první jedničku tuto jedničku také opíši zbylé bity operandu při zapisování neguji Little-Endian jedná se o způsob ukládání vícebytových operandů v paměti využívaný Intelem nejméně významné byty jsou v paměti ukládány na nižší paměťové adresy označení Big-endian a Little-endian převzato z románu Jonathana Swifta Gulliverovy cesty: nepochopené nařízení vládce rozbíjet vejce na menším konci, zatímco tradičně se vejce rozbíjelo na konci větším Binary Coded Decade Unpacked BCD - v jedné slabice je uložena jedna číslice v BCD kódu (hodnota 0-9) a horní nibble je nulový; tento tvar je vhodný pro převod do kódu ASCII, kdy stačí jen přičíst číslo 48 (logický součet s číslem 0x30). Packed BCD na bytu jsou uloženy dvě BCD číslice (rozsah až 99); procesor řady x86 s nimi neumí přímo pracovat, ale umí je převést do typického binárního čísla (viz. instrukce AAA, AAD, AAM, AAS, DAA, DAS) Výpočet EA (Efektivní Adresy) v 16b režimu Effective Address = ( báze + index + displacement ) báze = { BX, BP } index = { SI, DI } displacement = { d8b, d16b } Nachází-li se ve výrazu BP jako báze, přistupujeme k zásobníku (pohybujeme se uvnitř SS)! V ostatních případech, kdy není segment vyjádřen explicitně (viz následující tabulka), se přistupuje k datovému segmentu (DS). Tyto segmenty jsou nutné znát pro výpočet FA (Fyzické Adresy). Obsah segmentového registru typ odkazu implicitní seg. reg. explicitní seg. reg. offset instrukce CS (Code Segment) - IP (Instruction Pointer) zásobník SS (Stack Segment) - SP (Stack Pointer) zdrojová řetězová data DS (Data Segment) ano SI (Source Index) cílová řetězová data ES (Extra Segment) - DI (Destination Index) data pomocí BP (Base Pointeru) SS (Stack Segment) ano EA (Effective Address) standardní data DS (Data Segment) ano EA (Effective Address) Přímý a nepřímý přístup k hodnotám v paměti Jako vhodný příklad mi poslouží jedno z počítačových cvičení, kde jsme vytvářeli procedury, které dělali jednoduché operace s maticemi o rozměrech 3x3. Analogii můžeme pozorovat v ukazatelích..start: bits 16 %include rw.asm segment code prologue mov AX, _matrix_a ; návěští u těchto dvou instrukcí se překrývají, tak mají obě instrukce stejný efekt, mov AX, _A1 ; tj. do AX ukládají offset prvního prvku matice mov AX, [_A2] ; přímý přístup k prvku v prvním sloupci na druhém řádku (AX = 9) mov BX, [_A] ; nepřímý přístup BX obsahuje offset návěští _A1 mov AX, [BX] ; nyní přistoupíme k hodnotě, kam odkazuje návěští _A1 (AX = 5)... epilogue... segment data... _matrix_a _A1 dw 5, 2, 3 _A2 dw 9, 1, 1 _A3 dw 3, 2, 8 _A dw _A1, _A2, _A3 název rozsah bezznaménkových operandů rozsah znaménkových operandů byte 8b word 16b doubleword 32b ; jedna matice uložená v DS

3 Přehled základní instrukční sady x86 (nejen) přenosové instrukce (nenastavují příznaky) MOV cíl, zdroj (MOVe) zkopíruje obsah zdroje do cíle množina operandů = {(reg, reg), (reg, mem), (reg, hod), (mem, hod), (mem, reg), (seg, reg16), (seg, mem16), (reg16, seg), (mem16, seg)} XCHG cíl, zdroj (exchange) zamění obsah zdroje a cíle množina parametrů = {(reg, reg), (reg, mem), (mem, reg)} LAHF (Load Flags into AH register) do AH uloží některé příznaky SF ZF 0 AF 0 PF 1 CF SAHF (Store Flags from AH register) z AH načte některé příznaky párová instrukce k LAHF využívá se pro přenos výsledků porovnávacích instrukcích při práci s FPU (není potřeba u instrukcí FCOMI a FCOMIP) LDS reg16, mem16:16 (Load far pointer into Data Segment register) naplní DS registr a cílový registr (reg16) ukazatelem (segment : offset) z paměti adresované zdrojovým operandem LES reg16, mem16:16 (Load far pointer into Extra Segment register) naplní ES registr a cílový registr (reg16) ukazatelem (segment : offset) z paměti adresované zdrojovým operandem LEA cíl, zdroj (Load Effective Address) naplní cílový registr efektivní adresou zdrojového operandu vypočítá offset operandu (pouze pro konstantní offset) množina operandů = {(reg16, mem)} LEA DI, [BX + 5] ; vypočítá adresu paměti MOV DI, [BA + 5] ; přečte data z paměti! CBW (Convert Byte to Word) CWD (Convert Word to Doubleword) CDQ (Convert Doubleword to Quadword) tato skupina instrukcí provádí znaménkové roztažení 8b registr AL roztáhne do 16b registru AX původní AX = xxxx xxxx snnn nnnn roztažené AX = ssss ssss snnn nnnn obdobně se chovají její CWD (16b AX 32b DX:AX) a CDQ (32b EAX 64b EDX:EAX) NOP (No OPeration) prázdná operace provádí instrukci XCHG AX, AX instrukce pro práci se zásobníkem (nenastavují příznaky) Zásobník je segment v paměti, který se používá pro dočasné uložení např. obsahu registrů. Velikost ukládaných operandů vždy musí odpovídat režimu procesoru (ve 32b režimu nelze ukládat např. obsah registru AL nebo word z paměti). Vrcholem zásobníku je nejvyšší volná pozice v zásobníku. Po uložení dat na tuto pozici je vrchol zásobníku snížen o 2 nebo 4 (dle režimu procesoru). PUSH zdroj (PUSH onto stack) na vrchol zásobníku uloží obsah zdroje množina operandů = {reg, mem, hod, seg} POP cíl (POP a value from stack) odebere hodnotu z vrcholu zásobníku, kterou uloží do cíle množina operandů = {reg, mem, seg[ mimo CS! ]} PUSHA (PUSH All general-purpose registers onto stack) uloží na zásobník (E)AX, (E)BX, (E)CX, (E)DX, původní (E)SP, (E)BP, (E)SI a (E)DI POPA (POP All general-purpose registers from stack) ze zásobníku obnoví registry uložené pomocí instrukce PUSHA párová instrukce k PUSHA [ mimo SP! ] PUSHF (PUSH Flags register onto stack) uloží na vrchol zásobníku příznakový registr POPF (POP Flags register from stack) výběr příznakového registru z vrcholu zásobníku

4 instrukce binární aritmetiky (nastavují příznaky!) INC cíl (INCrement) OF, SF, ZF, AF a PF k cíli přičte 1 (bez kontroly přetečení nenastavuje CF!) ADD cíl, zdroj (integer ADD) OF, SF, ZF, AF, PF a CF součet zdroje a cíle je uložen do cíle pokud je zdroj menší (8b zdroj a 16b cíl), tak na něj před součtem aplikuje znaménkové roztažení (platí i pro ADC) množina operandů = {(reg, reg), (reg, hod), (reg, mem), (mem, reg), (mem, hod)} ADC cíl, zdroj (ADd with Carry) OF, SF, ZF, AF, PF a CF viz. ADD společně s připočtením obsahu CF (příznakem přetečení) k cíli DEC cíl (DECrement) OF, SF, ZF, AF a PF od cíle odečte 1 (nenastavuje CF!) SUB cíl, zdroj (SUBtraction) OF, SF, ZF, AF, PF a CF odečte zdroj od cíle a výsledek uloží do cíle pokud je zdroj menší (8b zdroj a 16b cíl), tak na něj před součtem aplikuje znaménkové roztažení (platí i pro SBB) množina operandů = {(reg, reg), (reg, hod), (reg, mem), (mem, reg), (mem, hod)} SBB cíl, zdroj ( SuBtraction with Burrow) OF, SF, ZF, AF, PF a CF viz. SUB se zohledněním hodnoty CF MUL zdroj (unsigned MULtiplication) nedef.: SF, ZF, AF a PF! bezznaménkové násobení zdroje se střádačem pokud lze výsledek násobení uložit do operandu o dané velikosti, tak jsou příznaky CF i OF nastaveny na 0 (platí i pro IMUL) výsledek je uložen do (o typu násobení určuje označení místa zdroje) 8b AX 16b DX:AX 32b DX:EAX množina operandů = {reg, mem} IMUL zdroj (signed MULtiplication) nedef.: SF, ZF, AF a PF! znaménkové násobení (viz. MUL) DIV zdroj ( unsigned DIVision) nedef.: OF, SF, ZF, AF, PF a CF! bezznaménkové dělení střádače se zdrojem (o poloviční délce) pro dělení dvou stejně velkých hodnot uložíme do horní poloviny dělence (AH, DX nebo EDX) nulu výsledky jsou uloženy do (o typu násobení určuje označení místa zdroje) 16b/8b AX / zdroj celočíselný podíl do AL zbytek do AH 32b/16b DX:AX / zdroj celočíselný podíl do AX zbytek do DX 64b/32b EDX:EAX / zdroj celočíselný podíl do EAX co se zbytkem zahodit zaokrouhlit podle něj zbytek do EDX DIV BL ADD AH, AH ; double reminder (zdvojnásobeni zbytku po celočíselném dělení) CMP AH, BL ; test for rounding (kontrola zaokrouhleni) JB.NEXT INC AL.NEXT: množina operandů = {reg, mem} IDIV zdroj ( signed DIVision) nedef.: OF, SF, ZF, AF, PF a CF! znaménkové dělení (viz. DIV) pro dělení dvou stejně velkých hodnot provedeme znaménkové roztažení střádače (instrukce CBW a její alternativy) NEG cíl (two's complement NEGation) OF, SF, ZF, AF a PF if (cíl == 0) {CF = 0;} else {cíl = -cíl; CF = 1;} množina operandů = {reg, mem} CMP cíl, zdroj (CoMPare two operands) OF, SF, ZF, AF, PF a CF provede nedestruktivní (výsledek zahodí, jen dle něj nastavuje příznaky) odečtení zdroje od cíle a tím je porovná pokud je zdroj menší (8b zdroj a 16b cíl), tak na něj před porovnáním aplikuje znaménkové roztažení množina operandů = {(reg, reg), (reg, hod), (reg, mem), (mem, reg), (mem, hod)}

5 logické instrukce (kromě instrukce NOT nastavují příznaky!) pracují po jednotlivých bitech nastavují příznaky (vyjma instrukce NOT) příznak příznak přenosu (CF) příznak přetečení (OF) nulový příznak (ZF) znaménkový příznak (SF) bit parity (PF) Auxiliary carry Flag (AF) akce nuluje (0 CF) nuluje (0 OF) nastavuje dle výsledku nastavuje dle výsledku nastavuje dle výsledku ničí (není definována) časté použití logických operací je při tzv. maskování hodnota masky slouží k násilnému nastavení některých bitů operandu na log. 0 (AND) nebo log. 1 (OR) převod znaku v AL z malého znaku na veliký (nastavení 5. bitu do log. 0) MOV AL, 'a' ; AL = b AND AL, b ; AL = b (AND nuluje) převod BCD číslice do jejího ASCII znázornění MOV AL, 6 ; AL = b OR AL, b ; AL = b (OR nastavuje log.1) rychlé vynulování registru XOR AL, AL ; AL = b pravdivostní tabulka logických operací vstupy logických operací výstupy jednotlivých logických operací x1 x2 negace NOT x1 logický součin x1 AND x2 logický součet x1 OR x2 nonekvivalence x1 XOR x2 O O I O O O O I I O I I I O O O I I I I O I I O AND cíl, zdroj (AND) viz. tabulka logický součin pouze logický součin dvou log. 1 dá za výsledek log. 1 pokud je zdroj menší (8b zdroj a 16b cíl), tak na něj před součtem aplikuje znaménkové roztažení množina operandů = {(reg, reg), (reg, hod), (reg, mem), (mem, reg), (mem, hod)} OR cíl, zdroj (OR) viz. tabulka logický součet pouze logický součet dvou log. 0 dá za výsledek log. 0 pokud je zdroj menší (8b zdroj a 16b cíl), tak na něj před součtem aplikuje znaménkové roztažení množina operandů = {(reg, reg), (reg, hod), (reg, mem), (mem, reg), (mem, hod)} XOR cíl, zdroj (exclussive OR) viz. tabulka nonekvivalence výsledkem nonekvivalence je log. 1, která signalizuje přechod mezi log. stavy, tj. z log. 1 do log. 0 a naopak nejvýstižnější je hláška, XOR detekuje změny pokud je zdroj menší (8b zdroj a 16b cíl), tak na něj před součtem aplikuje znaménkové roztažení množina operandů = {(reg, reg), (reg, hod), (reg, mem), (mem, reg), (mem, hod)} NOT cíl (Negation of One complement) nemění příznaky logická negace cílového operandu záměna log. stavu, tj. všechny log. 0 jsou nastaveny do log. 1 a naopak množina operandů = {reg, mem} TEST cíl, zdroj (TEST of and) viz. AND nedestruktivní logický součin (nastaví příznaky dle výsledku, ale ten neukládá) tzn., nemění cílový operand téměř shodný s instrukcí AND

6 instrukce posuvů a rotací SHL cil, [počet] (SHift Left) CF posune bity doleva o hodnotu operandu počet; zprava doplňuje nulami; bit s nejvyšší vahou (dále MSB) přesune do CF pokud není uveden operand počet, bere se v úvahu hodnota uložená v registru CL použití CF rychlé násobení mocninou 2 počet packing data spojení dvou nibblů (4bitů) množina operandů = {(reg, -), (reg, hod), ( mem, -), (mem, hod)} SHR cil, [počet] (SHift Right) CF posune bity doprava o hodnotu operandu počet; zleva doplňuje nulami; bit s nejnižší vahou (dále LSB) přesune do CF pokud není uveden operand počet, bere se v úvahu hodnota uložená v registru CL použití CF rychlé dělení mocninou 2 počet packing data spojení dvou nibblů množina operandů = {(reg, -), (reg, hod), ( mem, -), (mem, hod)} SAR cil, [počet] (Shift Arithmetic Right) CF posune bity doprava o hodnotu operandu počet; zleva doplňuje hodnotou z MSB; LSB přesouvá do CF pokud není uveden operand počet, bere se v úvahu hodnota uložená v registru CL použití CF rychlé dělení mocninou 2 počet pro znaménková čísla množina operandů = {(reg, -), (reg, hod), ( mem, -), (mem, hod)} ROL cil, počet (ROtate Left) CF rotuje bity v cíli zprava doleva; v každém kroku uloží MSB do CF CF množina operandů = {(reg, -), (reg, hod), ( mem, -), (mem, hod)} ROR cil, počet (ROtate Right) CF rotuje bity v cíli zleva doprava; v každém kroku uloží LSB do CF CF množina operandů = {(reg, -), (reg, hod), ( mem, -), (mem, hod)} RCL cil, počet (Rotate trough Carry flag Left) CF rotuje bity v cíli zprava doleva; CF se používá jako 9. (resp. 17.) bit cíle, čili MSB CF množina operandů = {(reg, -), (reg, hod), ( mem, -), (mem, hod)} RCR cil, počet (Rotate trough Carry flag Right) CF rotuje bity v cíli zleva doprava; CF se k cíli přimkne zprava (bere se jako LSB) CF množina operandů = {(reg, -), (reg, hod), ( mem, -), (mem, hod)} instrukce pro ovládání příznaků STC (SeT Carry flag) I CF nastavuje příznak přenosu do log. 1 CLC (CLear Carry flag) O CF nuluje příznak přenosu CMC (CompleMent Carry flag) -CF CF negace příznaku přenosu STD (SeT Direction flag) I DF nastaví příznak směru průchodu řetězcových dat do log. 1 řetězce se procházejí od konce k počátku CLD (CLear Direction flag) O DF nuluje příznak směru průchodu řetězcových dat STI (SeT Interrupt enable flag) I IF nastaví příznak povolení přerušení do log. 1 povoluje maskovatelná přerušení CLI (CLear Interrupt enable flag) O IF nuluje příznak povolení přerušení

7 instrukce nepodmíněných skoků intra-segmentové (v rámci segmentu) skoky (E)IP = (E)IP + relative_displacement short jump (krátký skok) 2B instrukce (1B displacement) umožňuje skočit na cíl v rozsahu bytů od místa, které následuje za příkazem near jump (blízký skok) 3B instrukce (2B displacement), která dovoluje skákat v rámci ±32 KiB od následující instrukce v rámci běžného kódového segmentu (pokryje celou oblast segmentu) inter-segmentové (mezi-segmentové) skoky CS:(E)IP = target_segment:target_offset far jump (daleký skok) 5B instrukce, která dovoluje skočit na kterékoli místo v adresní prostoru JMP [SHORT] návěští krátký relativní skok JMP návěští blízký relativní skok JMP reg16/mem16 blízký nepřímý absolutní skok JMP seg:off daleký absolutní skok JMP mem16:16 daleký nepřímý absolutní skok instrukce podmíněných skoků některé instrukce (logické instrukce, aritmetické instrukce a CMP) nastavují příznaky podmínka je vyhodnocena podle aktuálního stavu příznaků (SF, ZF, CF, PF a OF) při splnění skoč na návěští (dopředu nebo dozadu) tzn., změní (E)IP na adresu instrukce, kam se má skočit při nesplnění procesor pokračuje ve vykonávání instrukcí v pořadí (standardní inkrementace (E)IP) odvození jmen (jejich jednotlivých písmen) podmíněných skoků po porovnání (nemusíme znát stav příznaků) J (Jump) instrukce skoku N (Not) nepovinná negace podmínky A/B nebo G/L (Above/Below nebo Greater/Less) význam podmínky bez znaménkové hodnoty znaménkové hodnoty je větší než A G je menší než B L E ([or] Equal) rovnost porovnaných hodnot (umožňuje společně s N dvojí tvar instrukce, např. JNA a JBE jsou shodné instrukce) podmíněné skoky podle stavu příznaků J[N]C (Jump if [Not] Carry flag) skok podmíněný stavem příznaku přenosu J[N]O (Jump if [Not] Overflow flag) skok podmíněný stavem příznaku přetečení J[N]S (Jump if [Not] Sign flag) skok podmíněný stavem příznaku znaménka (MSB) J[N]Z (Jump if [Not] Zero flag) skok podmíněný hodnotou nulového příznaku JCXZ (Jump if CX is Zero) JECXZ (Jump if ECX is Zero) skok podmíněný nulovou hodnotou registru CX nebo ECX (jedná se o dvě různé instrukce) používají se pro smyčky instrukce smyček LOOP návěští (LOOP) kombinace instrukcí DEC CX a JNZ (snižuje obsah registru (E)CX a dokud není nulový, skáče na návěští) při snížení (E)CX na 0 pokračuje ve vykonávání následujících instrukcí LOOPE návěští (LOOP while Equal) LOOPZ návěští (LOOP while Zero) instrukce LOOP rozšířená o testování nulového příznaku skáče na návěští při splnění podmínky (((E)CX!= 0) && (ZF = 1)) LOOPNE návěští (LOOP while Not Equal) LOOPNZ návěští (LOOP while Not Zero) analogie k předchozí instrukci skáče na návěští při splnění podmínky (((E)CX!= 0) && (ZF = 0))

8 předpony řetězcových instrukcí REP (REPeating string operation prefix) pokračuj s následující instrukcí, dokud je (E)CX nenulové a postupně snižuj jeho hodnotu nedá se na rozdíl od následujících předpon použít s instrukcemi CMPS, SCAS a jejich ekvivalenty (nedali by se využít jejich porovnávací potenciál) REPE/REPZ (REPeating string operation prefix while Equal/Zero) podobně jako REP, který je ukončen i při snulovaném ZF REPNE/REPNZ (REPeating string operation prefix while Not Equal/Zero) podobně jako REP, který je ukončen i při ZF nastaveném do log. 1 řetězcové instrukce pracují s řetězcovými daty uloženými v paměti zdrojová data se nachází na adrese DS:(E)SI, ale jejich segmentový registr lze v NASM změnit segmentovým prefixem cílová data se vždy nachází na adrese ES:(E)DI směr průchodu řetězcových dat je závislý na hodnotě příznaku DF (Direction Flag) při DF = O se indexovací registry (Source Index a Destination Index) zvyšují při DF = I se indexovací registry snižují NASM nepodporuje instrukce bez určení velikosti dat (např. MOVS, CMPS, ) indexovací registry se mění o velikost danou dle posledního písmene instrukce (B/W/D 1/2/4) do registru (E)CX se před řetězcovou instrukcí musí uložit hodnota, která určuje počet hodnot v řetězci dat MOVS (MOVe data from String to string) MOVSB/MOVSW/MOVSD kopíruje zdrojová data na adresu cílových dat CMPS (CoMPare String operands) OF, SF, ZF, AF, PF a CF CMPSB/CMPSW/CMPSD porovnává řetězcová data (provádí nedestruktivní rozdíl zdroj cíl) a podle výsledků nastavuje příznaky nelze použít s předponou REP! SCAS (SCAn String) OF, SF, ZF, AF, PF a CF SCASB/SCASW/SCASD porovnává hodnotu cílových dat s hodnotou uloženou ve střádači (AL/AX/EAX) nelze použít s předponou REP! LODS (LOaD String) LODSB/LODSW/LODSD načte hodnotu z adresy zdrojových dat do střádače STOS (STOre String) STOSB/STOSW/STOSD uloží obsah střádače na adresu cílových dat INS (INput from port to String) INSB/INSW/INSD přenese hodnotu z I/O portu adresovaného obsahem registru DX na adresu cílových dat OUTS (OUTput String to port) OUTSB/OUTSW/OUTSD přenese hodnotu z adresy zdrojových dat na I/O port adresovaný obsahem registru DX

9 Překladač NASM symbolické instrukce [návěští: ] [symbolická_instrukce <operandy>] [; poznámka] návěští identifikátor reprezentující adresu první slabiky instrukce NASM je Case Sensitive (rozlišuje v návěštích malá a velká písmena) může obsahovat číslice, malá a velká písmena anglické abecedy následující znaky: '_', '$', '#', '@', '~', '.' a '?' zápis paměťových operandů mov AX, alpha ; do registru AX uloží offset (efektivní adresu) symbolu/jména alpha mov AX, [alpha] ; do registru AX uloží hodnotu (16b) operandu v paměti na adrese DS:alpha mov [beta], AX ; do slova v paměti s adresou DS:beta uloží obsah regisru AX mov AX, [ES:BX+10] ; do registru AX uloží hodnotu operandu uloženého v paměti na EA [ES:BX+10] mov [BX], byte 5 ; do bytu v paměti na adrese uložené v registru BX uloží hodnotu 5 mov [BX], word 5 ; do 16b v paměti na adrese uložené v registru BX uloží hodnotu 5 mov [BX], dword 5 ; do 32b v paměti na adrese uložené v registru BX uloží hodnotu 5 možné zápisy prefixů pro změnu segmentových registrů mov AX, [ES:BX+SI] ; zápis požadovaného segmentového registru uvnitř závorek uvozujících adresní výraz ES mov AX, [BX+10] ; na počátku řádku před identifikátorem instrukce ES mov AX, [BX+10] ; na samostatném řádku před instrukcí direktivy definice inicializovaných dat db, dw, dd, dq, dt shrtint db -43 byte db b, 0xA2, 0A2h string db 'ahojky', 13, 10, '$' ; řetězec s odřádkováním a ukončovacím znakem (9B v paměti) word dw off_a dw alpha ; offset symbolu alpha seg_a dw seg alpha ; segment symbolu alpha double dd h ; definice proměnných pro FPU single dd 1.02 double dq 2.71e15 extended dt 1.56e-15 definice neinicializovaných dat resb, resw, resd, resq, rest resb 10 resw definice konstant musí mít návěští a může být v programu předefinována! equ dve equ 2 ; délka řetězce uloženého v paměti (znak $ ukazuje na aktuální adresu, tj. adresu návěští str_len) str db 'ahojky' str_len equ $ - str opakování definic dat times zerobuf times 100 db 0 ; do stovky po sobě jdoucích bytů uloží nuly specifikace režimu procesoru bits hodnota operand hodnota může nabývat 16 či 32 (udává počet bitů) definice segmentů (section/segment) segment jméno section jméno pro jména segmentů platí stejná omezení, jako pro jména direktiv, různé výstupní formáty a spolupracující programy však mohou vyžadovat konkrétní jména! definice počátku programu..start:

10 operátory adresových výrazů pouze pro ordinální typy operandů! časté použití u maker binární operátory seřazené vzestupně podle priority operace operátor příklad použití bitový logický součet mov AL, 0x32 5 ; AL = 0x37 bitová nonekvivalence ^ mov AL, 0x15^9 ; AL = 0x1C bitový logický součin & mov AL, 0x9F&15 ; AL = 0x0F bitový posun vlevo << mov AL, 5<<3 ; AL = 0x28 bitový posun vpravo >> mov AL, 0x16>>3 ; AL = 2 součet + rozdíl - součin * bez znaménkové dělení / znaménkové dělení // zbytek po bez znaménkovém dělení % zbytek po znaménkovém dělení %% unární operátory operátor účinek operátoru + nedělá nic - negace operandu (dvojkový komplement) ~ jedničkový komplement operandu seg vrací segment použitého symbolu (mov AX, seg alpha) odkazy $ $$ zastupuje adresu prvního bytu symbolické instrukce uvedené na stejném řádku zastupuje začátek příslušné sekce/segmentu ; příklad využití odkazu $ str db 'Ahojky', 13, 10, '$' str.len db $ - str ; na adrese str.len je na 1 bytu uložena délka řetězce str tedy (snad) 9

11 Makra jednořádková makra makro %define %define název_makra[(parametry)] tělo_makra %define CRLF 13,10 mess db 'hello', CRLF, '$' mess db 'hello', 13,10, '$' ; definice makra bez parametrů ; volání makra ve zdrojovém kódu ; překlad %define param(b,i,d) [b+i+d] ; definice makra s parametry mov AX, param(bx,si,10) ; volání makra s parametry mov AX, [BX+SI+10] ; překlad makro %assign %assign jméno_proměnné numerická_hodnota %assign i 5 %assign i i+1 makro pro vložení zdrojového kódu z externího souboru %include jméno_souboru %include rw.asm víceřádková makra základní definice víceřádkového makra %macro jméno_makra počet_parametrů tělo_makra %endmacro volání víceřádkového makra jméno_makra parametry ; definice ; příklad volání (viz. makro %rep) ; příklad makra s jedním parametrem %macro prologue 1 ; definice víceřádkového makra s jedním parametrem push BP mov BP, SP sub SP, %1 ; použití prvního zadaného parametru v těle makra %endmacro prologue 10 ; volání makra s parametrem 10 push BP mov BP, SP sub SP, 10 ; příklad víceřádkového makra bez parametrů %macro retz 0 jnz %%skip ret %%skip %endmacro retz... retz ; překlad makra ; definice víceřádkového makra bez parametrů ; lokální návěští pro každé volání makra ; volání makra jnz..@0001 ret..@0001:... jnz..@0002 ret..@0002: makro pro opakování (využívá se např. u rotujících parametrů) %rep počet_opakování tělo_makra %endrep ; definice makra pro opakování %assign i 0 %rep 3 dw i %assign i i+1 %endrep ; překlad ; symbol..@xxxx: je formální ve skutečnosti je nahrazen konkrétní hodnotou dw 0 dw 1 dw 2 ; překlad

12 makra s neznámým počtem parametrů Greedy parametry %macro jméno_makra počet_parametrů+ tělo_makra %endmacro ; definice makra vyuzivajiciho greedy parametry %macro write_to_file 2+ jmp %%endstr %%str: db %2 ; definice řetězce předaného v parametru %%endstr: mov DX, %%str ; počátek řetězce mov CX, %%endstr - %%str ; délka řetězce mov BX, %1 ; filehandle (popisovač souboru) mov AH, 0x40 int 0x21 ; volání služby DOSu %endmacro write_to_file filehandle, hello,13,10 Rotující parametry ; volání greedy makra ; příklad definice makra pro uložení GP registrů na zásobník realizovaný pomocí rotujících parametrů %macro multipush 1 - * ; * zastupuje libovolný (předem nedefinovaný) počet parametrů %rep %0 ; %0 vrací skutečný počet parametrů zadaných při volání makra push %1 %rotate 1 ; rotuje parametry o jedno místo doleva %endrep %endmacro multipush SI,DI,DS,ES ; definice párového makra k předchozímu %macro multipop 1 - * %rep %0 %rotate -1 pop %1 %endrep %endmacro ; volání makra ; rotuje parametry o jedno místo doprava multipop SI,DI,DS,ES ; volání makra (obnoví parametry ve správném pořadí k multipush viz víše) default parametry makra %macro jméno_makra min - max [(max-min) předdefinovaných parametrů] tělo_makra %endmacro ; definice makra s default parametrem (znak nula) %macro errmess 0 1 '0' write_to_file 2, %1,10,13,'$' mov AH, 0x4C int 0x21 %endmacro errmess 1 ; volání makra s parametrem errmess spojování parametrů makra s okolním textem ; volání makra bez parametru použije se default parametr xxx%1 %1yyyy xxx%1yyyy v případě nejednoznačnosti se číslo parametru vkládá do složených závorek %13 ; parametr číslo 13 %{1}3 ; spojení prvního parametru s číslicí 3 podmínkové kódy jako parametry makra... ; definice makra s podmínkovým kódem %macro retcc 1 j%-1 %%skip ret %%skip: %endmacro retcc a jna..@0001 ret..@0001: ; %+1 označuje podmínkový kód a %-1 jeho negaci ; volání makra ; překlad

13 podmíněný překlad částí makra logické operátory považují nenulové hodnoty za pravdivé využití při psaní univerzálních ovladačů na více verzí určitého HW %if <podmínka_1> ; zdrojový kód, který je přeložen při splnění podmínky_1 %elif <podmínka_2> ; zdrojový kód, který je přeložen při nesplnění podmínky_1 při současném splnění podmínky_2 %else ; zdrojový kód, který je přeložen při nesplnění všech předchozích podmínek %endif makro pro definování a instance struktur operátor(y) význam = == rovnost <>!= nerovnost < je menší než > je větší než <= je menší nebo rovno >= je větší nebo rovno && logický součin logický součet ; definice struktury struc mytype ; mytype = 0 n1: resw 1 ; n1 = 0 n2: resb 1 ; n2 = 2 n3: resb 10 ; n3 = 3 endstruc ; mytype_size = 13 ^^ ; vytvoření instance struktury mystruc istruc mytype at n1, dw -65 at n2, db 9 at n3, db 'hello,13,10, $ iend ; použití instance struktury mov ah, [mystruc+n2] mov dx, mystruc+n3 Programové moduly předávání řízení předávání dat nonekvivalence ; modul1.asm ; modul2.asm ; ; bits 16 bits 16 extern PROC1 ; import.sym. global PROC1 ; definice globální (sdílené) proměnné segment CSEG segment aaa ; nesmějí se krýt jména návěští uvnitř modulů call (seg PROC1):PROC1 ; vzdálené... PROC1: ; globální návěští... ;...volání proc.... retf ; vzdálený návrat místo blízkého... ; modul1.asm ; modul2.asm ; ; bits 16 bits 16 extern message_1 extern alpha global alpha global message_1 segment CSEG segment code_aaa mov AX, seg message_1 mov AX, seg alpha mov DS, AX mov ES, AX mov DX, message_1 mov AX, [ES:alpha] mov AH, 9... int 0x21 segment data_aaa segment DATA message_1: db 'hello',10,13,'$' alpha: dw 12345

14 Služby BIOSu přehled služeb BIOSu přerušení 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1A 0x1B 0x1C služba BIOSu Služby obrazovky Seznam vybavení Velikost volné paměti Diskový I/O I/O sériových portů Rozšířené služby AT I/O klávesnice I/O tiskárny ROM-BASIC Zavaděč OS Časovač a RTC Ctrl Break Uživatelský časovač některé služby obrazovky (INT 0x10) stav AH Služba obrazovky stav AH Služba obrazovky 0x00 Nastavení režimu obrazovky 0x0A Výpis znaku na pozici kurzoru 0x01 Nastavení velikosti/tvaru kurzoru 0x0B Výběr barevné palety/barvy pozadí 0x02 Nastavení pozice kurzoru 0x0C Vykreslení grafického bodu 0x03 Zjištění pozice a velikosti kurzoru 0x0D Načtení grafického bodu 0x04 Zjištění pozice světelného pera 0x0E Výpis znaku na aktivní stránku obrazovky 0x05 Výběr aktivní stránky obrazovky 0x0F Zjištění režimu obrazovky 0x06 Posun okna nahoru (nebo smazání okna) 0x10 <EGA> Funkce palety 0x07 Posun okna dolů 0x11 <EGA> Funkce znakového generátoru 0x08 Zjištění znaku/atributu na pozici kurzoru 0x12 <EGA> Speciální funkce 0x09 Výpis znaku/atributu na pozici kurzoru 0x13 Výpis řetězce (jen pro <EGA>) popis některých video služeb AH = 0x0F vstup - Zjištění režimu obrazovky výstup AL aktuální režim AH BH počet znakových sloupců na obrazovce číslo právě aktivní stránky AH = 0x02 Nastavení pozice kurzoru vstup BH číslo právě aktivní stránky DH DL řádek (nastavit na 25 pro ukrytí kurzoru) sloupec výstup - AH = 0x09 Výpis znaku/atributu na pozici kurzoru vstup BH číslo právě aktivní stránky AL BL CX znak pro vypsání atribut zobrazení počet opakování výstup -

15 Služby DOSu přehled služeb DOSu stav AH služba DOSu stav AH služba DOSu stav AH služba DOSu 0x00 Ukončení procesu 0x24 Nastavení přímé adresy bloku v souboru 0x44 Ovládání vstupně/výstupních souborů 0x01 Vstup z klávesnice s echem 0x25 Nastavení vektoru přerušení 0x45 Duplikuj handle souboru 0x02 Zobrazení znaku 0x26 Vytvoření prefixu prog. segmentu (PSP) 0x46 Přesměrování handlu souboru 0x03 Vstup z AUX 0x27 Čtení bloku ze souboru 0x47 Zjištění aktuálního adresáře 0x04 Vystup na AUX 0x28 Zápis bloku do souboru 0x48 Alokace paměti 0x05 Výstup na tiskárnu 0x29 Rozbor jména souboru 0x49 Uvolnění paměti 0x06 Vstup/výstup přes konzoli 0x2A Zjištění systémového data 0x4A Realokace bloku paměti 0x07 Nefiltrovaný vstup bez echa 0x2B Nastavení systémového data 0x4B Spuštění programu 0x08 Vstup bez echa 0x2C Zjištění systémového času 0x4C Ukonči program - EXIT 0x09 Zobrazení řetězce 0x2D Nastavení systémového času 0x4D Zjisti výstup. kód programu - WAIT 0x0A Bufferovaný vstup řetězce 0x2E Nastavení přepínače verifikace 0x4E Hledání prvního souboru 0x0B Kontrola vstupního stavu 0x2F Zjištění přenosové adresy disku (DTA) 0x4F Hledání dalšího souboru 0x0C Vstup s vymazáním bufferu 0x30 Zjištění verze systému 0x54 Zjištění stavu přepínače verifikace 0x0D Reset disku 0x31 Rezidentní proces 0x56 Přejmenování souboru 0x0E Výběr disku 0x32 Informace o disku 0x57 Datum a čas souboru 0x0F Otevření souboru (FileControlBlock) 0x33 Zjištění režimu testování Break 0x58 Alokační strategie 0x10 Zavření souboru (FCB) 0x34 Aktivita DOSu 0x59 Rozšířený chybový kód 0x11 Hledání prvního souboru (FCB) 0x35 Zjištění vektoru přerušení 0x5A Vytvoření dočasného souboru 0x12 Hledání dalšího souboru (FCB) 0x36 Zjištění volného místa na disku 0x5B Vytvoření nového souboru 0x13 Zruš soubor (FCB) 0x37 Znak přepínače (glob. proměnná DOSu) 0x5C Uzamčení souboru 0x14 Sekvenční čtení (FCB) 0x38 Informace o národním prostředí 0x5D Síťové/různé akce 0x15 Sekvenční zápis (FCB) 0x39 Vytvoření adresáře 0x5E Síťové funkce 0x16 Založení souboru (FCB) 0x3A Zrušení adresáře 0x5F Přesměrování v síti 0x17 Přejmenování souboru (FCB) 0x3B Výběr adresáře 0x60 Standardizace jména souboru 0x19 Zjištění aktuálního disku 0x3C Založení souboru 0x62 Čtení adresy PSP 0x1A Nastavení Disk Transport Address (DTA) 0x3D Otevření souboru 0x65 Rozšířené info o národním prostředí 0x1B FAT info aktuálního disku 0x3E Uzavření souboru 0x66 Globální kódová stránka 0x1C FAT info disku 0x3F Čtení ze souboru 0x67 Nastavení počtu souborových handlů 0x21 Info o aktuálním disku 0x40 Zápis do souboru 0x68 Zápis souboru (z bufferu) na disk 0x21 Čtení záznamu ze souboru 0x41 Odstranění souboru 0x69 Sériové číslo disku (svazku) 0x22 Zápis záznamu do souboru 0x42 Nastavení pozice v souboru 0x23 Zjištění velikosti souboru (FCB) 0x43 Atributy souboru popis některých služeb DOSu AH = 0x01 Vstup z klávesnice (čeká na) s echem AH = 0x08 Vstup z klávesnice (čeká na) bez echa vstup - vstup - výstup AL znak načtený ze standardního vstup. zařízení Znak je vypsán na standardní výstupní zařízení. Rozšířené ASCII kódy potřebují dvě zavolání této služby první zavolání navrátí AL = 0. výstup AL znak načtený ze standardního vstup. zařízení Rozšířené ASCII kódy potřebují dvě zavolání této služby. AH = 0x02 Zobrazení znaku (na standardní výstupní zařízení) AH = 0x09 Zobrazení řetězce (na standardní výstupní zařízení) vstup DL znak pro zobrazení vstup DS:DX adresa řetězce zakončeného znakem '$' výstup - výstup -

16 FPU (Floating Point Unit) Jednotka vykonávající instrukce nad čísly s pohyblivou desetinnou čárkou. Bývá označována jako koprocesor. instrukce určené pro FPU jsou odlišeny tzv. escape prefixem (27 d = 0x1B) pro práci s operandy má FPU vlastní relativně adresovaný zásobník, který je tvořen osmi 80b registry vrchol zásobníku je ST(0) uložení hodnoty na zásobník všechny hodnoty na zásobníku jsou posunuty dále od jeho vrcholu, kam je uložen nově načtený operand ve skutečnosti jsou jen přejmenovány jednotlivé registry (z ST(0) se stane ST(1) atd.) Stack Overflow chyba programátora, při níž dochází k přepsání operandu na dně zásobníku (v ST(7)) odebrání hodnoty z vrcholu zásobníku všechny operandy uložené na zásobníku jsou posunuty blíže k vrcholu Stack Underflow chyba při pokusu o odebrání operandu z vrcholu prázdného zásobníku uložení hodnoty na zásobník pomocí instrukce FLD1 a následné odebrání vrcholu zásobníku pomocí instrukce FADDP ST(1), ST(0) je znázorněno na následující ilustraci R7 2,40e12 ST(3) 2,40e12 ST(4) 2,40e12 ST(3) R6-1,23e-4 ST(2) -1,23e-4 ST(3) -1,23e-4 ST(2) R5 0 ST(1) 0 ST(2) 0 ST(1) R4 3,14 ST(0) 3,14 ST(1) 4,14 ST(0) R3 ST(7) 1 ST(0) 1 ST(7) R2 ST(6) ST(7) ST(6) R1 ST(5) ST(6) ST(5) R0 ST(4) ST(5) ST(4) další registry FPU Tag Register 16b registr známek uchovává informace o hodnotách uložených v jednotlivých registrech zásobníku FPU Tag OO OI IO II v daném registru RX je Platné nenulové číslo Nula Nekonečno, denormalizované číslo nebo neplatná hodnota Volno (jedná se o prázdný registr) Status Register stavový registr B C3 TOP C2 C1 C0 ES SF PE UE OE ZE DE IE B (Busy) indikuje činnost FPU C0 C3 (Condition code) podmínkový kód TOP aktuální vrchol zásobníku (při TOP = IOO je ST(0) na registru R4) ES (Error Summary status) stav žádosti o výjimky SF (Stack Fault) chyba zásobníku PE (Precision Exception) výjimka přesnosti (je možné maskovat pomocí bitu PM v Control Registru) UE (Underflow Exception) podtečení zásobníku OE (Overflow Exception) přetečení zásobníku ZE (Zero divide Exception) dělení nulou DE (Denormalized operand Exception) denormalizovaný operand IE (Invalid operation Exception) neplatná operace Control Register řídicí registr IR RC PC - - PM UM OM ZM DM IM IC (Infinity Control) řízení nekonečna pouze pro koprocesory 8087 a RC (Rounding Control) řízení zaokrouhlení RC zaokrouhlení k OO nejbližšímu číslu OI IO II PC (Precision Control) řízení přesnosti udává počet bitů pro uložení platné mantisy bity maskování žádostí o jednotlivé výjimky (viz Status Register) FPU Instruction Pointer 48b vzdálený ukazatel na instrukci pro FPU FPU Operand Pointer 48b vzdálený ukazatel slouží pro načítání/zápis operandů z/do hlavní paměti

17 datové typy podporované FPU ( - mohou být použity přímo jako paměťové operandy výpočetních instrukcí) FPU vnitřně pracuje s datovým typem extended (tomu odpovídá i velikost zásobníkových registrů) celočíselné operandy word / short 16b short / int 32b long 64b BCD packed decimal 80b reálné operandy formáty plovoucí řádové čárky dle normy IEEE 754 single / float 32b 23b mantisa, 8b exponent double 64b 52b mantisa, 11b exponent temporary / extended 80b 64b mantisa, 15b exponent (-1) Sign 1, Fraction 2Exponent - bias formát si popíšeme na operandu s jednoduchou přesností označovaném (single precision) známém jako float z programovacích jazyků jako C, C++, Java, Sign Exponent Fraction Sign znaménkový bit udává znaménko operandu pro záporné operandy je tento bit v log. 1 Exponent uložen v aditivním kódu (kódu lichého posunutí nuly), což umožňuje rychlé porovnání dvou operandů nula je kódována jako 0x7F = OIII IIII b (bývá označována jako bias) Fraction mantisa je vždy kladná uložena v přímém kódu od MSB mají jednotlivé bity váhu 2-1, 2-2, 2-3, hodnoty, jakých může float nabývat denormalizovaný tvar znamená, že operand je příliš malý a operace s ním ztrácí přesnost exponent mantisa hodnota nenulová denormalizovaný tvar ( 0 ; 0xFF ) libovolná normální tvar 0xFF 0 ± 0xFF nenulová NaN (Not a Number) aritmetické operace s formáty IEEE 754 ExponentX - ExponentY součet a rozdíl X ± Y = (Fraction X 2 ± Fraction Y) 2 vyrovnám exponenty (mantisu menší hodnoty posouvám doprava a zvyšuji její exponent) provedu součet/rozdíl mantis normalizuji výsledek do základního tvaru ExponentX + ExponentY součin a podíl X Y = (Fraction X Fraction Y) 2 provedu součet/rozdíl exponentů provedu součin/podíl mantis normalizuji do základního tvaru ExponentY

18 Přehled instrukční sady x87 přenosové instrukce FPU všechny instrukce, které ukládají nějakou hodnotu na vrchol zásobníku, způsobí posunutí všech hodnot na zásobníku hodnoty příznaků C0, C2 a C3 nejsou definovány FLD zdroj (FPU real LoaD) I C1 (Stack Overflow) na vrchol zásobníku uloží číslo s plovoucí desetinou čárkou načtené z paměti nebo zásobníku množina operandů = {mem32real, mem64real, mem80real, ST(i)} FILD zdroj (FPU Integer LoaD) I C1 (Stack Overflow) na vrchol zásobníku uloží celé číslo načtené z paměti množina operandů = {mem16int, mem32int, mem64int} FLD1 (FPU LoaD 1) I C1 (Stack Overflow) na vrchol zásobníku uloží jedničku FLDPI (FPU LoaD PI) I C1 (Stack Overflow) na vrchol zásobníku uloží Ludolfovo číslo FLDZ (FPU LoaD Zero) I C1 (Stack Overflow) na vrchol zásobníku uloží nulu FST cíl (FPU real STore) O C1 (Stack Underflow) na cílovou pozici uloží číslo s plovoucí desetinou čárkou množina operandů = {mem32real, mem64real, ST(i)} FIST cíl (FPU Integer STore) O C1 (Stack Underflow) na cílovou pozici uloží celé číslo množina operandů = {mem16int, mem32int} FSTP cíl (FPU real STore and Pop) O C1 (Stack Underflow) na cílovou pozici uloží číslo s plovoucí desetinou čárkou a odebere vrchol zásobníku párová instrukce k FLD množina operandů = {mem32real, mem64real, mem80real, ST(i)} FISTP cíl (FPU Integer STore and Pop) O C1 (Stack Underflow) na cílovou pozici uloží celé číslo a odebere vrchol zásobníku párová instrukce k FILD množina operandů = {mem16int, mem32int} FXCH cíl (FPU exchange register contents) O C1 zamění vrchol zásobníku s jinou hodnotou uloženou v zásobníku množina operandů = {ST(i)} aritmetické instrukce FPU hodnoty příznaků C0, C2 a C3 nejsou definovány FADD [cíl,] zdroj (FPU ADD) O C1 (Stack Underflow) výsledek součtu cíle se zdrojem se uloží místo cíle implicitní cíl je vrchol zásobníku množina operandů = {(-,mem32real ), (-,mem64real ), (ST(0),ST(i)), (ST(i),ST(0))} FADDP cíl, zdroj (FPU ADD and Pop) O C1 (Stack Underflow) výsledek součtu cíle a zdroje se uloží do cíle a odebere vrchol zásobníku množina operandů = {(ST(i), ST(0))} FIADD zdroj (FPU Integer ADD) O C1 (Stack Underflow) výsledek součtu cíle s hodnotou z vrcholu zásobníku se uloží na vrchol zásobníku množina operandů = {(-,mem16int ), (-,mem32int )} FSUB [cíl,] zdroj (FPU SUBtraction) O C1 (Stack Underflow) od cíle se odečte zdroj a výsledek tohoto rozdílu se uloží místo cíle implicitní cíl je vrchol zásobníku množina operandů = {(-,mem32real ), (-,mem64real ), (ST(0),ST(i)), (ST(i),ST(0))} FSUBP cíl, zdroj (FPU SUBtraction and Pop) O C1 (Stack Underflow) výsledek rozdílu dvou operandů ze zásobníku se uloží na místo cíle a následně se odebere vrchol zásobníku množina operandů = {(ST(i), ST(0))} FISUB zdroj (FPU Integer SUBtraction) O C1 (Stack Underflow) od vrcholu zásobníku se odečte zdroj a výsledek se uloží na vrchol zásobníku množina operandů = {(-,mem16int ), (-,mem32int )}

19 FSUBR [cíl,] zdroj (FPU SUBtraction-Reversed) O C1 (Stack Underflow) od zdroje se odečte cíl a výsledek tohoto rozdílu se uloží místo cíle implicitní cíl je vrchol zásobníku množina operandů = {(-,mem32real ), (-,mem64real ), (ST(0),ST(i)), (ST(i),ST(0))} FSUBRP cíl, zdroj (FPU SUBtraction-Reversed and Pop) O C1 (Stack Underflow) výsledek reverzního rozdílu dvou operandů ze zásobníku se uloží na místo cíle a následně se odebere vrchol zásobníku množina operandů = {(ST(i), ST(0))} FISUBR zdroj (FPU Integer SUBtraction-Reversed) O C1 (Stack Underflow) od zdroje se odečte vrcholu zásobníku, kam se zároveň uloží výsledek množina operandů = {(-,mem16int ), (-,mem32int )} FMUL [cíl,] zdroj (FPU MULtiplication) O C1 (Stack Underflow) výsledek součinu cíle se zdrojem se uloží místo cíle implicitní cíl je vrchol zásobníku množina operandů = {(-,mem32real ), (-,mem64real ), (ST(0),ST(i)), (ST(i),ST(0))} FMULP cíl, zdroj (FPU MULtiplication and Pop) O C1 (Stack Underflow) výsledek součinu cíle a zdroje se uloží do cíle a odebere vrchol zásobníku množina operandů = {(ST(i), ST(0))} FIMUL zdroj (FPU Integer MULtiplication) O C1 (Stack Underflow) výsledek součinu cíle s hodnotou z vrcholu zásobníku se uloží na vrchol zásobníku množina operandů = {(-,mem16int ), (-,mem32int )} FDIV [cíl,] zdroj (FPU DIVision) O C1 (Stack Underflow) cíl se podělí zdrojem a výsledek tohoto podílu se uloží místo cíle implicitní cíl je vrchol zásobníku množina operandů = {(-,mem32real ), (-,mem64real ), (ST(0),ST(i)), (ST(i),ST(0))} FDIVP cíl, zdroj (FPU DIVision and Pop) O C1 (Stack Underflow) výsledek podílu dvou operandů ze zásobníku se uloží na místo cíle a následně se odebere vrchol zásobníku množina operandů = {(ST(i), ST(0))} FIDIV zdroj (FPU Integer DIVision) O C1 (Stack Underflow) vrchol zásobníku se podělí zdrojem a výsledek se uloží na vrchol zásobníku množina operandů = {(-,mem16int ), (-,mem32int )} FDIVR [cíl,] zdroj (FPU DIVision-Reversed) O C1 (Stack Underflow) zdroj se podělí cílem a výsledek tohoto rozdílu se uloží místo cíle implicitní cíl je vrchol zásobníku množina operandů = {(-,mem32real ), (-,mem64real ), (ST(0),ST(i)), (ST(i),ST(0))} FDIVRP cíl, zdroj (FPU DIVision-Reversed and Pop) O C1 (Stack Underflow) výsledek reverzního podílu dvou operandů ze zásobníku se uloží na místo cíle a následně se odebere vrchol zásobníku množina operandů = {(ST(i), ST(0))} FIDIVR zdroj (FPU Integer DIVision-Reversed) O C1 (Stack Underflow) zdroj se podělí hodnotou z vrcholu zásobníku, na jejíž pozici je uložen výsledek podílu množina operandů = {(-,mem16int ), (-,mem32int )} FABS (FPU ABSolute value) O C1 absolutní hodnota na vrchol zásobníku FCHS (FPU CHange Sign) O C1 změna znaménka hodnoty na vrcholu zásobníku FSQRT (FPU SQuare RooT) O C1 (Stack Underflow) nahradí hodnotu na vrcholu zásobníku za její druhou odmocninu

20 porovnávací instrukce FPU používají se podmíněné skoky pro bez znaménkové hodnoty (JA, JB a jejich variace), ačkoliv se porovnávají znaménkoví čísla jedině instrukce FCOMI a FCOMIP nastavují podle svého výsledku přímo příznaky procesoru; u všech ostatních instrukcí musejí být tyto příznaky (kvůli podmíněným skokům) nastaveny podle příznaků FPU (C0, C2 a C3) FCOM zdroj (FPU real COMpare) O C1 porovná vrchol zásobníku se zdrojem množina operandů = {mem32real, mem64real, ST(i)} FCOMP zdroj (FPU real COMpare and Pop) O C1 porovná zdroj s vrcholem zásobníku a odebere vrchol zásobníku množina operandů = {mem32real, mem64real, ST(i)} FCOMPP (FPU real COMpare and PoP twice) O C1 porovná dvě hodnoty z vrcholu zásobníku a obě odtud odstraní FICOM zdroj (FPU integer COMpare) O C1 porovná celočíselný zdroj s vrcholem zásobníku množina operandů = {mem16int, mem32int} FICOMP zdroj (FPU integer COMpare and Pop) O C1 porovná celočíselný zdroj s vrcholem zásobníku a odebere vrchol zásobníku množina operandů = {mem16int, mem32int} FCOMI zdroj (FPU real COMpare and set EFLAGS) O C1 porovná hodnotu ze zásobníku s vrcholem zásobníku podle porovnání rovnou nastavuje příznaky procesoru! množina operandů = {ST(i)} FCOMIP zdroj (FPU real COMpare, set EFLAGS and Pop) O C1 porovná hodnotu ze zásobníku s vrcholem zásobníku a odebere vrchol zásobníku podle porovnání rovnou nastavuje příznaky procesoru! množina operandů = {ST(i)} FXAM (FPU examination) znaménkový bit z ST(0) C1 prozkoumá hodnotu uloženou na vrcholu zásobníku výsledek porovnání C3 C2 C0 nepodporovaný tvar NaN (Not a Number) normální tvar nekonečno (Infinity) nula (Zero) prázdný vrchol zásobníku denormalizovaný tvar FTST (FPU TeST) O C1 porovná vrchol zásobníku s nulou a podle toho nastaví příznaky C3, C2 a C0 výsledek porovnání C3 C2 C0 ST(0) > ST(0) < ST(0) = unordered 1 1 1

21 transcendentní instrukce FPU FSIN (FPU SINe) O C1 (Stack Underflow), I C2 (přesah argumentu) vypočítá sinus argumentu z vrcholu zásobníku a místo něj uloží výsledek argument v absolutní hodnotě nesmí přesahovat hodnotu 2 63 FCOS (FPU COSine) O C1 (Stack Underflow), I C2 (přesah argumentu) vypočítá cosinus argumentu z vrcholu zásobníku a místo něj uloží výsledek argument v absolutní hodnotě nesmí přesahovat hodnotu 2 63 FSINCOS (FPU SINe and COSine) C1 (Stack Underflow/Overflow), I C2 (přesah argumentu) vypočítá sinus a cosinus argumentu z vrcholu zásobníku a výsledné hodnoty uloží na zásobník na vrcholu zásobníku se po skončení instrukce cosinus argument v absolutní hodnotě nesmí přesahovat hodnotu 2 63 FPTAN (FPU Partial TANgent) C1 (Stack Underflow/Overflow), I C2 (přesah argumentu) vypočítá tangens argumentu z vrcholu zásobníku a místo něj uloží výsledek snížený o 1 na vrchol zásobníku následně uloží 1 výsledná hodnota tangensu se získá sečtením dvou hodnot z vrcholu zásobníku FPATAN (FPU Partial Arcus TANgent) O C1 (Stack Underflow), nedef.: C0, C2, C3 vypočítá arcus tangens podílu ST(1) a argumentu z vrcholu zásobníku, obě tyto hodnoty odebere ze zásobníku a na jeho vrchol uloží výsledek operace inverzní instrukce k instrukci FPTAN řídicí instrukce FPU FINIT (FPU INITialisation) O C0, C1, C2, C3 provede inicializaci FPU nejdříve zpracuje čekající FPU výjimky 0x37F Řídící registr, 0x0F Známkový registr, 0x00 ostatních registrů FLDCW zdroj (FPU LoaD Control Word) nedef.: C0, C1, C2, C3 načte řídící registr FPU z paměti množina operandů = {mem16} FSTCW cíl (FPU STore Control Word) nedef.: C0, C1, C2, C3 uloží řídící registr FPU na dva byty v paměti nejdříve zpracuje čekající FPU výjimky množina operandů = {mem16} FLDENV zdroj (FPU LoaD ENVironment) nedef.: C0, C1, C2, C3 načte prostředí FPU (všechny registry FPU kromě zásobníku) z operační paměti množina operandů = {mem14b, mem28b} podle režimu procesoru FSTENV cíl (FPU STore ENVironment) nedef.: C0, C1, C2, C3 uloží prostředí FPU (všechny registry FPU kromě zásobníku) do operační paměti nejdříve zpracuje čekající FPU výjimky množina operandů = {mem14b, mem28b} podle režimu procesoru FSTSW cíl (FPU STore Status Word) nedef.: C0, C1, C2, C3 uloží řídící registr FPU na dva byty v paměti nejdříve zpracuje čekající FPU výjimky množina operandů = {AX, mem16} FWAIT (WAIT for FPU) nedef.: C0, C1, C2, C3 slouží k synchronizaci práce procesoru a FPU assembler ji automaticky vkládá na potřebná místa FRSTOR cíl (FPU status ReSTORe) nedef.: C0, C1, C2, C3 načte stav FPU (prostředí + zásobník) z paměti používá se pro Multi-Tasking množina operandů = {mem94b, mem108b} podle režimu procesoru FSAVE cíl (FPU status SAVE) nedef.: C0, C1, C2, C3 uloží stav FPU (prostředí + zásobník) do paměti a provede jeho inicializaci používá se pro Multi-Tasking nejdříve zpracuje čekající FPU výjimky množina operandů = {mem94b, mem108b} podle režimu procesoru

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

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

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

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

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

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

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

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

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

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy Ústav radioelektroniky Vysoké učení technické v Brně Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy Přednáška 8 doc. Ing. Tomáš Frýza, Ph.D. listopad 2012 Obsah

Více

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty Data v počítači Informační data (elementární datové typy) Logické hodnoty Znaky Čísla v pevné řádové čárce (celá čísla) v pohyblivé (plovoucí) řád. čárce (reálná čísla) Povelová data (instrukce programu)

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

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

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

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

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

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

Architektury počítačů

Architektury počítačů Architektury počítačů IEEE754 České vysoké učení technické, Fakulta elektrotechnická A0M36APO Architektury počítačů Ver.1.20 2014 1 Fractional Binary Numbers (zlomková binární čísla / čísla v pevné řádové

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

v aritmetické jednotce počíta

v aritmetické jednotce počíta v aritmetické jednotce počíta tače (Opakování) Dvojková, osmičková a šestnáctková soustava () Osmičková nebo šestnáctková soustava se používá ke snadnému zápisu binárních čísel. 2 A 3 Doplněné nuly B Číslo

Více

Základní principy zobrazení čísla Celá čísla s pevnou řádovou čárkou Zobrazení reálných čísel Aritmetika s binárními čísly

Základní principy zobrazení čísla Celá čísla s pevnou řádovou čárkou Zobrazení reálných čísel Aritmetika s binárními čísly Počítačové systémy Zobrazení čísel v počítači Miroslav Flídr Počítačové systémy LS 2007-1/21- Západočeská univerzita v Plzni Vážený poziční kód Obecný předpis čísla vyjádřeného v pozičním systému: C =

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

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

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

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

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

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

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

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

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy

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

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

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

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čů

Struktura a architektura počítačů Struktura a architektura počítačů Aritmetické operace Pevná a pohyblivá řádová čárka České vysoké učení technické Fakulta elektrotechnická Ver..2 J. Zděnek 23 Aritmetické operace pevná řádová čárka Pevná

Více

Program "Světla" pro mikropočítač PMI-80

Program Světla pro mikropočítač PMI-80 Program "Světla" pro mikropočítač PMI-80 Dokument věnovaný mikropočítači PMI-80, jeho programování a praktickým ukázkám. Verze dokumentu:. Autor: Blackhead Datum: rok 1997, 4.3.004 1 Úvod Tento program

Více

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4 Uložení dat v počítači Data = užitečné, zpracovávané informace Kódování (formát) dat = způsob uložení v počítači (nutno vše převést na čísla ve dvojkové soustavě) Příklady kódování dat Text každému znaku

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

Fz =a z + a z +...+a z +a z =

Fz =a z + a z +...+a z +a z = Polyadické číselné soustavy - převody M-místná skupina prvků se z-stavovou abecedou umožňuje zobrazit z m čísel. Zjistíme, že stačí vhodně zvolit číslo m, abychom mohli zobrazit libovolné číslo menší než

Více

LEKCE 6. Operátory. V této lekci najdete:

LEKCE 6. Operátory. V této lekci najdete: LEKCE 6 Operátory V této lekci najdete: Aritmetické operátory...94 Porovnávací operátory...96 Operátor řetězení...97 Bitové logické operátory...97 Další operátory...101 92 ČÁST I: Programování v jazyce

Více

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů Výrazy podle priority operátorů (od nejnižší priority) OPERANDY OPERÁTORY výraz = jednoduché výrazy a relační operátory

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

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

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

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu 1 Podklady předmětu pro akademický rok 2006/2007 Radim Farana Obsah 2 Obsah předmětu, Požadavky kreditového systému, Datové typy jednoduché, složené, Programové struktury, Předávání dat. Obsah předmětu

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

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

Mikroprocesorová technika (BMPT)

Mikroprocesorová technika (BMPT) Mikroprocesorová technika (BMPT) Přednáška č. 10 Číselné soustavy v mikroprocesorové technice Ing. Tomáš Frýza, Ph.D. Obsah přednášky Číselné soustavy v mikroprocesorové technice Dekadická, binární, hexadecimální

Více

Struktura a architektura počítačů

Struktura a architektura počítačů Struktura a architektura počítačů Aritmetické operace Pevná a pohyblivá řádová čárka České vysoké učení technické Fakulta elektrotechnická Ver.1.30 J. Zděnek / M. Chomát 2014 Aritmetické operace pevná

Více

Y36SAP - aritmetika. Osnova

Y36SAP - aritmetika. Osnova Y36SAP - aritmetika Čísla se znaménkem a aritmetické operace pevná a pohyblivá řádová čárka Kubátová 2007 Y36SAP-aritmetika 1 Osnova Zobrazení záporných čísel Přímý, aditivní a doplňkový kód a operace

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

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

3 Jednoduché datové typy 2 3.1 Interpretace čísel v paměti počítače... 3. 4 Problémy s matematickými operacemi 5

3 Jednoduché datové typy 2 3.1 Interpretace čísel v paměti počítače... 3. 4 Problémy s matematickými operacemi 5 Obsah Obsah 1 Číselné soustavy 1 2 Paměť počítače 1 2.1 Měření objemu paměti počítače................... 1 3 Jednoduché datové typy 2 3.1 Interpretace čísel v paměti počítače................. 3 4 Problémy

Více

Čísla v plovoucířádovéčárce. INP 2008 FIT VUT v Brně

Čísla v plovoucířádovéčárce. INP 2008 FIT VUT v Brně Čísla v plovoucířádovéčárce INP 2008 FIT VUT v Brně Čísla v pevné vs plovoucí řádové čárce Pevnářádováčárka FX bez desetinné části (8 bitů) Přímý kód: 0 až 255 Doplňkový kód: -128 až 127 aj. s desetinnou

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

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

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

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

Číselné soustavy. Binární číselná soustava 12. Číselné soustavy, binární číselná soustava. Kódování informací, binární váhový kód, kódování záporných čísel. Standardní jednoduché datové typy s pevnou a s pohyblivou řádovou tečkou. Základní strukturované

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

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

Principy počítačů I Reprezentace dat

Principy počítačů I Reprezentace dat Principy počítačů I Reprezentace dat snímek 1 Principy počítačů Část III Reprezentace dat VJJ 1 snímek 2 Symbolika musí být srozumitelná pro stroj, snadno reprezentovatelná pomocí fyzikálních veličin vhodně

Více

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

Metody připojování periferií BI-MPP Přednáška 2 Metody připojování periferií BI-MPP Přednáška 2 Ing. Miroslav Skrbek, Ph.D. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze Miroslav Skrbek 2010,2011

Více

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

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051 051 Seznámení s mikropočítačem Architektura mikropočítače Instrukce Paměť Čítače Porovnání s AT89C2051 Seznámení s mikropočítačem řady 8051 Mikroprocesor řady 8051 pochází z roku 1980 a je vytvořené firmou

Více

Architektury počítačů a procesorů

Architektury počítačů a procesorů Kapitola 3 Architektury počítačů a procesorů 3.1 Von Neumannova (a harvardská) architektura Von Neumann 1. počítač se skládá z funkčních jednotek - paměť, řadič, aritmetická jednotka, vstupní a výstupní

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

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,

Více

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

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

Více

Formátové specifikace formátovací řetězce

Formátové specifikace formátovací řetězce 27.2.2007 Formátové specifikace formátovací řetězce - je to posloupnost podle které překladač pozná jaký formát má výstup mít - posloupnosti začínají znakem % a určující formát vstupu/výstupu - pokud chcete

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

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 04. Datové typy, operace, logické operátory Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

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

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. Přednáška 7 Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. 1 Příkaz expr výraz Celočíselná aritmetika I Zašle na standardní výstup vyhodnocení výrazu

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

Moduly MicroUnit serie. všechny typy s výjimkou řady MU-43x, MU-44x a MU-84x

Moduly MicroUnit serie. všechny typy s výjimkou řady MU-43x, MU-44x a MU-84x MicroUnit implementace protokolu Modbus Dokument: MicroUnit_Implementace_Modbus / v. 3.01 / 14.12.2016 Moduly MicroUnit serie všechny typy s výjimkou řady MU-43x, MU-44x a MU-84x implementace protokolu

Více

- jak udělat konstantu long int: L long velka = 78L;

- jak udělat konstantu long int: L long velka = 78L; Konstanty (konstatní hodnoty) Např.: - desítkové: 25, 45, 567, 45.678 - osmičkové: 045, 023, 03 vždy začínají 0 - šestnáctkové: 0x12, 0xF2, 0Xcd, 0xff, 0xFF - jak udělat konstantu long int: 245566553L

Více

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika amortizovaná složitost, Fibonacciho halda, počítačová aritmetika Jiří Vyskočil, Marko Genyg-Berezovskyj 2009 Amortizovaná složitost Asymptotická složitost často dostatečně nevypovídá o složitosti algoritmů,

Více

Kubatova Y36SAP 9. Strojový kód ISA architektura souboru instrukcí střadačově, zásobníkově orientovaná, GPR Kubátová Y36SAP-ISA 1

Kubatova Y36SAP 9. Strojový kód ISA architektura souboru instrukcí střadačově, zásobníkově orientovaná, GPR Kubátová Y36SAP-ISA 1 Y36SAP 9 Strojový kód ISA architektura souboru instrukcí střadačově, zásobníkově orientovaná, GPR 2007-Kubátová Y36SAP-ISA 1 Architektura souboru instrukcí, ISA - Instruction Set Architecture Vysoká Architektura

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury Data a datové typy 1 / 28 Obsah přednášky Základní datové typy Celá čísla Reálná čísla Znaky 2 / 28 Organizace dat Výběr vhodné datvé struktry různá paměťová náročnost různá

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

Čísla, reprezentace, zjednodušené výpočty

Čísla, reprezentace, zjednodušené výpočty Čísla, reprezentace, zjednodušené výpočty Přednáška 5 A3B38MMP kat. měření, ČVUT - FEL, Praha J. Fischer A3B38MMP, 2015, J.Fischer, ČVUT - FEL, kat. měření 1 Čísla 4 bitová dec bin. hex. 0 0000 0 1 0001

Více

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody Architektura počítačů Logické obvody http://d3s.mff.cuni.cz/teaching/computer_architecture/ Lubomír Bulej bulej@d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Digitální

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

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

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7 Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí

Více

Čísla a číselné soustavy.

Čísla a číselné soustavy. Čísla a číselné soustavy. Polyadické soustavy. Převody mezi soustavami. Reprezentace čísel. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK.

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

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová

Více

Programování v jazyce JavaScript

Programování v jazyce JavaScript Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Operátory a příkazy BI-JSC Evropský sociální fond

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

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

Jan Nekvapil ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická

Jan Nekvapil ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Jan Nekvapil jan.nekvapil@tiscali.cz ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Motivace MMX, EMMX, MMX+ 3DNow!, 3DNow!+ SSE SSE2 SSE3 SSSE3 SSE4.2 Závěr 2 Efektivní práce s vektory

Více

Aritmetické operace a obvody pro jejich realizaci

Aritmetické operace a obvody pro jejich realizaci Kapitola 4 Aritmetické operace a obvody pro jejich realizaci 4.1 Polyadické číselné soustavy a jejich vlastnosti Polyadické soustavy jsou určeny přirozeným číslem z, kterému se říká základ nebo báze dané

Více

Jazyk C# a platforma.net

Jazyk C# a platforma.net Jazyk C# a platforma.net Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe jazyka C# - 1. část BI-DNP Evropský sociální fond

Více

Kubatova 19.4.2007 Y36SAP - 13. procesor - control unit obvodový a mikroprogramový řadič RISC. 19.4.2007 Y36SAP-control unit 1

Kubatova 19.4.2007 Y36SAP - 13. procesor - control unit obvodový a mikroprogramový řadič RISC. 19.4.2007 Y36SAP-control unit 1 Y36SAP - 13 procesor - control unit obvodový a mikroprogramový řadič RISC 19.4.2007 Y36SAP-control unit 1 Von Neumannova architektura (UPS1) Instrukce a data jsou uloženy v téže paměti. Paměť je organizována

Více

Čísla, reprezentace, zjednodušené výpočty

Čísla, reprezentace, zjednodušené výpočty Čísla, reprezentace, zjednodušené výpočty Přednáška 4 A3B38MMP kat. měření, ČVUT - FEL, Praha J. Fischer A3B38MMP, 2014, J.Fischer, ČVUT - FEL, kat. měření 1 Čísla 4 bitová dec bin. hex. 0 0000 0 1 0001

Více

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody Architektura počítačů Logické obvody http://d3s.mff.cuni.cz/teaching/computer_architecture/ Lubomír Bulej bulej@d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics 2/36 Digitální

Více

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí. Základní pojmy IT, číselné soustavy, logické funkce Základní pojmy Počítač: Stroj na zpracování informací Informace: 1. data, která se strojově zpracovávají 2. vše co nám nebo něčemu podává (popř. předává)

Více

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) % vstup a výstup na konzolu - vstupním zařízením je klávesnice, výstupním monitor (přístup jako k sériovým zařízením) - spojení s konzolami je nastaveno automaticky na začátku programu - ke konzole je možné

Více

Vyčtení / zapsání hodnot z/do OMC8000 pomocí protokolu UDP

Vyčtení / zapsání hodnot z/do OMC8000 pomocí protokolu UDP Application Note #05/14: Vyčtení / zapsání hodnot z/do OMC8000 pomocí protokolu UDP Požadavky: OMC8000 má přiřazenu IP adresu (statickou, nebo pomocí DHCP), označme ji OMC8000_IP Na straně PC máte spuštěného

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

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